Table of Contents
- Pre-Audit Planning
1.1 Define Scope and Objectives
1.2 Identify Compliance Requirements
1.3 Assemble Tools and Resources - Pre-Audit Preparation
2.1 Backup Critical Data
2.2 Document the Current Environment
2.3 Obtain Necessary Permissions - Conducting the Security Audit
3.1 System Hardening Assessment
3.2 User Accounts and Permissions Review
3.3 Network Security Evaluation
3.4 Package and Software Management Audit
3.5 Log Analysis
3.6 File Integrity Monitoring
3.7 Malware and Rootkit Scanning - Post-Audit Steps
4.1 Document Findings
4.2 Prioritize Vulnerabilities
4.3 Remediate Issues
4.4 Retest and Validate
4.5 Implement Continuous Monitoring - Essential Tools for Linux Security Audits
- Conclusion
- References
Pre-Audit Planning
Before diving into technical checks, thorough planning ensures the audit is focused, efficient, and aligned with organizational goals.
1.1 Define Scope and Objectives
- Scope: Determine which systems to audit (e.g., production servers, cloud VMs, IoT devices), network segments, and components (e.g., OS, applications, databases).
- Objectives: Clarify goals such as “identify misconfigured user accounts,” “verify compliance with CIS benchmarks,” or “detect signs of a past breach.”
1.2 Identify Compliance Requirements
Regulatory frameworks (e.g., GDPR, PCI-DSS, NIST SP 800-53) often mandate specific security controls. Map audit checks to these requirements (e.g., PCI-DSS requires encrypting cardholder data, so verify TLS configurations).
1.3 Assemble Tools and Resources
Gather tools for the audit (see Essential Tools for a full list). Common tools include:
- Command-line utilities:
ss,grep,find,journalctl - Specialized tools: AIDE (file integrity), ClamAV (malware),
rkhunter(rootkits),nmap(network scanning)
Pre-Audit Preparation
2.1 Backup Critical Data
Before making changes, back up system configurations (e.g., /etc/, /home/) and data to avoid data loss. Use tools like rsync or tar:
sudo rsync -av /etc/ /backup/etc-backup-$(date +%F)/
2.2 Document the Current Environment
Record baseline configurations (e.g., running services, user accounts, firewall rules) to compare against post-audit findings:
# Save list of running services
systemctl list-unit-files --type=service --state=enabled > enabled_services.txt
# Save user accounts
cut -d: -f1 /etc/passwd > users.txt
2.3 Obtain Necessary Permissions
Ensure you have sudo access to run privileged commands (e.g., systemctl, iptables). For production systems, work in a staging environment first to avoid disrupting services.
Conducting the Security Audit
3.1 System Hardening Assessment
Evaluate if the OS is configured to minimize attack surface.
Check for Unnecessary Services
Disable unused services (e.g., Telnet, FTP) to reduce exposure:
# List enabled services
systemctl list-unit-files --type=service --state=enabled
# Stop and disable a service (e.g., Telnet)
sudo systemctl stop telnet.socket
sudo systemctl disable telnet.socket
Review Kernel Hardening
Check kernel parameters in /etc/sysctl.conf for security settings (e.g., disable IP forwarding if not a router):
# View current kernel settings
sysctl -a | grep -E "net.ipv4.ip_forward|net.ipv4.conf.all.log_martians"
# Example: Disable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=0
echo "net.ipv4.ip_forward=0" | sudo tee -a /etc/sysctl.conf
Verify Firewall Configuration
Ensure ufw (Uncomplicated Firewall) or iptables is active and rules are restrictive:
# Check ufw status
sudo ufw status verbose
# Example: Allow only SSH (port 22) and HTTP (port 80)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw enable
3.2 User Accounts and Permissions Review
Audit User Accounts
- Check for UID 0: Only
rootshould have UID 0:awk -F: '$3 == 0 {print $1}' /etc/passwd - Empty passwords: Ensure no accounts have empty passwords:
awk -F: '($2 == "" ) {print $1 " has empty password"}' /etc/shadow - Expired accounts: Identify inactive/expired users:
lastlog | grep -v "Never logged in"
Review Sudo and File Permissions
- Sudoers file: Use
visudoto edit/etc/sudoersand remove overly permissive rules (e.g.,user ALL=(ALL) NOPASSWD: ALL). - SUID/GUID files: SUID/GUID binaries can execute with elevated privileges. Audit them:
Remove SUID/GUID from unnecessary files (e.g.,find / -perm /6000 2>/dev/null # 6000 = SUID (4000) + GUID (2000)chmod u-s /usr/bin/less).
3.3 Network Security Evaluation
Scan Open Ports and Services
Identify listening ports and associated services:
# List TCP/UDP ports with services
ss -tuln # t: TCP, u: UDP, l: listening, n: numeric ports
Close unused ports (e.g., port 21 for FTP) by disabling the service.
Secure SSH Configuration
Edit /etc/ssh/sshd_config to enforce security:
- Disable password authentication (
PasswordAuthentication no); use SSH keys instead. - Block root login (
PermitRootLogin no). - Limit ciphers to strong algorithms (e.g.,
Ciphers [email protected],[email protected]).
Restart SSH and test:
sudo systemctl restart sshd
ssh -v user@server # Verify key-based auth works
3.4 Package and Software Management Audit
Check for Outdated Packages
Update and audit packages to patch vulnerabilities:
# Debian/Ubuntu
sudo apt update && sudo apt list --upgradable
# RHEL/CentOS
sudo yum check-update
Verify Package Integrity
Ensure installed packages haven’t been tampered with:
# Debian/Ubuntu (requires debsums package)
sudo debsums -s # -s: show only changed files
# RHEL/CentOS
rpm -Va # -V: verify, a: all packages
3.5 Log Analysis
Linux logs (stored in /var/log/ or via journalctl) reveal suspicious activity (e.g., failed logins, unusual sudo usage).
Key Log Files to Audit
/var/log/auth.log(Debian) or/var/log/secure(RHEL): Authentication events./var/log/syslog(Debian) or/var/log/messages(RHEL): System-wide events.
Search for Suspicious Entries
# Failed SSH logins
grep "Failed password" /var/log/auth.log
# Sudo misuse
grep "sudo: " /var/log/auth.log | grep -v "COMMAND=sudoedit"
Enable Log Rotation
Ensure logs don’t consume disk space: Check /etc/logrotate.conf and set rotation policies (e.g., weekly rotation, 4-week retention).
3.6 File Integrity Monitoring (FIM)
FIM tools like AIDE (Advanced Intrusion Detection Environment) detect unauthorized file changes by comparing current files to a baseline.
Set Up AIDE
- Install AIDE:
sudo apt install aide # Debian/Ubuntu sudo yum install aide # RHEL/CentOS - Generate a baseline database:
sudo aideinit # Creates /var/lib/aide/aide.db.new.gz sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz - Run a check:
sudo aide --check
3.7 Malware and Rootkit Scanning
Linux isn’t immune to malware (e.g., cryptominers, rootkits). Use these tools:
ClamAV (Malware)
sudo apt install clamav
sudo freshclam # Update virus definitions
sudo clamscan -r / # Scan entire system (add --infected to show only threats)
Rootkit Scanners (rkhunter, chkrootkit)
# Install rkhunter
sudo apt install rkhunter
sudo rkhunter --update # Update signatures
sudo rkhunter --check # Run scan
Post-Audit Steps
4.1 Document Findings
Record vulnerabilities, evidence (e.g., “User jdoe has UID 0”), and severity (critical, high, medium, low).
4.2 Prioritize Vulnerabilities
Use a risk matrix to prioritize:
- Critical: Exploitable now (e.g., open SSH port with password auth).
- High: Likely to be exploited (e.g., outdated kernel with CVE-2023-1234).
- Medium/Low: Less urgent (e.g., unnecessary service running).
4.3 Remediate Issues
Fix vulnerabilities with steps like:
- Patching outdated packages (
sudo apt upgrade). - Disabling unused services (
sudo systemctl disable telnet). - Removing empty-password accounts (
sudo passwd -l username).
4.4 Retest and Validate
After remediation, re-run checks to confirm fixes (e.g., re-scan with AIDE to ensure no lingering file changes).
4.5 Implement Continuous Monitoring
Automate audits with tools like:
- Nagios/Zabbix: Monitor system health and alert on anomalies.
- ELK Stack: Centralize logs for real-time analysis.
- Cron jobs: Schedule weekly scans (e.g.,
0 0 * * 0 rkhunter --check).
Essential Tools for Linux Security Audits
| Category | Tools | Purpose |
|---|---|---|
| Network Scanning | nmap, ss, tcpdump | Detect open ports, traffic analysis |
| File Integrity | AIDE, Tripwire, find (SUID/GUID checks) | Monitor unauthorized file changes |
| Malware/Rootkits | ClamAV, rkhunter, chkrootkit | Detect malware and rootkits |
| Log Analysis | journalctl, ELK Stack, Graylog | Centralize and analyze logs |
| Compliance | CIS-CAT, OpenSCAP | Validate against CIS/NIST benchmarks |
Conclusion
A Linux security audit is not a one-time task but a critical part of a robust security strategy. By systematically assessing system hardening, user accounts, networks, and logs, you can proactively identify and remediate vulnerabilities. Combine audits with continuous monitoring to maintain a secure Linux environment long-term.