Skip to main content
Wings implements multiple layers of security through filesystem permissions, user isolation, and container sandboxing. This page covers how Wings manages access control and security boundaries.

System User Configuration

Wings creates and manages a dedicated system user for running server processes.

Pterodactyl User

By default, Wings uses the pterodactyl user:
Configuration structure:

Automatic User Creation

Wings automatically creates the pterodactyl user on startup:
User Properties:
  • System account: --system flag
  • No home directory: Prevents login
  • No shell: /usr/sbin/nologin for 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:
Default Directories:
  • /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:
Recursive chown for directories:

SFTP File Operations

SFTP operations automatically set ownership:
See sftp/handler.go:139-257 for all SFTP operations.

Permission Checking

Wings can verify permissions on boot:
Configuration:
Disabling permission checks improves boot performance but may cause permission issues if files are modified externally.

File Mode Defaults

  • Files: 0644 (rw-r—r—)
  • Directories: 0755 (rwxr-xr-x)
  • SFTP forced directory mode: 0755
From 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:
Standard Mode:
  • Container runs as pterodactyl user (typically UID 988)
  • Files are owned by pterodactyl on host
  • Processes inside container run as same UID
Rootless Mode:
  • Container runs as current user
  • No privileged operations required
  • Better security isolation

User Namespace Remapping

Wings supports Docker user namespace remapping:
Configuration:

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:
Benefits:
  • Wings runs as non-root user
  • Better security isolation
  • Reduced attack surface
Requirements:
  • Docker configured for rootless mode
  • Proper UID/GID mapping
  • No privileged operations
See 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:
Implementation in sftp/handler.go:94-96:

SFTP Permission Examples

Read Files:
Modify Files:
Admin Access:

Container Passwd Files

Wings can generate custom passwd/group files for containers:
Generated files:
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

  1. Never use root: Always run Wings as a dedicated user
  2. No login shell: Use /usr/sbin/nologin or /bin/false
  3. System account: Use --system flag when creating users
  4. Minimal permissions: Restrict UID/GID access to server files only

File Permission Hardening

  1. Restrict root directory:
  1. Verify ownership:
  1. Enable boot checks:

Container Isolation

  1. Enable PID limits:
  1. Restrict network access:
  1. Consider rootless mode for enhanced security
  2. Use user namespace remapping in Docker daemon

SFTP Hardening

  1. Enable read-only when appropriate:
  1. Use key-based authentication instead of passwords
  2. Limit SFTP permissions in Panel to minimum required
  3. 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
See server/filesystem/ for path safety implementations.

Troubleshooting

Permission Denied Errors

Check file ownership:
Fix ownership:

Container User Mismatch

Verify Wings configuration:
Check system user:

SFTP Access Denied

Check server suspension:
  • Suspended servers deny all SFTP access
Verify permissions in Panel:
  • User must have appropriate file permissions
Check read-only mode: