Root stays off the network.
KLYRN runs as two programs. The one that faces the internet has no root access. The one with root access never faces the internet.
How the panel is split.
klyrn-web runs as an unprivileged user. It cannot become root, open the database, run a
program or make outbound requests. It asks klyrn-core over a Unix socket, and the core
decides for itself who is asking.
- Browser
-
klyrn-web user klyrn
Sign-in, sessions, the REST API, live events and the panel's static files. Nothing else.
- become root
- open the database
- execute a program
- use a shell
- make outbound HTTP
- write outside its state directory
- Unix socket, mode 0660 root:klyrn, peer credentials checked by the kernel, the actor is re-authorised against core's own records
-
klyrn-core root, never on the network
A closed registry of typed operations: create site, create database, issue certificate, and so on. Each has its own request type, validator, authoriser and audit entry. No operation takes a command string or an unconstrained path.
- nginx, php-fpm, mariadb, systemd, ufw, filesystem
A closed list of operations
The core offers typed operations, such as creating a site or issuing a certificate. Each one has a validator, an authoriser and an audit entry. None takes a command string.
Accounts are isolated
Every hosting account is its own Unix user, with a home directory nobody else can list. Each PHP site runs in its own pool, confined to that site. The kernel enforces the account's CPU, memory and process limits.
Signing in
Passwords are hashed with argon2id and sign-in attempts are rate-limited. Two-factor sign-in works with any TOTP authenticator app. A session ends after 12 hours without use.
Signed updates, encrypted backups
Releases are signed with ed25519 and the public key is built into the binary. An update that fails its checks rolls itself back. Backups copied to an S3-compatible bucket are encrypted on the server first.
What is not covered
KLYRN does not filter outbound traffic from hosted sites, and it does not absorb a volumetric attack. Cron jobs run outside an account's CPU and memory limits. Someone with a root shell on the server can do anything.