Linux Security Fundamentals

Security is not a single tool or configuration — it is a set of principles applied consistently. Understanding why certain configurations are recommended (not just what they are) lets you make better security decisions when facing new situations. The three most important security principles for Linux system administration are: minimize attack surface, apply least privilege, and layer your defenses.

The CIA triad applied to Linux

PropertyDefinitionLinux mechanisms
ConfidentialityData accessible only to authorized partiesFile permissions, encryption at rest, TLS, SSH
IntegrityData not modified without authorizationFile permissions, SHA256 checksums, aide/tripwire, audit daemon
AvailabilityServices accessible when neededMonitoring, backups, fail2ban (prevents lockout), rate limiting

Understanding attack surface

Attack surface is the total set of entry points an attacker could use. Every open port, every running service, every installed package, every user account, and every SUID binary is part of the attack surface. Reducing attack surface is the highest-value security activity because it eliminates entire classes of vulnerabilities.

# Assess your attack surface:

# What's listening on the network?
ss -tlnp    # Listening TCP ports with process names
ss -ulnp    # Listening UDP ports

# What services are running?
systemctl list-units --type=service --state=active

# What packages are installed?
dpkg -l | wc -l    # Total installed packages

# What users exist with login shells?
getent passwd | awk -F: '$7 !~ /nologin|false/ {print $1, $7}'

# What SUID binaries exist? (can be exploited for privilege escalation)
find / -perm /4000 -type f 2>/dev/null | grep -v proc

Principle of least privilege

Every process, user, and service should have only the minimum permissions required to perform its function. This limits blast radius when something is compromised.

# Run services as dedicated non-root users
# Check what user services run as:
ps aux | awk '{print $1, $11}' | grep -v root | sort | uniq

# Services should NOT run as root:
# Bad:  ExecStart=/usr/bin/myapp   with no User= (runs as root)
# Good: User=myapp in [Service] section

# Limit sudo access to specific commands:
# In /etc/sudoers.d/deploy:
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart myapp, /usr/bin/systemctl status myapp

# Check who has full sudo:
getent group sudo

Defense in depth

Defense in depth layers for a Ubuntu server:

Physical/Network:
  Firewall (UFW/iptables) → only necessary ports open
  Network segmentation → services on private VLANs

System:
  Minimal installed packages
  Regular patching (unattended-upgrades)
  AppArmor profiles (limits what processes can access)

Authentication:
  SSH keys only (no password auth)
  fail2ban (brute-force protection)
  2FA for privileged access

Application:
  Run services as non-root users
  Separate database users per application
  Secrets in env files, not code

Detection:
  Centralized logging (journald/rsyslog → SIEM)
  File integrity monitoring (aide)
  Login auditing

Common Linux attack vectors

Attack vectorPrevention
SSH brute forceKey-only auth, fail2ban, non-standard port
Unpatched vulnerabilitiesunattended-upgrades, regular patching
Compromised credentialsStrong passwords, key-based auth, no password reuse
Overprivileged servicesRun services as dedicated users, AppArmor
Supply chain / malicious packagesUse official repos, verify GPG keys
Lateral movement via SSHNo agent forwarding, bastions, limit SSH from servers

Conclusion

Security fundamentals: reduce attack surface (stop what doesn't need to run), apply least privilege (nothing should have more access than required), layer defenses (assume one layer will fail), and monitor (know when something is wrong). Every configuration hardening decision should trace back to one of these principles. When evaluating a new security recommendation, ask "what attack vector does this address?" — if the answer is unclear, the recommendation may not be worth its operational cost.

FAQ

Why should administrators understand Linux Security Fundamentals?+

Because this topic affects planning decisions, server lifecycle, compatibility, support expectations, or how you reason about Ubuntu systems before making operational changes.

Do I need a lab for this topic?+

A lab is useful for checking commands and seeing the concept on a real Ubuntu machine, but the main value is understanding the decision, tradeoff, or system behavior clearly.

How should I use this knowledge in production?+

Use it to make better choices, document why those choices were made, and avoid rushed changes that ignore support windows, compatibility, stability, or operational risk.

Need help with Ubuntu administration?

Work directly with Muhammad Irfan Aslam for Ubuntu Server, Linux, cloud, Docker, DevOps, CI/CD, or infrastructure troubleshooting support.

Hire Me for Support