Linux Host-Baseline & Benutzer-Härtung: Mount-Flags, PAM & Sudoers
Erstellt: 10.11.2026 Aktualisiert: 10.11.2026
Management Summary: Während Netzwerk-Firewalls und Intrusion-Detection-Systeme den äußeren Perimeter absichern, entscheidet die Host-Baseline darüber, ob ein Angreifer nach dem ersten erfolgreichen Exploit im Sandkasten verhungert oder das gesamte System übernimmt. Standard-Linux-Installationen liefern unmaskierte temporäre Verzeichnisse, permissive Passwort-Richtlinien und dutzende überprivilegierte SUID-Binaries aus. Dieser Leitfaden etabliert eine kompromisslose Baseline für Unternehmens-Server: Dateisystem-Härtung über restriktive Mount-Flags (
nodev,nosuid,noexec), robuste Authentifizierungsstacks via Pluggable Authentication Modules (PAM) mitpam_faillock,pam_pwqualityund modernemyescrypt-Hashing, striktesudoers-Governance ohne GTFOBins-Ausbruchsvektoren, systematische SUID/SGID-Sanierung sowie Shared-Memory- und Core-Dump-Isolation.
-
Dateisystem- & Mount-Härtung
Enterprise-Partitionierung und restriktive Mount-Optionen (
noexec,nosuid,nodev) auf/tmp,/var/tmpund/dev/shmgegen Payload-Ausführungen. -
PAM-Tiefenarchitektur
Der 4-Säulen-Stack (
auth,account,password,session), Kontroll-Flags und deterministische Regelabfolgen im Linux-Authentifizierungssubsystem. -
Brute-Force-Schutz (
pam_faillock)
Automatisierte Kontensperrung nach Fehlversuchen, temporäre Quarantäne, Status-Inspektion und manueller Reset via
faillock-CLI. -
Passwort-Qualität &
yescrypt
Erzwingung starker Passwörter mit
pam_pwqualityund Migration auf speicher-hartes Passwort-Hashing mityescryptin/etc/login.defs. -
User-Governance & Root-Lock
Deaktivierung ungenutzter System-Shells (
/usr/sbin/nologin), Sperren des interaktiven Root-Passworts und automatische Session-Timeouts (TMOUT). -
Sudoers-Härtung & Least Privilege
Sichere
sudoers.d-Regeln, PTY-Erzwingung (use_pty), Session-Timeouts und Schutz vor Privilege Escalation über Binaries (GTFOBins).
1. Dateisystem-Härtung & Sichere Mount-Optionen
Temporäre Verzeichnisse wie /tmp, /var/tmp und /dev/shm müssen für alle Systembenutzer und Daemons weltweit beschreibbar sein (chmod 1777). Dies macht sie zum bevorzugten Ziel für Angreifer: Gelingt ein Exploit in einer Webanwendung (z. B. File Upload oder RCE), legt der Angreifer seine Schadsoftware fast ausnahmslos in /tmp oder /dev/shm ab, um sie von dort auszuführen.
Die drei defensiven Mount-Flags
Um diesen Angriffsvektor im Keim zu ersticken, müssen temporäre Partitionen mit drei Kernel-Flags gemountet werden:
nodev: Verhindert, dass der Kernel Geräte-Dateien (Block- oder Character-Devices) auf dieser Partition interpretiert. Angreifer können keine Raw-Disks emulieren.nosuid: Ignoriert SUID- und SGID-Bits. Eine Binary auf dieser Partition kann niemals Root-Rechte eskalieren.noexec: Verbietet die direkte Ausführung von Binärdateien und Skripten. Versucht ein Angreifer./exploitauszuführen, verweigert der Kernel den Systemaufruf mitEACCES(Permission denied).
Gehärtete /etc/fstab-Konfiguration
Öffne /etc/fstab und passe temporäre Dateisysteme wie folgt an:
# /etc/fstab - Gehärtete Mount-Konfiguration für Enterprise-Server
# Separates /tmp Verzeichnis als tmpfs (im RAM) oder Partition
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=2G,mode=1777 0 0
# Bind-Mount für /var/tmp auf /tmp (verhindert Umgehung)
/tmp /var/tmp none bind,defaults,noexec,nosuid,nodev 0 0
# Shared Memory im RAM strikt absichern
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev,size=1G,mode=1777 0 0
Wende die Änderungen ohne Reboot an:
Systemweite umask-Härtung
Die standardmäßige Dateierstellungsmaske (umask 022) erteilt allen Benutzern auf dem System weltweite Leserechte (rwxr-xr-x). Für Enterprise-Server gilt der Standard umask 027 (Besitzer: Vollzugriff, Gruppe: Lesen/Ausführen, Welt: Gar kein Zugriff).
Setze die Baseline in /etc/login.defs:
Und erzwinge die Maske für alle interaktiven Shells via /etc/profile.d/umask.sh:
2. Pluggable Authentication Modules (PAM) Tiefenarchitektur
Jede Authentifizierung unter Linux – ob lokaler Login, SSH, sudo, su oder grafischer Desktop – wird über das PAM-Framework abgewickelt. PAM modularisiert die Authentifizierung in vier unabhängige Management-Gruppen:
%%{init: {'flowchart': {'wrappingWidth': 350}}}%%
flowchart TB
User_Request["Benutzeranfrage<br/>(Login / sudo / ssh)"] ==> PAM_Entry["PAM API Einstiegspunkt<br/>(/etc/pam.d/<dienst>)"]
PAM_Entry --> Stack_Auth["1. auth Stack<br/>(Identitätsprüfung / Passwort)"]
Stack_Auth --> Stack_Account["2. account Stack<br/>(Kontogültigkeit / Zeitfenster)"]
Stack_Account --> Stack_Password["3. password Stack<br/>(Passwortwechsel / Regeln)"]
Stack_Password --> Stack_Session["4. session Stack<br/>(Umgebung / Limits / Mounts)"]
Stack_Session ==> Success["Zugriff gewährt<br/>(Shell / Prozess gestartet)"]
Die vier Kontroll-Flags (Control Flags)
Innerhalb jedes Stacks entscheidet das Kontroll-Flag, wie PAM auf Erfolg oder Misserfolg eines Moduls reagiert:
required: Das Modul muss erfolgreich sein. Schlägt es fehl, schlägt die Authentifizierung fehl, PAM führt aber alle weiteren Module im Stack aus (verhindert Timing-Angriffe).requisite: Das Modul muss erfolgreich sein. Schlägt es fehl, bricht PAM den Stack sofort ab.sufficient: Ist das Modul erfolgreich und kein vorherigesrequired-Modul fehlgeschlagen, gewährt PAM den Zugriff sofort, ohne nachfolgende Module zu prüfen.optional: Der Rückgabewert wird ignoriert, es sei denn, es ist das einzige Modul im Stack.
3. Brute-Force-Schutz mit pam_faillock
Automatisierte Angreifer versuchen über SSH oder Konsolen, Passwörter per Wörterbuchangriff zu erraten. pam_faillock protokolliert Fehlversuche und sperrt das betroffene Benutzerkonto temporär.
Konfiguration in /etc/security/faillock.conf
# /etc/security/faillock.conf
# Sperre nach 5 aufeinanderfolgenden Fehlversuchen
deny = 5
# Beobachtungszeitfenster: 15 Minuten (900 Sekunden)
fail_interval = 900
# Sperrdauer: 15 Minuten (900 Sekunden)
unlock_time = 900
# Auch den Benutzer root bei lokalen Anmeldefehlern überwachen
even_deny_root
# Root jedoch nur für 5 Minuten sperren
root_unlock_time = 300
# Fehlgeschlagene Versuche im Syslog protokollieren
audit
# Verzeichnis für Zählerdateien
dir = /var/run/faillock
Einbindung in /etc/pam.d/common-auth (Debian/Ubuntu)
Stelle sicher, dass pam_faillock den auth-Stack umschließt:
# /etc/pam.d/common-auth
auth required pam_faillock.so preauth
auth [success=1 default=ignore] pam_unix.so nullok
auth [default=die] pam_faillock.so authfail
auth sufficient pam_faillock.so authsucc
Administrative Verwaltung mit der faillock-CLI
# Zeige Fehlversuche für einen bestimmten Benutzer an
sudo faillock --user devuser
# Zeige Fehlversuche für alle gesperrten Benutzer an
sudo faillock
# Entsperre ein fälschlicherweise gesperrtes Konto sofort
sudo faillock --user devuser --reset
4. Passwort-Qualität & Modernes yescrypt-Hashing
Schwache Passwörter sind das Haupteinfallstor für Credential-Stuffing-Angriffe. Mit pam_pwquality erzwingen wir kryptografisch robuste Mindestanforderungen.
Konfiguration in /etc/security/pwquality.conf
# /etc/security/pwquality.conf
# Mindestlänge des Passworts
minlen = 14
# Mindestens 1 Ziffer gefordert
dcredit = -1
# Mindestens 1 Großbuchstabe gefordert
ucredit = -1
# Mindestens 1 Kleinbuchstabe gefordert
lcredit = -1
# Mindestens 1 Sonderzeichen gefordert
ocredit = -1
# Maximal 3 identische aufeinanderfolgende Zeichen
maxrepeat = 3
# Keine Teile des Benutzernamens oder GECOS-Felds erlauben
gecoscheck = 1
# Mindestanzahl neuer Zeichen im Vergleich zum alten Passwort
difok = 4
Umstellung auf speicher-hartes yescrypt
Traditionelle SHA-512-Hashes können auf modernen Grafikkarten (GPUs) mit Milliarden Hashes pro Sekunde parallelisiert gecrackt werden. yescrypt ist ein modernes, KDF-basiertes (Key Derivation Function) Hashverfahren, das massiven Speicheraufwand erfordert und GPU-Cracker wirkungslos ausbremst.
Setze den Standardalgorithmus in /etc/login.defs:
5. User-Governance: Root-Lock & Inaktive Konten
Ein System mit Dutzenden vergessenen Standard-Accounts bietet Angreifern eine riesige Angriffsfläche.
1. Root-Passwort sperren
Auf einem gehärteten Server meldet sich niemand direkt als root an. Administrative Arbeiten erfolgen ausschließlich über sudo:
# Sperre das Passwort des Root-Benutzers (setzt '!' vor den Hash in /etc/shadow)
sudo passwd -l root
2. Systemkonten absichern
Systemkonten (wie daemon, bin, sys, sync, games) dürfen niemals über eine interaktive Login-Shell verfügen. Kontrolliere /etc/passwd:
# Prüfe, ob System-Accounts (UID < 1000) eine echte Shell besitzen
awk -F: '($3 < 1000 && $1 != "root" && $7 !~ /(nologin|false)/) {print $1, $7}' /etc/passwd
# Weise verwundbaren Accounts sofort /usr/sbin/nologin zu
sudo usermod -s /usr/sbin/nologin <accountname>
3. Automatischer Session-Timeout
Verwaiste Terminal-Sitzungen in Rechenzentren oder auf Entwickler-Laptops sind ein massives Sicherheitsrisiko. Erzwinge automatischen Logout nach 15 Minuten Inaktivität via /etc/profile.d/autologout.sh:
# /etc/profile.d/autologout.sh
# 900 Sekunden = 15 Minuten Inaktivitäts-Timeout
TMOUT=900
readonly TMOUT
export TMOUT
6. Sudoers-Härtung & Schutz vor GTFOBins
Das Werkzeug sudo regelt administrative Privilegien. Eine schlampige sudoers-Datei hebelt jedes Sicherheitskonzept aus.
Die goldene Regel: Niemals ALL=(ALL) NOPASSWD: ALL
Konfiguriere sudo niemals pauschal ohne Passwortabfrage. Verwende stets visudo zum Bearbeiten:
Füge folgende gehärtete Standard-Direktiven ein:
# /etc/sudoers.d/enterprise-hardening
# Umgebungsvariablen bei sudo-Ausführung strikt zurücksetzen
Defaults env_reset
# Sicheren, nicht vom Benutzer manipulierbaren Suchpfad erzwingen
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Zuweisung eines Pseudo-Terminals erzwingen (verhindert TTY-Hijacking via TIOCSTI)
Defaults use_pty
# Eigenes Audit-Log für alle ausgeführten sudo-Befehle schreiben
Defaults logfile="/var/log/sudo.log"
# Passwort-Pufferzeit auf 5 Minuten begrenzen (Standard ist oft 15 Min.)
Defaults timestamp_timeout=5
# Administratoren müssen Mitglied der Gruppe 'sudo' oder 'wheel' sein
%sudo ALL=(ALL:ALL) ALL
Warnung vor GTFOBins: Niemals Editoren oder Interpreter in sudo erlauben
Erlaube einem Benutzer niemals Befehle wie vi, vim, nano, less, more, awk, find, python oder bash über sudo auszuführen!
Nahezu alle Standard-UNIX-Tools besitzen Escape-Sequenzen. Wer sudo vi /etc/hosts ausführen darf, kann innerhalb von vi einfach :!/bin/bash eingeben und erhält sofort eine interaktive Root-Shell (dokumentiert auf GTFOBins).
7. SUID/SGID-Sanierung & Core-Dump-Isolation
Das SUID-Bit (Set User ID, Oktalwert 4000) bewirkt, dass eine Binärdatei immer mit den Rechten des Dateieigentümers (root) ausgeführt wird – unabhängig davon, wer das Programm startet.
Systematische SUID-Audits
Finde alle aktiven SUID- und SGID-Binaries auf dem Server:
# Suche nach allen Dateien mit SUID- (4000) oder SGID-Bit (2000)
sudo find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -exec ls -ld {} +
Viele Standard-Binaries benötigen auf einem Headless-Server niemals Root-Rechte für normale Benutzer. Entziehe das SUID-Bit:
# Entziehe SUID-Rechte für überflüssige Desktop- oder Legacy-Programme
sudo chmod u-s /usr/bin/chsh
sudo chmod u-s /usr/bin/chfn
sudo chmod u-s /usr/bin/mount
sudo chmod u-s /usr/bin/umount
Core Dumps deaktivieren
Stürzt ein Prozess ab (z. B. durch einen Speicherfehler), schreibt der Kernel ein Abbild des Arbeitsspeichers (Core Dump) auf die Festplatte. Enthielt der Prozess Passwörter, private SSH-Schlüssel oder Datenbank-Tokens, kann ein lokaler Angreifer diese aus dem Dump extrahieren.
Deaktiviere Core Dumps systemweit in /etc/security/limits.conf:
Und sichere den Kernel über sysctl ab:
# Verbiete Core Dumps von Prozessen mit gewechselter UID/GID
echo "fs.suid_dumpable = 0" | sudo tee /etc/sysctl.d/50-coredump.conf
sudo sysctl -p /etc/sysctl.d/50-coredump.conf
8. Enterprise-Checkliste & Troubleshooting
| Bereich | Prüfbefehl | Soll-Zustand |
|---|---|---|
| Mounts | mount \| grep -E "(tmp\|shm)" |
noexec,nosuid,nodev aktiv |
| Umask | umask |
Gibt 0027 zurück |
| Faillock | faillock |
Zeigt aktive Kontosperren an |
| Root-Lock | passwd -S root |
Zeigt L (Locked) an |
| Sudo-Log | tail -n 20 /var/log/sudo.log |
Protokolliert jeden Befehl mit Timestamp |
| SUID-Audit | find / -xdev -perm -4000 -type f |
Nur unverzichtbare Binaries (sudo, passwd) |
Mit dieser soliden Host-Baseline ist das Fundament gelegt: Lokale Privilege Escalations sind unterbunden, Passwörter gehärtet und Angreifer können keine Skripte in temporären Verzeichnissen ausführen.