This document closes the last major public-safe operational gap that remained lighter than the private repo.
It explains how to use the new public helpers for:
doaspolicy review and optional command-scoped transition- SSH maintenance-window hardening and rollback
- host-local runtime secret file layout and verification
Copy and edit these tracked examples into ignored local files:
config/security.conf.exampleconfig/secrets-runtime.conf.example
Suggested locations:
config/local/security.confconfig/local/secrets-runtime.conf/root/.config/openbsd-mailstack/security.conf/root/.config/openbsd-mailstack/secrets-runtime.conf
From the repo root:
./scripts/phases/phase-15-apply.ksh
./scripts/phases/phase-16-apply.kshReview the rendered files under:
services/generated/rootfs/etc/examples/openbsd-mailstack/services/generated/rootfs/etc/postfixadmin/services/generated/rootfs/etc/roundcube/
Render the broad baseline:
./maint/doas-policy-baseline-check.ksh --renderRender the optional command-scoped posture:
./maint/doas-policy-transition.ksh --renderIf you are evaluating the command-scoped posture on an OpenBSD host, use a maintenance window and the built-in backup and rollback path.
doas ./maint/ssh-hardening-window.ksh --planWhen ready, apply and verify during a maintenance window:
doas ./maint/ssh-hardening-window.ksh --apply
doas ./maint/ssh-hardening-window.ksh --verifyRollback is built in:
doas ./maint/ssh-hardening-window.ksh --rollbackReview the layout:
./maint/runtime-secret-layout.ksh --planCreate the directories on the host:
doas ./maint/runtime-secret-layout.ksh --install-dirsRender safe stubs into a scratch directory for editing:
./maint/runtime-secret-layout.ksh --render-stubs /tmp/openbsd-mailstack-secret-stubs./maint/repo-secret-guard.ksh./scripts/phases/phase-15-verify.ksh
./scripts/phases/phase-16-verify.kshAfter this step, the public repo now provides runnable public-safe helpers for hardening and host-local secret layout work. Operators still supply their own identities, private keys, passwords, and provider credentials locally, which is part of the design rather than a missing migration.