-
Notifications
You must be signed in to change notification settings - Fork 0
First Login and Security
This page covers securing your own account. For creating other staff accounts and assigning permissions, see Staff & Permissions.
On first start the plugin bootstraps the admin account from config.yml. If the password is still
the default changeme, the dashboard forces a password change on first login before you can use
anything else.
Open the user menu (top-right) → Change Credentials to update your username and/or password at any time. Passwords are stored bcrypt-hashed (12 rounds) — never in plain text. Changing your password issues a fresh session token.
Add a second factor with any authenticator app (Google Authenticator, Authy, 1Password, etc.).
Enable it (user menu → Security):
- Click Set up 2FA and confirm your current password.
- Scan the QR code into your authenticator app.
- Enter a 6-digit code to confirm.
- Save the recovery codes shown — 10 single-use codes, displayed only once. Store them somewhere safe; each can be used in place of a TOTP code if you lose your device.
Logging in with 2FA: after username + password, you're prompted for a 6-digit code (or a recovery code). The intermediate step uses a short-lived (5-minute) pre-auth token that can't access anything else.
Disable / regenerate: the Security page lets you disable 2FA or regenerate recovery codes (both require your password).
Locked out? An admin can reset any staff member's 2FA from Staff & Permissions. The bootstrap admin can also be recovered via the database — see Troubleshooting & FAQ.
Every login is a tracked session (stored server-side so it can be revoked). On the Security page you can:
- See all your active sessions with device, IP and last-seen time (your current device is badged).
- Revoke an individual session.
- Log out everywhere else in one click.
Admins can view and revoke all users' sessions from the Staff page.
| Protection | Detail |
|---|---|
| Password hashing | bcrypt, 12 rounds |
| Session tokens | Signed JWT (HS256) with a server-generated secret; checked against a server-side session store so they can be revoked |
| Session expiry |
jwt.expiry-hours (default 24h) |
| Login rate-limiting | 5 failed attempts per IP per minute → 429 Too Many Requests
|
| 2FA | Optional TOTP per account, with hashed single-use recovery codes |
| Audit trail | Logins, failures, 2FA changes, session revocations and more are recorded — see [[Audit Log |
| Security headers |
X-Content-Type-Options, X-Frame-Options: DENY, Referrer-Policy on every response |
If demo.enabled: true in Configuration, a read-only demo account is available
(one-click login on the sign-in page). Demo users can view pages but all non-GET requests are
blocked, so nothing can be changed.
EssentialsX Dashboard v1.1.0 · GitHub · Web control panel for EssentialsX
Getting Started
Features
- Dashboard & Analytics
- Players
- Economy
- Bans, Mutes & Warnings
- Chat Moderation
- Kits & Warps
- Live Console
- Server Controls
- EssentialsX Modules
- Scheduler
- Broadcast & Mail
Administration
Reference