Einführung
In diesem Lab lernen Sie grundlegende Techniken kennen, um die Sicherheit eines Linux-Systems durch die Implementierung und Durchsetzung robuster Passwortrichtlinien zu erhöhen. Sie konfigurieren systemweite Regeln für die Passwortkomplexität, die eine Mindestlänge sowie eine Kombination verschiedener Zeichentypen wie Großbuchstaben, Kleinbuchstaben und Ziffern verlangen. Außerdem richten Sie Richtlinien für die Passwortgültigkeit ein, damit Zugangsdaten regelmäßig geändert werden. Dadurch verringert sich das Risiko kompromittierter Passwörter, da zentrale Systemkonfigurationsdateien angepasst werden.
Neben der Einrichtung der Richtlinie stellen Sie sicher, dass diese strengen Passwortanforderungen auf neue Benutzerkonten angewendet werden. Anschließend wechselt das Lab von vorbeugenden Sicherheitsmaßnahmen zur reaktiven Erkennung. Sie lernen, wie Sie Authentifizierungsprotokolle des Systems überwachen. Durch die Analyse dieser Protokolle können Sie verdächtige Aktivitäten erkennen, etwa wiederholte fehlgeschlagene Anmeldeversuche, die auf einen Brute-Force-Angriff oder andere unbefugte Zugriffsversuche hindeuten können.
Lokale Linux-Passwortrichtlinie für Komplexität und Gültigkeitsdauer konfigurieren
In diesem Schritt lernen Sie, wie Sie die Sicherheit eines Linux-Systems durch die Konfiguration einer robusten Passwortrichtlinie verbessern. Eine starke Passwortrichtlinie ist ein grundlegendes Sicherheitsinstrument und regelt zwei wichtige Aspekte: Komplexität und Gültigkeitsdauer. Komplexitätsregeln sorgen dafür, dass Passwörter schwer zu erraten sind, indem sie eine Kombination verschiedener Zeichentypen verlangen. Regeln zur Gültigkeitsdauer zwingen Benutzer dazu, ihre Passwörter regelmäßig zu ändern, und verringern so das Risiko kompromittierter Zugangsdaten. Für die Umsetzung verwenden Sie standardmäßige Linux-Werkzeuge, um systemweite Konfigurationsdateien anzupassen und diese Richtlinien anzuwenden.
Sehen wir uns zunächst die Passwortkomplexität an. Auf modernen Debian-basierten Systemen wie Ubuntu wird die Passwortqualität vom Modul pam_pwquality verwaltet. Seine Konfiguration befindet sich in der Datei /etc/security/pwquality.conf.
Beginnen wir mit der Prüfung der Standardeinstellungen. Verwenden Sie den Befehl cat, um den Inhalt der Konfigurationsdatei anzuzeigen. Mit grep filtern wir kommentierte Zeilen und leere Zeilen heraus, damit die Ausgabe übersichtlicher bleibt.
grep -vE '^#|^$' /etc/security/pwquality.conf
Möglicherweise sehen Sie einige Standardeinstellungen oder die Datei enthält keine aktiven Konfigurationen. Nun setzen wir eine strengere Richtlinie durch. Da die Datei mit Administratorrechten bearbeitet werden muss, verwenden wir sudo zusammen mit dem Editor nano.
sudo nano /etc/security/pwquality.conf
Fügen Sie die folgenden Zeilen in die Datei ein, um unsere neue Richtlinie durchzusetzen. Diese Einstellungen verlangen ein Passwort mit mindestens 10 Zeichen, mindestens einer Ziffer, einem Großbuchstaben und einem Kleinbuchstaben. Außerdem werden die Prüfungen auch dann angewendet, wenn ein Administrator das Passwort eines anderen Benutzers festlegt.
minlen = 10
dcredit = -1
ucredit = -1
lcredit = -1
enforce_for_root
Die einzelnen Optionen haben folgende Bedeutung:
minlen = 10: Legt die zulässige Mindestlänge des Passworts auf 10 Zeichen fest.dcredit = -1: Verlangt mindestens eine Ziffer. Die negative Zahl bedeutet „mindestens eine“.ucredit = -1: Verlangt mindestens einen Großbuchstaben.lcredit = -1: Verlangt mindestens einen Kleinbuchstaben.enforce_for_root: Verhindert, dass ein Administrator eine fehlgeschlagene Qualitätsprüfung umgeht. Dies ist erforderlich, weilsudo adduserdas Passwort des neuen Benutzers mit Root-Rechten festlegt.
Speichern Sie die Datei und beenden Sie nano, indem Sie Ctrl+X, anschließend Y und dann Enter drücken.
Als Nächstes konfigurieren wir die Passwortgültigkeitsdauer. Diese Einstellungen legen fest, wie lange ein Passwort maximal und minimal verwendet werden darf. Die Standardwerte für neue Benutzerkonten werden in /etc/login.defs gespeichert.
Verwenden Sie grep, um die relevanten Einstellungen in dieser Datei zu finden.
grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE' /etc/login.defs
Sie sehen die Standardwerte. Für PASS_MAX_DAYS ist häufig eine sehr hohe Zahl eingetragen, wodurch der Ablauf praktisch deaktiviert wird.
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 99999
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 0
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 7
Legen wir nun eine Ablaufrichtlinie von 9000 Tagen fest. Öffnen Sie die Datei mit sudo nano.
sudo nano /etc/login.defs
Suchen Sie die Zeile PASS_MAX_DAYS und ändern Sie den Wert von 99999 in 9000. Sie können außerdem PASS_MIN_DAYS auf 7 setzen, damit Benutzer ihr Passwort nicht zu häufig ändern können.
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 9000
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 7
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 14
Speichern Sie die Datei und beenden Sie nano. Die Einstellungen in /etc/login.defs gelten für Benutzer, die nach dieser Änderung angelegt werden. Um die Richtlinie auf einen bereits vorhandenen Benutzer wie labex anzuwenden, verwenden wir den Befehl chage.
Prüfen Sie zunächst die aktuellen Informationen zur Passwortgültigkeit des Benutzers labex.
sudo chage -l labex
Die Ausgabe zeigt, dass das Passwort nie abläuft.
Last password change : Jul 22, 2023
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
Verwenden Sie nun chage mit der Option -M, um für den Benutzer labex die maximale Anzahl an Tagen auf 9000 festzulegen.
sudo chage -M 9000 labex
Überprüfen Sie die Änderung, indem Sie die Informationen zur Passwortgültigkeit des Benutzers erneut anzeigen.
sudo chage -l labex
Nun sehen Sie, dass das Datum unter Password expires aktualisiert wurde und die maximale Anzahl an Tagen auf 9000 gesetzt ist. Damit wurde die Richtlinie zur Passwortgültigkeit erfolgreich angewendet.
Last password change : Jul 22, 2023
Password expires : Jan 01, 2048
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 9000
Number of days of warning before password expires : 7
Sie haben nun sowohl die Richtlinien für Passwortkomplexität als auch für die Passwortgültigkeit auf Ihrem Linux-System erfolgreich konfiguriert.
Starke Passwörter für neue Benutzerkonten durchsetzen
In diesem Schritt überprüfen Sie, ob die im vorherigen Schritt konfigurierten Richtlinien für Passwortkomplexität und -gültigkeit auf neue Benutzerkonten angewendet werden. Am besten testen Sie dies, indem Sie einen neuen Benutzer anlegen und anschließend versuchen, ein Passwort festzulegen, das gegen die Regeln verstößt. So sehen Sie, wie das Modul pam_pwquality und die Standardeinstellungen des Systems zusammenarbeiten, um neue Konten bereits bei ihrer Erstellung zu schützen.
Wir verwenden den Befehl adduser, ein benutzerfreundliches interaktives Skript zum Anlegen von Benutzern auf Debian-basierten Systemen. Erstellen wir einen neuen Benutzer mit dem Namen testuser.
sudo adduser testuser
Das System fordert Sie sofort auf, ein Passwort für den neuen Benutzer festzulegen. An dieser Stelle wird unsere Richtlinie getestet.
Versuchen wir zunächst, ein einfaches und schwaches Passwort festzulegen, das gegen unsere Richtlinie verstößt. Geben Sie bei der Aufforderung für das neue Passwort password ein und drücken Sie Enter.
Adding user `testuser' ...
Adding new group `testuser' (1001) ...
Adding new user `testuser' (1001) with home directory `/home/testuser' ...
Copying files from `/etc/skel' ...
New password:
Da password gegen unsere Regeln verstößt – es ist zu kurz und enthält weder Großbuchstaben noch Ziffern –, weist das System es zurück. Die genaue Meldung kann variieren, beginnt jedoch mit BAD PASSWORD; anschließend werden Sie erneut zur Eingabe eines Passworts aufgefordert.
BAD PASSWORD: The password fails the dictionary check
New password:
Das Passwort verstößt gegen mehrere Regeln. Das System meldet einen dieser Gründe, bevor es erneut zur Eingabe auffordert.
Eine Warnung allein bedeutet noch keine Zurückweisung, solange der Befehl nicht erneut zur Eingabe eines Passworts auffordert. Die Einstellung enforce_for_root, die Sie in Schritt 1 hinzugefügt haben, stellt sicher, dass der privilegierte Prozess adduser das schwache Passwort nicht akzeptiert.
Tipp: Falls Sie versehentlich einen Benutzer anlegen, können Sie ihn mit
sudo deluser testuserlöschen und den Vorgang wiederholen.
Geben Sie nun ein Passwort ein, das alle Kriterien erfüllt. Tippen Sie bei der Aufforderung N7vQ2mR9xK4p ein und drücken Sie Enter. Anschließend müssen Sie es zur Bestätigung erneut eingeben.
New password:
Retype new password:
passwd: password updated successfully
Erfolg! Das System hat das starke Passwort akzeptiert. Nun werden zusätzliche Informationen zum Benutzer abgefragt. Sie können bei jeder Aufforderung einfach Enter drücken, um die Standardwerte zu übernehmen.
Changing the user information for testuser
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
Der Benutzer testuser wurde nun angelegt. Mit dem Befehl id können Sie überprüfen, ob der Benutzer vorhanden ist.
id testuser
Die Ausgabe zeigt die Benutzer-ID, die Gruppen-ID und die Gruppenzugehörigkeiten des Benutzers.
uid=1001(testuser) gid=1001(testuser) groups=1001(testuser)
Überprüfen wir als Nächstes, ob die in /etc/login.defs festgelegte Richtlinie zur Passwortgültigkeit automatisch auf diesen neuen Benutzer angewendet wurde. Verwenden Sie chage, um die entsprechenden Informationen für testuser anzuzeigen.
sudo chage -l testuser
Die Ausgabe zeigt, dass Maximum number of days between password change auf 9000 gesetzt ist – genau wie konfiguriert.
Last password change : Jul 22, 2023
Password expires : Jan 01, 2048
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 9000
Number of days of warning before password expires : 14
Zum Schluss entfernen wir den Testbenutzer, damit das System sauber bleibt. Der Befehl deluser löscht das Benutzerkonto.
sudo deluser testuser
Das System bestätigt, dass der Benutzer entfernt wurde.
Removing user `testuser' ...
Warning: group `testuser' has no more members.
Done.
Sie haben erfolgreich einen neuen Benutzer angelegt, die Durchsetzung der Passwortrichtlinie getestet und überprüft, dass die Standardregeln zur Passwortgültigkeit angewendet wurden.
Authentifizierungsprotokolle auf fehlgeschlagene Anmeldeversuche überwachen
In diesem Schritt lernen Sie, wie Sie Authentifizierungsprotokolle des Systems überwachen, um potenzielle Sicherheitsbedrohungen wie Brute-Force-Angriffe zu erkennen. Eine wichtige Aufgabe der Systemadministration besteht darin, Protokolle regelmäßig auf verdächtige Aktivitäten zu überprüfen. Fehlgeschlagene Anmeldeversuche sind ein entscheidender Hinweis auf mögliche unbefugte Zugriffsversuche. Sie simulieren zunächst eine fehlgeschlagene Anmeldung und verwenden anschließend standardmäßige Linux-Befehle, um die zugehörigen Protokolleinträge zu finden und zu analysieren.
Auf Debian-basierten Systemen wie Ubuntu werden Authentifizierungsereignisse – sowohl erfolgreiche als auch fehlgeschlagene – normalerweise in der Datei /var/log/auth.log gespeichert. Zum Lesen dieser Datei benötigen Sie Administratorrechte.
Erzeugen wir zunächst einen fehlgeschlagenen Anmeldeversuch. Dies lässt sich sicher mit dem Befehl su (Benutzer wechseln) durchführen. Versuchen Sie, zu Ihrem eigenen Benutzerkonto labex zu wechseln, und geben Sie absichtlich das falsche Passwort ein.
su labex
Das System fordert Sie zur Eingabe eines Passworts auf. Geben Sie ein beliebiges falsches Passwort wie wrongpassword ein und drücken Sie Enter.
Password:
su: Authentication failure
Wiederholen wir den Vorgang, um mehrere aufeinanderfolgende Fehlversuche zu erzeugen.
su labex
Geben Sie erneut ein falsches Passwort ein. Nachdem wir nun einige Protokolldaten erzeugt haben, sehen wir uns die Authentifizierungsprotokolldatei an. Mit sudo und tail zeigen wir die letzten Zeilen von /var/log/auth.log an, in denen die neuesten Ereignisse aufgezeichnet sind.
sudo tail /var/log/auth.log
Sie sehen mehrere neue Zeilen zu den fehlgeschlagenen su-Versuchen. Die Ausgabe sieht ungefähr so aus und enthält den Zeitstempel, den Prozess (su) sowie die Fehlermeldung.
Jul 22 16:45:01 labex-vm su[12345]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost= user=labex
Jul 22 16:45:01 labex-vm su[12345]: FAILED SU (to labex) labex on /dev/pts/0
Jul 22 16:45:15 labex-vm su[12346]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost= user=labex
Jul 22 16:45:15 labex-vm su[12346]: FAILED SU (to labex) labex on /dev/pts/0
Die manuelle Suche in Protokollen kann zeitaufwendig sein. Effizienter ist es, grep zum Filtern nach bestimmten Schlüsselwörtern zu verwenden. Suchen wir nach allen Zeilen, die authentication failure enthalten.
sudo grep "authentication failure" /var/log/auth.log
Dieser Befehl zeigt nur die Zeilen an, die dem Suchmuster entsprechen. Dadurch lassen sich die gerade erzeugten fehlgeschlagenen Versuche leicht erkennen.
Erstellen wir nun ein einfaches Shell-Skript, um diesen Überwachungsvorgang zu automatisieren. Das Skript prüft das Protokoll auf Fehlversuche und gibt eine Zusammenfassung aus. Wechseln Sie in Ihr Verzeichnis ~/project und erstellen Sie mit nano eine neue Datei namens log_monitor.sh.
nano log_monitor.sh
Geben Sie das folgende Bash-Skript in den Editor ein. Es verwendet grep mit der Option -c, um die Anzahl der fehlgeschlagenen Anmeldeversuche zu zählen, und gibt anschließend eine Statusmeldung aus.
#!/bin/bash
LOG_FILE="/var/log/auth.log"
FAILURE_COUNT=$(sudo grep -c "authentication failure" $LOG_FILE)
echo "--- Authentication Log Monitor ---"
if [ "$FAILURE_COUNT" -gt 0 ]; then
echo "WARNING: Found $FAILURE_COUNT failed login attempts."
else
echo "OK: No failed login attempts found."
fi
echo "--------------------------------"
Speichern Sie die Datei und beenden Sie nano, indem Sie Ctrl+X, anschließend Y und dann Enter drücken.
Machen Sie das neue Skript anschließend mit dem Befehl chmod ausführbar.
chmod +x log_monitor.sh
Führen Sie zum Schluss das Überwachungsskript aus, um das Ergebnis anzuzeigen.
./log_monitor.sh
Da Sie fehlgeschlagene Anmeldungen erzeugt haben, erkennt das Skript diese und gibt eine Warnmeldung mit der genauen Anzahl aus.
--- Authentication Log Monitor ---
WARNING: Found 2 failed login attempts.
--------------------------------
Sie haben nun gelernt, wie man fehlgeschlagene Authentifizierungsversuche simuliert und erkennt sowie ein einfaches Überwachungsskript dafür erstellt – eine wichtige Fähigkeit zur Aufrechterhaltung der Systemsicherheit.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie die Sicherheit eines Linux-Systems durch die Konfiguration einer robusten lokalen Passwortrichtlinie verbessern. Sie haben die Datei /etc/security/pwquality.conf angepasst, um mithilfe des Moduls pam_pwquality Regeln für die Passwortkomplexität durchzusetzen. Dazu gehörten eine Mindestlänge sowie die Anforderung, mindestens eine Ziffer, einen Großbuchstaben und einen Kleinbuchstaben zu verwenden, um leicht zu erratende Zugangsdaten zu verhindern.
Außerdem haben Sie untersucht, wie diese strengen Passwortrichtlinien beim Erstellen neuer Benutzerkonten angewendet werden. Das Lab behandelte zudem die wichtige Fähigkeit, Authentifizierungsprotokolle des Systems zu überwachen und sicherheitsrelevante Ereignisse wie wiederholte fehlgeschlagene Anmeldeversuche zu erkennen und zu analysieren. Solche Ereignisse können auf einen möglichen Angriff hindeuten.



