Domains and Authentication
Terrarium gives the host a few public management endpoints and can either self-host the identity provider or use an external one.
Default Public Endpoints
By default, Terrarium exposes:
https://manage.<dashed-public-ip>.traefik.mefor Cockpithttps://proxy.<dashed-public-ip>.traefik.mefor the Traefik dashboardhttps://lxd.<dashed-public-ip>.traefik.mefor the LXD API and UIhttps://auth.<dashed-public-ip>.traefik.mefor self-hosted ZITADEL when--idp=local
You can override those with:
--domain--manage-domain--proxy-domain--lxd-domain--auth-domain
If you set only --domain, Terrarium derives:
manage.<domain>proxy.<domain>lxd.<domain>auth.<domain>when self-hosted ZITADEL is enabled
These domains are for management and explicitly published services. They are not a sign that every service inside every container is reachable from outside.
Email Settings
--emailTerrarium contact/admin email and the default ZITADEL bootstrap admin email--acme-emailACME account identity for Traefik and LXD certificate automation
If --acme-email is omitted, Terrarium falls back to --email.
Management Authentication
Terrarium separates SSH access from web management access.
SSH
- SSH is hardened to key-based auth
- password SSH is disabled
Cockpit
Cockpit is protected in two layers:
- OIDC gate through Traefik
ForwardAuthand host-leveloauth2-proxy - normal Cockpit PAM login on the host
That means:
- users must pass the OIDC gate first
- Cockpit still needs a usable local host account to log in
- in practice,
rootneeds a local password for Cockpit
If root does not already have one:
- interactive install prompts for it
- non-interactive install requires
--root-pwd
Terrarium uses that password during provisioning and does not store the plaintext in /etc/terrarium/config.yaml.
LXD
LXD keeps native OIDC auth and authorization.
- OIDC issuer/client settings are configured by Terrarium
- access is granted only to members of the configured Terrarium admin group
IDP Modes
Terrarium supports two identity-provider modes.
--idp local
Terrarium deploys ZITADEL on the host and provisions the clients and claims it needs.
Defaults:
- auth domain:
auth.<domain>orauth.<dashed-public-ip>.traefik.me - admin group:
terrarium-admins
Terrarium also:
- provisions the management role
- grants that role to the bootstrap admin
- emits a flat
groupsclaim foroauth2-proxyand LXD
--idp oidc
Terrarium uses an external OIDC provider.
You must provide:
--oidc--oidc-client--oidc-secret--admin-group
Requirements for the external provider:
- allow
https://<manage-domain>/oauth2/callback - allow
https://<manage-domain>/oauth2/app/callbackif you want to protect published app routes with@auth - allow
https://<lxd-domain>/oidc/callback - emit a
groupsclaim as a JSON string array containing the configured admin group
Terrarium reuses the same external OIDC client for:
- Cockpit's oauth2-proxy
- LXD
- published HTTP(S) routes protected with
@auth
Admin Group
The management admin group controls who gets into:
- Cockpit, through
oauth2-proxy - LXD, through native OIDC group mapping
Local mode default:
terrarium-admins
External OIDC mode:
- required explicitly through
--admin-group
This is intentionally separate from app-level route protection. Management access and published app access do not need to be the same thing.
If you want to protect published app routes, continue to Protecting Published Services with OIDC.