Linux Administration #2: Advanced User Management

This article covers advanced aspects of Linux user management, from PAM configuration and user quotas to ACLs and monitoring user activities.

Reading time: 45 min

Welcome to the second part of our technical wiki series on Linux administration!

After we learned the fundamentals of user and permission management in the first article, we now dive deeper into the advanced aspects. Advanced user management encompasses all tools and concepts that go beyond basic creation and deletion of user accounts.

Imagine a Large Company

Simple user management would be like a doorman issuing ID cards. Advanced user management, on the other hand, is like a complete security system with access control, monitoring, and automated management.

⚠️ Note: In this article, we use Ubuntu/Debian as the example distribution. The basic concepts are the same on all Linux systems, but package installation and some configuration paths may vary depending on the distribution. If you use a different distribution, please consult the relevant documentation for the specific installation commands and paths.

Installing Required Packages

Installing PAM modules for advanced password policies

  • sudo apt install libpam-pwquality cracklib-runtime

Verifying the installation


dpkg -l | grep libpam-pwquality
dpkg -l | grep cracklib

What gets installed?

libpam-pwquality: Module for advanced password quality checks cracklib-runtime: Dictionary-based password validation

Important configuration files:


┌─────────────────────────────────────────────────────────────┐
│  STRUCTURE OF PWQUALITY CONFIGURATION FILES                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  /etc/security/                                             │
│  ├── pwquality.conf     → Main quality configuration        │
│  └── pwquality.conf.d/  → Modular configuration files       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Understanding Password Policies

A password policy is like a set of rules for secure passwords:

Password policy components:


┌─────────── Complexity ─────────────────────────────────────┐
│  • Minimum length                                          │
│  • Character types                                         │
│  • Repetition rules                                        │
├─────────── Lifecycle ──────────────────────────────────────┤
│  • Validity period                                         │
│  • History                                                 │
│  • Change intervals                                        │
└─────────────────────────────────────────────────────────────┘

Password Policy Configuration

In advanced user management, setting up secure password policies is crucial. Think of the password policy like a security standard in a building.

Understanding Basic Password Policies

Password components:


┌─────────── Complexity ─────────────────────────────────────┐
│  • Minimum length                                          │
│  • Character types (A-Z, a-z, 0-9, @#$)                    │
│  • Dictionary check                                        │
├─────────── Validity ───────────────────────────────────────┤
│  • Maximum age                                              │
│  • Minimum age                                              │
│  • Warning time before expiry                               │
├─────────── History ────────────────────────────────────────┤
│  • Number of old passwords                                 │
│  • Reuse prevention                                        │
└─────────────────────────────────────────────────────────────┘

PAM Configuration for Password Policies

PAM (Pluggable Authentication Modules) is the heart of authentication in Linux. It allows flexible configuration of security policies.

Understanding PAM

PAM structure:


┌─────────── Authentication ────────────────────────────────┐
│  auth       Identity verification                          │
├─────────── Account ───────────────────────────────────────┤
│  account    Account access & status                        │
├─────────── Password ──────────────────────────────────────┤
│  password   Password changes                               │
├─────────── Session ───────────────────────────────────────┤
│  session    Session management                             │
└─────────────────────────────────────────────────────────────┘

Setting Up Password Quality Policies

Main configuration file:

Open configuration file

  • sudo nano /etc/security/pwquality.conf

Important parameters:


minlen = 12          # Minimum password length

minclass = 3         # At least 3 different character classes

maxrepeat = 2        # Maximum 2 identical characters in a row

gecoscheck = 1       # Checks for username in password

dictcheck = 1        # Enables dictionary check

Configuring PAM Modules for Passwords

PAM configuration for passwords

  • sudo nano /etc/pam.d/common-password

Example configuration


password    required    pam_pwquality.so retry=3
password    required    pam_unix.so use_authtok sha512 shadow remember=5

Password History and Expiry Management

Managing password history and expiry times is an important security component:

Password lifecycle:


┌─────────── Creation ──────────────────────────────────────┐
│  Day 0: New password set                                   │
├─────────── Usage ─────────────────────────────────────────┤
│  Day 1-75: Normal usage                                   │
├─────────── Warning ───────────────────────────────────────┤
│  Day 76-89: Expiry warning                                │
├─────────── Expiry ────────────────────────────────────────┤
│  Day 90: Password must be changed                          │
└─────────────────────────────────────────────────────────────┘

Configuring Password History

In /etc/pam.d/common-password:


password required pam_pwhistory.so remember=5 enforce_for_root use_authtok

Parameters explained:


┌─────────────────────────────────────────────────────────────┐
│  IMPORTANT PAM PWHISTORY PARAMETERS                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  remember=5        → Stores the last 5 passwords            │
│  enforce_for_root  → Enforces history for root as well      │
│  use_authtok       → Uses token from previous PAM modules   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Setting Up Password Expiry

in /etc/login.defs


PASS_MAX_DAYS   90    # Maximum age

PASS_MIN_DAYS   1     # Minimum age

PASS_WARN_AGE   14    # Warning time before expiry

For individual users:

  • sudo chage -M 90 -m 1 -W 14 username

Detailed Expiry Configuration

Display user details:

  • sudo chage -l username

Example output:

  • Last password change : Jan 01, 2024
  • Password expires : Apr 01, 2024
  • Password inactive : never
  • Account expires : never
  • Minimum number of days between changes : 1
  • Maximum number of days between changes : 90
  • Number of days of warning before expire : 14

Common Password Policy Issues

Problem: Password change fails


# Error message on password change:
passwd

# Output: "Password does not meet complexity requirements"
# Checking the current policy:
sudo cat /etc/security/pwquality.conf | grep -v '^#'

Common causes:

  • Password too short
  • Missing character classes
  • Contains username
  • Too similar to old password
  • Password history violated

Problem: User cannot log in


# Checking password status
sudo chage -l username

# Common causes and solutions:
# 1. Password expired
sudo chage -d 0 username  

# Forces change on next login
# 2. Account locked
sudo usermod -U username  

# Unlock account
# 3. Check PAM configuration
sudo cat /etc/pam.d/common-auth

Practical Examples

Scenario 1: Development team setup


# Password policy for developers
sudo nano /etc/security/pwquality.conf

minlen = 14
minclass = 3
maxrepeat = 2
enforce_for_root

# Password aging for sensitive projects
sudo chage -M 60 -m 1 -W 7 developer1

Scenario 2: Temporary employees


# Set expiry date
sudo useradd -e 2024-12-31 tempuser

# or for existing user
sudo chage -E 2024-12-31 tempuser

# Check status
sudo chage -l tempuser

Scenario 3: Enforce automatic password change

New employees should change their initial password on first login.


# Force password change
sudo chage -d 0 newuser

# Check settings
sudo chage -l newuser

Scenario 4: Temporary access

Interns need access for 3 months.


# Create user with expiry date
sudo useradd -e $(date -d "+3 months" +%Y-%m-%d) intern01

# Warning 14 days before expiry
sudo chage -W 14 intern01

# Check status
sudo chage -l intern01

Scenario 5: Enforce password history


# Adjust PAM configuration
sudo nano /etc/pam.d/common-password

# Add/adjust the following line:
password required pam_pwhistory.so remember=5 use_authtok

# Parameters explained:
remember=5      # Stores the last 5 passwords

use_authtok     # Uses previous PAM token

Implementing User Quotas

Quotas are like storage limits for users and groups. They help control resource usage.

Quota types:


┌─────────── Block Quotas ────────────────────────────────────┐
│  Limits storage space                                       │
│  Example: 5GB per user                                      │
├─────────── Inode Quotas ────────────────────────────────────┤
│  Limits number of files                                     │
│  Example: Max. 50,000 files                                 │
└─────────────────────────────────────────────────────────────┘

Activating the Quota System

Installing Quota Support

  • sudo apt install quota quotatool

Adjusting /etc/fstab


# Add usrquota,grpquota to mount options
sudo nano /etc/fstab

# Example:
# /dev/sda1  /home  ext4  defaults,usrquota,grpquota  0  2

Remounting the filesystem

  • sudo mount -o remount /home

Setting Up Quotas

Creating Quota Databases

  • sudo quotacheck -cugm /home

Activating quotas

  • sudo quotaon -v /home

Setting quota for a user


sudo edquota -u username

# Soft limit: Warning
# Hard limit: Strict limit

Advanced Quota Configurations

Understanding Soft and Hard Limits:

Editing quota for a user:

  • sudo edquota -u username

Example output:


Filesystem  blocks  soft    hard   inodes  soft  hard
/dev/sda1   500000  524288  786432  1000   1500  2000
                  ├─Current┤└─Warn─┘└─Limit┘└─Files──────┘

Meaning:

  • blocks: Current storage usage
  • soft: Warning when exceeded
  • hard: Absolute limit
  • inodes: Number of files

Managing Group Quotas:


# Set quota for a group
sudo edquota -g developers

# Display quota status for group
sudo quota -g developers

# Quota report for all groups
sudo repquota -g /home

Configuring Quota Warnings:

Set grace period:

  • sudo edquota -t

Example:


Filesystem    Block grace period    Inode grace period
/dev/sda1     7days                 7days

# 7 days between soft and hard limit

Practical Quota Scenarios

Development Team Setup

Developers get generous limits:

  • sudo edquota -u developer1

Example:


Filesystem  blocks   soft    hard   inodes   soft   hard
/dev/sda1   500000  5242880 6291456  10000   50000  75000

# Meaning:
# - 5GB soft limit (warning)
# - 6GB hard limit (strict)
# - 50,000 files soft limit
# - 75,000 files hard limit

Intern Setup

Limited resources for temporary employees:

  • sudo edquota -u intern1

Example:

  • Filesystem blocks soft hard inodes soft hard
  • /dev/sda1 100000 524288 786432 1000 2000 3000

Create template for all interns:

  • sudo edquota -p intern1 intern2 intern3

Project Quotas

Project directory with group quota:

  • sudo edquota -g projectgroup

Example:

  • Filesystem blocks soft hard inodes soft hard
  • /dev/sda1 1000000 10485760 15728640 20000 50000 75000

Quota report for the project:


sudo repquota -g /home | grep projectgroup

Quota Monitoring and Management


# Display quota status for a user
sudo quota -v username

# Quota report for all users
sudo repquota -a /home

# Detailed quota statistics
sudo quota -vs username

Quota Warnings and Notifications:


# Configure warning messages
sudo edquota -t

# Set grace period (grace period after exceeding limit)
# Set up email notifications
sudo nano /etc/quotamail.conf

Practical Monitoring Example:


#!/bin/bash
# Quota monitoring script
# Find users over 80% usage
repquota -a | awk '$4 > 80 {print $1": "$4"%"}'

# Send warning to users
for user in $(repquota -a | awk '$4 > 80 {print $1}')
do
	echo "Warning: Quota nearly exhausted" | mail -s "Quota Warning" $user
done

Access Control Lists (ACLs)

ACLs extend the traditional Linux permission system with fine-grained access controls.

Prerequisites:

  • sudo apt install acl

Understanding ACL Concepts

ACL types:


┌─────────── Extended ACLs ─────────────────────────────────┐
│  • Additional user permissions                             │
│  • Additional group permissions                            │
│  • Inheritable permissions                                 │
├─────────── Mask ───────────────────────────────────────────┤
│  • Maximum effective permissions                           │
│  • Overrides other ACL entries                             │
└─────────────────────────────────────────────────────────────┘

ACL Management

ACLs for existing directory structure

  • sudo setfacl -R -m g:developers:rwx /projects/webapp/
  • sudo setfacl -R -m g:qa:rx /projects/webapp/

Setting up inheritance

  • sudo setfacl -d -m g:developers:rwx /projects/webapp/

Practical ACL Use Cases

Development Project Setup


# Create project structure
sudo mkdir -p /projects/webapp/{src,docs,config}

# Base ACLs for development team
sudo setfacl -m g:developers:rwx /projects/webapp/src
sudo setfacl -m g:developers:rwx /projects/webapp/docs

# Special permissions for QA team
sudo setfacl -m g:qa:rx /projects/webapp/src
sudo setfacl -m g:qa:r /projects/webapp/docs

# Config directory with restricted access
sudo setfacl -m g:admin:rwx,g:developers:r /projects/webapp/config

Managing ACLs


# Display ACL for a file
getfacl file.txt

# Set ACL
# Syntax: setfacl -m u:username:rwx file
setfacl -m u:anna:rw- project.txt
setfacl -m g:developers:r-x scripts/

# Multiple ACL entries
setfacl -m u:anna:rw-,g:project:r-- file.txt

# Recursive ACLs for directories
setfacl -R -m g:developers:rwx /projects/

Practical ACL Examples

Standard ACLs for a Project Directory


# Create project directory
sudo mkdir -p /projects/webapp

# Set base ACLs
# Developers have full access
# QA team has read and execute permissions
sudo setfacl -m g:developers:rwx,g:qa:rx /projects/webapp

# Default ACLs for new files
sudo setfacl -d -m g:developers:rwx,g:qa:rx /projects/webapp

# Verify ACLs
getfacl /projects/webapp

Shared Document Directory


# Document structure
sudo mkdir -p /documents/{public,team,management}

# Public: Everyone can read
sudo setfacl -m g:users:rx /documents/public
sudo setfacl -d -m g:users:rx /documents/public

# Team: Only team members
sudo setfacl -m g:team:rwx /documents/team
sudo setfacl -d -m g:team:rwx /documents/team

# Management: Only specific people
sudo setfacl -m u:boss:rwx,u:secretary:rx /documents/management

ACLs for Different Use Cases

Shared document directory:


# Directory structure:
/documents/
├── public/     # Everyone can read
├── team/       # Only team members
└── private/    # Only specific users

# Set ACLs
sudo setfacl -R -m g:users:rx /documents/public
sudo setfacl -R -m g:team:rwx /documents/team
sudo setfacl -m u:boss:rwx,u:secretary:rx /documents/private

More Practical ACL Examples

Complex Project Structure with ACLs


# Create project structure
sudo mkdir -p /projects/webapp/{src,docs,config,tests}

# Base permissions
sudo chown -R root:developers /projects/webapp
sudo chmod 2775 /projects/webapp

# Set differentiated ACLs
# Developers have full access to src and tests
sudo setfacl -R -m g:developers:rwx /projects/webapp/src
sudo setfacl -R -m g:developers:rwx /projects/webapp/tests

# QA team has read and execute permissions for tests
sudo setfacl -R -m g:qa:rx /projects/webapp/tests

# Documentation readable for everyone
sudo setfacl -R -m g:users:rx /projects/webapp/docs

# Config only for administrators
sudo setfacl -R -m g:admin:rwx,g:developers:r /projects/webapp/config

ACL Inheritance for New Files


# Set default ACLs for new files
sudo setfacl -d -m g:developers:rwx /projects/webapp/src
sudo setfacl -d -m g:qa:rx /projects/webapp/tests

# Verify ACL inheritance
getfacl /projects/webapp/src

Monitoring User Activities

Monitoring user activities is an important aspect of system security and management.

Prerequisites:

  • sudo apt install auditd audispd-plugins

Understanding User Activity Monitoring

Monitoring areas:


┌─────────── Login/Logout ────────────────────────────────────┐
│  • Login attempts                                           │
│  • Successful/failed                                        │
│  • SSH access                                               │
├─────────── Activities ─────────────────────────────────────┤
│  • Executed commands                                        │
│  • File access                                              │
│  • Resource usage                                           │
└─────────────────────────────────────────────────────────────┘

Login Monitoring


# Current login sessions
who
w

# Login history
last
last -f /var/log/wtmp    

# Successful logins
lastb                    

# Failed logins
# Monitor SSH access
tail -f /var/log/auth.log | grep sshd

Recording User Activities


# Activate audit system
sudo apt install auditd

# Add audit rules
sudo auditctl -w /etc/passwd -p wa -k user-modify
sudo auditctl -w /etc/group -p wa -k group-modify

# Display audit logs
sudo ausearch -k user-modify
sudo aureport --auth     

# Authentication report

Monitoring Resource Usage


# Processes of a user
ps -u username

# Resource consumption
top -u username
iotop -u username        

# I/O activity
# Detailed process analysis
sudo ps auxf | grep username

Advanced Monitoring Tools

Process Monitoring with auditd:


# Set up process monitoring
sudo auditctl -a exit,always -F arch=b64 -S execve -k cmd_exec

# Monitor user actions
sudo ausearch -k cmd_exec
sudo aureport -x --summary

# Detailed process analysis
sudo ausearch -k cmd_exec -i | grep username

Login Monitoring with fail2ban:


# Installation
sudo apt install fail2ban

# Check configuration
sudo fail2ban-client status
sudo fail2ban-client status sshd

# Display blocked IPs
sudo fail2ban-client get sshd banip

Resource Monitoring:


# CPU and memory per user
top -U username

# Disk usage per user
sudo du -sh /home/*

# Network activity
sudo nethogs
sudo iftop

Real-Time Monitoring

System Activity Reporter (SAR):


# Installation
sudo apt install sysstat

# Record activities
sudo sar -u 1 5    

# CPU usage every 1 second, 5 times
sudo sar -r 1 5    

# Memory usage
sudo sar -b 1 5    

# I/O statistics

Process Tracking:


# Process tree of a user
pstree username

# Detailed process information
ps auxf | grep username

# Continuous monitoring
watch -n 1 'ps aux | grep username'

Integration of Monitoring Tools

Central Logging System


# Configure rsyslog for central logging
sudo nano /etc/rsyslog.d/auth-logging.conf

# Example configuration:
auth,authpriv.*                 /var/log/auth.log

# Log user activities
*.*;auth,authpriv.none          -/var/log/syslog

Automated Monitoring Script:


#!/bin/bash
# user-monitor.sh
# Monitor user activities
echo "=== Daily User Activity Report ===" > /var/log/user-report.txt
date >> /var/log/user-report.txt

# Login attempts
echo "Failed Logins:" >> /var/log/user-report.txt
grep "Failed password" /var/log/auth.log >> /var/log/user-report.txt

# Sudo usage
echo "Sudo Usage:" >> /var/log/user-report.txt
grep "sudo:" /var/log/auth.log >> /var/log/user-report.txt

# Resource usage per user
echo "Resource Usage:" >> /var/log/user-report.txt
ps aux --sort=-%cpu | head -n 5 >> /var/log/user-report.txt

Automatic notifications:


# Warning on suspicious activities
if grep -q "Failed password" /var/log/auth.log; then
	echo "Warning: Failed login attempts" | \
	mail -s "Security Warning" admin@localhost
fi

Troubleshooting

Common PAM Issues and Solutions

PAM Configuration Issues

Problem: PAM authentication fails


# Error message:
# Authentication token manipulation error
# Step-by-step diagnosis:
# 1. Check PAM logs
sudo tail -f /var/log/auth.log

# 2. Verify PAM modules
ldd /usr/lib/pam/pam_pwquality.so

# 3. Test PAM configuration
sudo pam-auth-update --verbose

Permission Issues

Problem: Shadow password access


# Error message:
# Authentication service cannot retrieve authentication info
# Solutions:
# 1. Check shadow file permissions
ls -l /etc/shadow

# Should be: -rw-r----- root:shadow
# 2. Check PAM shadow module
sudo ls -l /lib/x86_64-linux-gnu/security/pam_unix.so

Practical Solution Examples

Problem: Bypass password history (for emergencies)


sudo nano /etc/pam.d/common-password

# Temporarily comment out remember=5

Problem: Locked root account

  • sudo passwd -u root

Problem: Forgotten password

  • sudo passwd username

Best Practices for Troubleshooting

Checklist for password problems:


┌─────────── Configuration ──────────────────────────────────┐
│  □ PAM modules installed?                                   │
│  □ Configuration files readable?                            │
│  □ Permissions correct?                                     │
├─────────── Logs ───────────────────────────────────────────┤
│  □ auth.log checked?                                        │
│  □ syslog reviewed?                                         │
│  □ systemd-journal examined?                                │
├─────────── User ───────────────────────────────────────────┤
│  □ Account not locked?                                      │
│  □ Groups correct?                                          │
│  □ Shadow entry present?                                    │
└─────────────────────────────────────────────────────────────┘

Logging and Monitoring


# Real-time log monitoring
sudo tail -f /var/log/auth.log

# Failed login attempts
sudo grep "Failed password" /var/log/auth.log

# Monitor PAM events
sudo journalctl -u systemd-logind

Emergency Recovery


# Temporary policy disable (emergencies only!)
sudo mv /etc/pam.d/common-password /etc/pam.d/common-password.bak
sudo cp /etc/pam.d/common-password.orig /etc/pam.d/common-password

# Restore backup
sudo mv /etc/pam.d/common-password.bak /etc/pam.d/common-password

Documentation and Reporting


# Document current configuration
sudo cp /etc/security/pwquality.conf /root/pwquality.conf.$(date +%F)

# Log configuration changes
echo "$(date): PAM configuration adjusted" >> /var/log/security-changes.log

# Regular checks
sudo aureport --auth    

# Authentication reports
sudo aureport --failed  

# Failed logins

Exercise

Setting Up a Secure User Environment

Scenario: You need to set up a secure user environment with advanced password policies and access controls for a development team.

Requirements:


┌─────────── Password Policy ─────────────────────────────────┐
│  • At least 12 characters                                    │
│  • Complexity rules                                          │
│  • 90 days validity                                          │
│  • 5 password history                                        │
├─────────── User Groups ─────────────────────────────────────┤
│  • Developers (full access)                                  │
│  • Interns (restricted)                                      │
│  • External (temporary access)                               │
└─────────────────────────────────────────────────────────────┘

Possible solution:


#!/bin/bash
# 1. PAM configuration
sudo nano /etc/security/pwquality.conf

# Add:
minlen = 12
minclass = 3
maxrepeat = 2
enforce_for_root

# 2. Password history
sudo nano /etc/pam.d/common-password

# Add:
password required pam_pwhistory.so remember=5 use_authtok

# 3. Password aging
sudo nano /etc/login.defs

# Set:
PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_WARN_AGE   14

# 4. Create groups
sudo groupadd developers
sudo groupadd interns
sudo groupadd external

# 5. Create users
# Developers
sudo useradd -m -s /bin/bash -G developers dev1
sudo chage -M 90 -m 1 -W 14 dev1

# Intern
sudo useradd -m -s /bin/bash -G interns intern1
sudo chage -M 30 -m 1 -W 7 intern1

# External
sudo useradd -m -s /bin/bash -G external extern1
sudo chage -E $(date -d "+90 days" +%Y-%m-%d) extern1

Verification:

Checklist:


┌─────────── Password Policy ─────────────────────────────────┐
│  □ PAM modules installed                                     │
│  □ Complexity rules active                                   │
│  □ History configured                                        │
├─────────── Users ───────────────────────────────────────────┤
│  □ Developer accounts active                                 │
│  □ Interns time-limited                                      │
│  □ External with expiry date                                 │
└─────────────────────────────────────────────────────────────┘

Command Reference (Cheatsheet)

For quick access during user, group, and permission management, the following reference table summarizes the most important commands of advanced user management:

Command / Syntax Category Function & Description
sudo chage -l <user> Password Aging Displays detailed expiry dates, intervals, and warnings.
sudo chage -M 90 -W 14 <u> Password Aging Sets maximum validity (90 days) and warning time (14 days).
sudo chage -d 0 <user> Password Aging Forces immediate password change on next login.
getfacl <file> POSIX ACL Displays extended access control lists of a file.
setfacl -m u:anna:rw <file> POSIX ACL Assigns user 'anna' specific read/write permissions.
setfacl -d -m g:grp:rwx <dir> POSIX ACL Defines inheritable default ACLs on a directory.
setfacl -b <file> POSIX ACL Removes all extended ACL entries completely.
sudo edquota -u <user> Quotas Interactively edits storage and inode limits.
sudo setquota -u <u> 500M 600M 0 0 / Quotas Sets quota limits directly via command or script.
sudo repquota -avugs Quotas Generates system-wide quota report for users and groups.
sudo visudo Sudoers Opens Sudoers configuration with automatic syntax checking.
sudo visudo -c Sudoers Checks Sudoers files for syntax errors without opening them.
last -n 20 Audit / Monitoring Displays the last 20 successful system logins.
sudo lastb -n 20 Audit / Monitoring Displays failed login attempts (Bad Logins).
sudo auditctl -w <path> -p wa Audit / Monitoring Monitors file write accesses via Linux kernel audit.

Further Resources

The following guides, specifications, and internal course modules deepen advanced user management and access control:

Resource Description
Linux-PAM System Administrator's Guide Official manual for the modular PAM architecture.
POSIX Access Control Lists on Linux Official man page for POSIX ACLs and permission masks.
Linux Quota Mini-HOWTO Detailed documentation for the Linux quota subsystem.
Sudoers Manual & Syntax Reference Official documentation for Sudoers configuration.
Linux Administration #1: Fundamentals The foundation: system architecture, FHS, mounting & file permissions.
chmod & File Permissions Guide Fundamental deepening of permissions and octal values.

Conclusion

With mastery of PAM authentication stacks, strict password policies via pwquality, granular POSIX ACLs, storage quotas, and a professional Sudoers architecture, you are able to secure and manage multi-user systems according to the highest enterprise and compliance standards.

💡 Practical Tip: For sudo privileges, always use modular files under /etc/sudoers.d/ with restrictive file permissions (chmod 440), instead of manually bloating the main file /etc/sudoers. This significantly simplifies configuration management via Ansible or GitOps.

In the next module of our administration course, we deal with monitoring and controlling running programs and system resources: 👉 Next up: Linux Administration #3: Processes and Resource Management

👉 Course Overview: All Linux Administration Articles & Modules

Share & export

Export as Markdown