Skip to main content
Russel is built for one trusted operator on one server. Anyone with the API token can deploy code that runs on the server, so the token is as sensitive as an SSH key. Russel doesn’t separate users or teams from each other.

What protects what

Known limits

  • Builds run repo code. A Nix build runs code from the repo as the russel account. Deploy only repos you trust, or see Nix build security.
  • DNS rebinding. Russel resolves a git host and checks the address before cloning, but git resolves it again. A malicious DNS server could answer differently the second time.
  • Plain env vars are visible to podman inspect as the russel account. Use secret:// for anything sensitive.
  • No built-in HTTPS in the control plane. Use a proxy or the tunnel.
  • No isolation between users or teams. Everyone with the token has full control.

Rules for running it

  1. Keep the control plane on 127.0.0.1:7878, and block 7878 in the firewall.
  2. Keep /etc/russel/env private: the installer makes it root:russel, mode 0640. Anyone in the russel group can read the token, so add only people you trust with the server.
  3. Reach the API through the SSH tunnel or an HTTPS proxy only.
  4. Deploy from git URLs. Leave RUSSEL_ALLOW_LOCAL_PATH_DEPLOY off unless you are the server’s only user.
  5. Put every password and key behind secret://.
  6. Use containers on servers without KVM. Treat microVMs as experimental.
To report a vulnerability, see SECURITY.md in the repo.