Create User
Reached from Users → Create User. Single-form wizard that provisions every piece of per-user state.
Required fields
- Username — lowercase, alphanumeric plus
-and_, 3–32 characters. Becomes the Linux account name, the PHP pool name, and the SFTP login. - Email — used for Kratos login and recovery email.
- Display name — shown in the panel header.
- Role —
user(hosting customer) oradmin(full operator access). - Package — selected from Hosting Packages. Determines quotas and limits.
- Primary domain — the first hosted domain for this user. Created in the same transaction.
Optional fields
- Password — leave blank to auto-generate (recommended). The generated password is displayed once on the success page and never stored in cleartext.
- Enable SFTP — defaults to on; users without an SSH key cannot SFTP until they add one under SSH Keys.
- Send welcome email — sends the credential to the user’s email address via Stalwart.
What happens at submit
- Validate uniqueness of username, email, and primary domain.
- Create the Kratos identity with the (generated or supplied) password.
- Insert the
usersrow with package and quota links. - Create the Linux account with
useradd -m -s /usr/sbin/nologin -G www-data,jabali-sftp. - Enable systemd lingering (
loginctl enable-linger <username>) so per-user timers fire without an active session. - Schedule the reconciler to converge: PHP pool drop-in, quota, slice limits, per-user nftables egress, default mail account for the primary domain.
Most steps complete within five seconds; PHP pool and nginx vhost converge on the next reconciler tick (within 60 seconds).
Failure modes
| Symptom | Cause | Resolution |
|---|---|---|
| “Username already in use” | A previous user with the same name was deleted but /home/<name> was not removed. |
trash /home/<name> and retry, or pick another name. |
| “Primary domain already exists” | Another user already owns the domain. | Delete the existing domain first or pick another. |
| Quota cannot be set | Filesystem mounted without usrquota / grpquota options. |
See troubleshooting. |
CLI
jabali user create --username alice --email alice@example.com --display-name "Alice Smith" --role user --package standard --primary-domain alicesite.com
Omit --password to auto-generate.