Skip to main content

Why Multi-User Management Matters

Prerequisites

RequirementDetails
Access Level:Root or a user with sudo privileges.
Software:Any terminal emulator (SSH via PuTTY, Terminal, or VS Code Remote SSH).
Knowledge:Basic CLI navigation (cd, ls), understanding of file permissions.

Why and When

  • Why it matters: Prevent security risks by avoiding shared root access, isolate WordPress site roles (admin, developer, backup).
  • Why this approach: Managing users and groups to control access, isolate responsibilities, and enhance server security.
  • When to use it: During initial server setup, team onboarding, automation script setup, or audit.

Why Multi-User Management Is Critical

ConcernWithout User ManagementWith Proper Setup
SecurityEveryone uses root — total exposureIsolated access, scoped permissions
File OwnershipWrong user owns files — breaks uploadsCorrect www-data or group ownership
Team CollaborationShared credentials — no accountabilitySeparate users and controlled access
AutomationCron jobs run as rootSafer automated user like backupbot
AuditabilityNo logs by userLogs tied to usernames
Deployment WorkflowAll roles use one loginClean separation of staging, dev, prod

Conceptual Overview: Linux Users & Groups

User

  • Individual login account with a UID.
  • Has a home directory /home/username.
  • Owns files and can execute commands/processes.

Group

  • A logical collection of users (e.g., developers).
  • Has a GID.
  • Files can be owned by a group.
  • Allows shared access control.

Syntax Overview: Core Commands

CommandSyntaxPurposeNotes / Example
adduseradduser usernameCreate a new userPrompts for password and user info
userdeluserdel -r usernameDelete user and home directoryUse -r to remove home and mail spool
passwdpasswd usernameSet or reset a user’s passwordCan be used as root or by the user
groupaddgroupadd groupnameCreate a new groupUsed for team-based access control
usermodusermod -aG group userAdd user to a groupAppend (-a) to Group (-G)
idid usernameShow UID, GID, and groupsHelpful for audit/log/debug
groupsgroups usernameList groups the user belongs toAlso shows current user's groups
whoamiwhoamiShow currently logged-in userFor quick check
w / whow, whoShow who is logged inReal-time login monitoring
lastlastShow login historyPulls from /var/log/wtmp
cat /etc/passwdN/AList all system usersFormat: user:x:UID:GID:comment:home:shell
cat /etc/groupN/AList all system groupsFormat: group:x:GID:members

Real Example Commands with Output

Create Developer User

sudo adduser dev1

Expected Output:

Adding user `dev1` ...
Creating home directory `/home/dev1` ...
New password:
Retype new password:

Create Group for Developers

sudo groupadd developers

No visible output if successful.

Add Users to Group

sudo usermod -aG developers dev1
sudo usermod -aG developers dev2

No visible output. Check with:

groups dev1

Expected Output:

dev1 : dev1 developers

Practical Example: WordPress Collaboration Setup

# Create users
sudo adduser dev1
sudo adduser dev2

# Create a shared group
sudo groupadd developers

# Add both users to the group
sudo usermod -aG developers dev1
sudo usermod -aG developers dev2

# Assign group ownership to theme folder
sudo chown -R www-data:developers /var/www/html/wp-content/themes/

# Set permissions
sudo chmod -R 775 /var/www/html/wp-content/themes/

Result: Developers can safely edit files in /themes/ without root access or breaking NGINX/OLS file ownership.

User Roles Reference for WordPress VPS

RoleUserGroupsAccess LevelUse Case
Web serverwww-datawww-dataSystemRuns PHP, writes uploads
Admindonnysudo, www-dataRoot with sudoServer owner
Developerdev1developersLimitedEdit themes/plugins
Backup botbackupbotbackupCron onlyNightly backups
FTP Userftp_editorftpusersSFTP onlyLimited access

Security Risks Without Proper User Setup

IssueExampleConsequence
Shared RootEveryone logs in as rootNo traceability, total risk
File Ownership Conflictdev1 uploads, server runs as www-dataPlugin update fails
Unnecessary Sudodev2 given full sudoCan rm -rf / accidentally
No User LoggingLogs don’t show who did whatNo accountability

Cheat Sheet

TaskCommand
Create a usersudo adduser john
Set passwordsudo passwd john
Create groupsudo groupadd editors
Add user to groupsudo usermod -aG editors john
View user ID infoid john
View current userwhoami
List all userscat /etc/passwd
Delete usersudo userdel -r john

Quick Lab

# Create dev user
sudo adduser dev1

# Create a group
sudo groupadd developers

# Assign group membership
sudo usermod -aG developers dev1

# Check group
id dev1

# Secure WP themes folder
sudo chown -R www-data:developers /var/www/html/wp-content/themes/
sudo chmod -R 775 /var/www/html/wp-content/themes/

Use Case Scenarios

ScenarioActionCommand
Add staging-only SFTP userCreate user without sudo or shelladduser sftp_user + restrict in sshd_config
Limit dev accessRemove from sudo groupdeluser dev1 sudo
Temporary accessSet expiry on userchage -E YYYY-MM-DD dev1
Track login activityView last loginslast

Mini Quiz

  1. What command adds a user and prompts for password?
  2. What happens if you forget the a flag in usermod -aG?
  3. How do you check what groups a user belongs to?
  4. Why is www-data the owner of WordPress files?
  5. What command removes a user and their home directory?