Overview
Subusers allow you to grant other users access to your servers with specific, limited permissions. This is useful for:- Team collaboration: Give team members access to manage servers
- Support access: Allow support staff to troubleshoot issues
- Limited access: Grant developers access without full administrative rights
- Delegation: Assign specific responsibilities to different users
Subusers are server-specific. Each subuser assignment is tied to a single server, and you can grant different permissions on different servers.
Understanding Permissions
Pterodactyl uses a granular permission system with permissions organized into categories:Permission Categories
Websocket
Websocket
websocket.connect - Allows connecting to the server console websocketThis permission is automatically granted to all subusers and enables viewing console output and real-time server stats.
Control
Control
Control the server’s power state and send commands:
- control.console - Send commands to the server console
- control.start - Start the server if stopped
- control.stop - Stop a running server
- control.restart - Restart the server
User Management
User Management
Manage other subusers (cannot edit own account or grant permissions they don’t have):
- user.create - Create new subusers
- user.read - View subusers and their permissions
- user.update - Modify other subusers
- user.delete - Delete subusers
File Management
File Management
Manage server files and SFTP access:
- file.create - Create files and folders
- file.read - View directory contents
- file.read-content - View and download file contents
- file.update - Modify existing files
- file.delete - Delete files and directories
- file.archive - Create and extract archives
- file.sftp - Connect via SFTP (requires file permissions)
Backup Management
Backup Management
Manage server backups:
- backup.create - Create new backups
- backup.read - View all backups
- backup.delete - Remove backups
- backup.download - Download backups (gives access to all files)
- backup.restore - Restore backups (deletes current files)
Allocation Management
Allocation Management
Manage server port allocations:
- allocation.read - View all allocations
- allocation.create - Assign additional allocations
- allocation.update - Change primary allocation and add notes
- allocation.delete - Remove allocations
Startup Configuration
Startup Configuration
Manage startup settings:
- startup.read - View startup variables
- startup.update - Modify startup variables
- startup.docker-image - Change the Docker image
Database Management
Database Management
Manage server databases:
- database.create - Create new databases
- database.read - View databases
- database.update - Rotate database passwords
- database.delete - Remove databases
- database.view_password - View database passwords
Schedule Management
Schedule Management
Manage server schedules:
- schedule.create - Create new schedules
- schedule.read - View schedules and tasks
- schedule.update - Modify schedules and tasks
- schedule.delete - Delete schedules
Settings
Settings
Manage server settings:
- settings.rename - Rename the server and change description
- settings.reinstall - Trigger server reinstall
Activity Logs
Activity Logs
Access server activity:
- activity.read - View the server activity log
Permission.php:101-209 for the complete permission structure.
Adding a Subuser
Enter User Email
Enter the email address of the user you want to add.
The user must already have a Pterodactyl account with this email address. If they don’t have an account, they’ll need to create one first.
Select Permissions
Choose which permissions to grant this subuser. You can:
- Select entire permission categories (grants all permissions in that category)
- Select individual permissions for fine-grained control
- Mix and match as needed
What Happens When You Add a Subuser
- The system verifies the user exists
- Checks that the user isn’t the server owner
- Ensures the user isn’t already a subuser on this server
- Creates the subuser relationship with specified permissions
- Automatically adds
websocket.connectpermission - Logs the action as
server:subuser.create
SubuserController.php:64-79 for implementation details.
Permission Validation
When setting subuser permissions, the system validates them:- Only valid permissions are assigned
- Invalid permissions are filtered out
websocket.connectis always included
Updating Subuser Permissions
You can modify a subuser’s permissions at any time.Modify Permissions
Adjust the permissions as needed:
- Check boxes to grant permissions
- Uncheck boxes to revoke permissions
SFTP Access Revocation
When you update permissions, the system automatically revokes active SFTP sessions if permissions have changed:Removing a Subuser
When you no longer want a user to have access to your server:Permission Inheritance Rules
Limitations
-
Server Owner Restrictions:
- You cannot add the server owner as a subuser
- The server owner always has full permissions
-
Self-Management:
- Subusers cannot modify their own permissions
- Subusers cannot delete themselves
-
Permission Constraints:
- Subusers with
user.createoruser.updatecannot grant permissions they don’t have - You can only assign permissions you have access to
- Subusers with
Automatic Permissions
- websocket.connect is automatically granted to all subusers and cannot be removed
- This ensures subusers can always view the console output
Best Practices
Principle of Least Privilege
Principle of Least Privilege
Grant only the minimum permissions necessary for the user’s role. Start with minimal access and add permissions as needed.Example roles:
- Viewer:
websocket.connect,activity.read - Operator: Add
control.*permissions - Developer: Add
file.*,database.*permissions - Admin: Add
user.*,settings.*permissions
Use Clear Email Addresses
Use Clear Email Addresses
Ensure subusers use professional email addresses that clearly identify them. This makes it easier to track who has access to what.
Regular Audits
Regular Audits
Periodically review subuser lists and permissions:
- Remove users who no longer need access
- Adjust permissions based on changing roles
- Verify permissions match current responsibilities
Document Roles
Document Roles
Maintain documentation of what permissions each role should have. This ensures consistency when adding new subusers.
Be Cautious with Dangerous Permissions
Be Cautious with Dangerous Permissions
Some permissions are particularly sensitive:
- backup.download: Grants access to all server files
- backup.restore: Can delete all current files
- settings.reinstall: Wipes the server
- startup.docker-image: Can change server behavior
Monitor Activity Logs
Monitor Activity Logs
Regularly review server activity logs to ensure subusers are using their access appropriately.
Activity Logging
All subuser operations are logged with details:Subuser Creation
Subuser Update
Subuser Deletion
Common Permission Sets
Read-Only Access
Server Operator
Developer Access
Full Management (Sub-Admin)
Notice that even the “Full Management” example doesn’t include
settings.reinstall - this is intentionally restricted as it’s a destructive action.Troubleshooting
”User is already a subuser on this server”
This user has already been added to this server. You cannot add the same user twice. If you need to change their permissions, edit the existing subuser instead.”Cannot add the server owner as a subuser”
The server owner automatically has full permissions and cannot be added as a subuser.”User not found”
The email address doesn’t match any Pterodactyl account. The user needs to create an account first.Subuser Can’t Access Certain Features
Verify they have the required permissions:- SFTP access: Requires
file.sftpplus appropriatefile.*permissions - Console access: Requires
websocket.connect(automatically granted) - Send commands: Requires
control.console
Permissions Not Taking Effect
If permission changes don’t seem to apply:- Ask the subuser to log out and log back in
- Check server activity logs to confirm the update was saved
- Verify the permissions were actually changed (check current vs. old permissions)
