System User Configuration
Wings creates and manages a dedicated system user for running server processes.Pterodactyl User
By default, Wings uses thepterodactyl user:
Automatic User Creation
Wings automatically creates the pterodactyl user on startup:- System account:
--systemflag - No home directory: Prevents login
- No shell:
/usr/sbin/nologinfor security - Dedicated group: Same name as user
Manual User Configuration
You can use an existing user:Filesystem Permissions
Wings automatically manages file ownership and permissions for server files.Directory Structure
Wings creates directories with restricted permissions:/var/lib/pterodactyl(0700) - Root directory/var/lib/pterodactyl/volumes(0700) - Server data/var/lib/pterodactyl/archives(0700) - Server transfers/var/lib/pterodactyl/backups(0700) - Local backups/tmp/pterodactyl(0700) - Temporary files
Automatic Chown
Wings automatically sets correct ownership on files:SFTP File Operations
SFTP operations automatically set ownership:sftp/handler.go:139-257 for all SFTP operations.
Permission Checking
Wings can verify permissions on boot:File Mode Defaults
- Files: 0644 (rw-r—r—)
- Directories: 0755 (rwxr-xr-x)
- SFTP forced directory mode: 0755
sftp/handler.go:163-166:
Container Isolation
Wings runs each server in an isolated Docker container with security restrictions.Container User Mapping
Containers run as the pterodactyl user:- Container runs as
pterodactyluser (typically UID 988) - Files are owned by
pterodactylon host - Processes inside container run as same UID
- Container runs as current user
- No privileged operations required
- Better security isolation
User Namespace Remapping
Wings supports Docker user namespace remapping:Container Security Options
Process Limits
Prevent fork bombs:Network Isolation
Each container gets an isolated network:Tmpfs Size Limits
Rootless Mode
Run Wings without root privileges:- Wings runs as non-root user
- Better security isolation
- Reduced attack surface
- Docker configured for rootless mode
- Proper UID/GID mapping
- No privileged operations
config/config.go:501-511 for rootless user handling.
SFTP Permissions
SFTP access is controlled through Panel-issued permissions.Permission Model
Permission Checking
Read-Only Mode
Force all SFTP connections to read-only:sftp/handler.go:94-96:
SFTP Permission Examples
Read Files:Container Passwd Files
Wings can generate custom passwd/group files for containers:This is useful for applications that require specific passwd entries but should be used carefully as it’s mounted into all containers.
Security Best Practices
System User Security
- Never use root: Always run Wings as a dedicated user
- No login shell: Use
/usr/sbin/nologinor/bin/false - System account: Use
--systemflag when creating users - Minimal permissions: Restrict UID/GID access to server files only
File Permission Hardening
- Restrict root directory:
- Verify ownership:
- Enable boot checks:
Container Isolation
- Enable PID limits:
- Restrict network access:
- Consider rootless mode for enhanced security
- Use user namespace remapping in Docker daemon
SFTP Hardening
- Enable read-only when appropriate:
- Use key-based authentication instead of passwords
- Limit SFTP permissions in Panel to minimum required
- Monitor SFTP access via server activity logs
Directory Isolation
Wings uses path validation to prevent directory traversal:- All file operations validate against server root
- Symlinks are restricted to server directory
- No access to host filesystem outside server root
server/filesystem/ for path safety implementations.
Troubleshooting
Permission Denied Errors
Check file ownership:Container User Mismatch
Verify Wings configuration:SFTP Access Denied
Check server suspension:- Suspended servers deny all SFTP access
- User must have appropriate file permissions
