Operations

Users, roles and access

Administrators see everything; other users see the sites they are granted. Sign-in supports passkeys and TOTP, and a lost password is reset from a shell with apcli.

Verified against auraPanel 1.21.3· Last updated 17 September 2026

Signing in

A panel account signs in with an email address and password, or with a passkey on its own: a successful passkey assertion opens a full session with no password step. Passkeys are offered only when the panel is reached over HTTPS, which it always is.

Sessions expire after 12 hours of inactivity by default; an administrator can set anything from 15 minutes to 30 days under Settings → Session timeout. The timer counts from your last activity, not from sign-in. Changing your password signs out every other device.

Sign-in attempts are limited to 10 per 5 minutes per IP address; the response is "too many attempts, slow down". A wrong password and an unknown email both return "invalid credentials", in the same time, so accounts cannot be enumerated.

Secure your account

Open Account & Security from your name in the header.

Passkeys

  1. Under Passkeys, press Add, give it a name (default "Passkey") and complete your browser's or device's prompt.
  2. Sign out and sign back in with the passkey to confirm it works. The list shows when each passkey was added and last used; rename or remove them here.

Two-factor authentication (TOTP)

  1. Under Two-Factor Authentication, press Enable. The panel shows the secret and an otpauth:// URI: add it to your authenticator app (paste the secret or the URI; a QR image is not shown).
  2. Enter the current 6-digit code to confirm. Codes are valid for 30 seconds, with one step of tolerance either side, and a code cannot be reused.

There are no TOTP backup codes. Keep a passkey registered as well, or make sure someone with root access to the server can reset you (below). Five wrong codes in 15 minutes end the pending sign-in: "too many incorrect codes — please sign in again".

Lost password or authenticator

  • Forgot password? on the sign-in screen sends a single-use link valid for one hour. It appears only when outgoing email is configured and a panel domain is set; otherwise it is hidden.
  • An administrator can reset another user's password and revoke their passkeys from Access Control.
  • From a shell on the server, root can reset anyone, including the only administrator, in any licence state:
sudo apcli user list
sudo apcli user passwd admin@example.com --generate     # prints the new password once

The reset also ends all of that user's sessions. It works over a root-only socket with a root-only token, so it cannot be reached from the network.

Roles

Access is decided along two axes: an account role, and per-site grants.

RoleCan
AdministratorEverything, on every site. The only role that may manage users and settings.
Site managerCreate, change and delete resources on the sites they are granted: the site itself, databases, backups, cron, files, SSH/SFTP users.
UserRead-only on granted sites' details, databases, backups, cron and files; no SSH/SFTP user access.
Custom rolesDefined by an administrator, starting from the User baseline, with any of the site resources set to read or read-write.

Two server-wide capabilities can be delegated to a non-administrator: server (services, reboot, hostname, package installs, snapshots) and runtimes (installing Node and PHP versions). Managing users and settings (SMTP, licence, off-site backup target, updates) can never be delegated. Docker sites and the audit log are also administrators only.

A non-administrator sees only the sites they have been granted. Nothing else on the server is visible to them.

Add a user

  1. Access Control → New user. Enter a name and email address and choose the account role.
  2. Grant sites: for each site, pick the role that applies to it.
  3. Leave the password blank and the panel generates one and shows it once; pass it on over a channel you trust. There is no invitation email.

Deleting a user revokes access immediately and removes the record; the sites are untouched. You cannot edit your own account from Access Control; use Account & Security.

Audit log

Audit Log (administrators) records every action taken through the panel: who, what, on which target, when. Site changes, file operations, database and backup actions, user and role changes, service restarts, updates and settings are all recorded; successful sign-ins are not. Entries are kept indefinitely and can be filtered by text, activity type and date range in the panel. There is no export.

Not available

  • Personal API tokens for users. The only token is the root-only CLI token used by apcli on the server itself. Register interest in API access.
  • TOTP recovery codes (see above).

Try the live demo

A real auraPanel on a real server, shared with everyone. Sign in with the demo account and click around.

Email
demo@goaura.one
Password
demo1234
Open the demo panel ↗

Shared public demo, so please don’t put anything personal in it. More about the demo →

Talk to us

Tell us what you need and how to reach you. A person reads this, not a queue.

We use these details only to reply to you. Privacy

Recent updates

What shipped in the last releases. With automatic updates on, each lands on your server the moment it is published.

  1. v1.21.3
    Framework sites were undetectable, and a restore could silently point the copy at the original's live database.

    DetectApp looked for each application's signature relative to the docroot — but every PHP framework in the registry serves from a subdirectory (DocrootSub: public, webroot, web, pub, docroot) and keeps the file that identifies it one level *above* that. So the Laravel signature searched <project>/public/artisan,…

  2. v1.21.2
    Restarting nginx now blocks the panel and reconnects, instead of showing a notice.

    v1.21.1 stopped the false "HTTP 520" but only put up a toast — and a toast is the wrong affordance when the panel itself is about to go away: the page sat there looking broken while every request failed underneath it.

  3. v1.21.1
    Restarting nginx from Services no longer reports a false failure.

    It showed "Restart failed — HTTP 520". The panel is reverse-proxied *by* nginx, so the request deadlocked against itself: the handler blocked waiting for the restart to finish, while nginx's graceful stop waited for that very request to drain. Neither could proceed until nginx's stop-retry timeout force-killed it,…

  4. v1.21.0
    Per-site X-Frame-Options, fixing page builders that couldn't load their preview.

    Elementor's editor failed with *"Multiple 'X-Frame-Options' headers with conflicting values ('DENY, SAMEORIGIN')"*. The cause is that nginx's add_header appends rather than replaces: when the application also sets the header — a WordPress security plugin, or a CDN transform — the browser received two values,…

  5. v1.20.6
    The multi-database restore refusal now says what is in the backup and what still works.

    It read only "Restoring a multi-database site isn't supported yet", which is a dead end: it named neither the databases involved, nor why one of them is the limit, nor any route forward.

  6. v1.20.5
    Services: cards in a row now match heights.

    Like the settings grid before it, the Services grid pinned each card to its own content height, so a row often showed one card noticeably shorter than the card beside it. Each row now takes the taller card's height and both fill it, and it re-balances as content changes — a runtime installed, a longer service list.

  7. v1.20.4
    Settings: paired cards now match heights.

    Organisation / Panel Domain and auraPanel Updates / Session timeout each sat at their own content height, so a row showed one card visibly shorter than its neighbour. Each row now takes the taller card's height and both fill it — driven by content, not a fixed value, so it still adapts as a card grows (a validation…

  8. v1.20.3
    Settings: Organisation and Panel Domain now share a row too.

    They were full-width blocks stacked above the rest of the page; they now sit side by side in the same two-column grid as the Updates / Session timeout pair, so the top of Settings reads as two tidy rows instead of four stacked bands. Both cards shrink cleanly — the logo drop zone is a fixed 44×44 and the name field…

All releases on GitHub ↗