Security model
How Voodu thinks about trust, transport, and secrets.
Transport
- The CLI talks to the controller only over SSH. There is no public HTTP/gRPC daemon on the remote.
- The controller listens on
127.0.0.1:8686for plugins and on a Unix socket forreceive-pack. Neither is reachable from the public internet. - Caddy is the only public-facing process.
Secrets
voodu config setstores values in the controller's encrypted bolt store.- The encryption key is generated on first
voodu remote setupand stored in/opt/voodu/keys/master.keywith0600. - Secrets are decrypted into env at container start. They never touch disk in plaintext form.
- Manifest
env { }blocks are never treated as secrets — they're committed. Usevoodu configfor credentials.
Identity
- The CLI authenticates as your SSH user. Voodu does not add a separate auth layer —
ssh ubuntu@hostworks =vooduworks. - For team setups, use SSH cert-auth or per-user keys; the controller logs the SSH user on every apply.
TLS
- Caddy handles ACME — HTTP-01 by default, DNS-01 when you configure it.
- On-demand TLS validates against your policy before issuing. Always set a policy in production — without one, anyone can DDoS your ACME quota.
Reporting issues
Email security@voodu.sh (or the maintainer directly on GitHub). Please don't file public issues for unpatched vulnerabilities.