Passwortsicherheit erzwingen

So schützt du deine Systeme gegen die Verwendung schwacher Passwörter

Wenn du nicht der Einzige bist, der an deinem Linux-Server arbeitet, solltest du unterschiedliche Benutzerkonten für den Zugriff auf dein System anlegen. Das ist beispielsweise sinnvoll, wenn ein externer Web-Designer lediglich per FTP auf einige Daten deiner Website zugreift und daher einen eingeschränkten Zugriff erhalten sollte. Doch wie stellst du sicher, dass nicht genau diese Benutzerkonten zum Einfallstor für Angreifer werden? Im Folgenden zeige ich dir, wie du die Passwort-Sicherheit erhöhst, indem du für die Benutzerkonten deines Linux-Servers die Verwendung sicherer Passwörter erzwingst.

So erhöhst du die Passwortsicherheit – Passwort-Vorgaben unter Linux

Für die Erweiterung des Authentifizierungsdienstes kommen Pluggable Authentication Modules (PAM) zum Einsatz. Sie nutzen eine Programmierschnittstelle zum Authentifizierungsdienst deines Systems und erlauben damit das Hinzufügen neuer Funktionen ohne eine Manipulation des Authentifizierungsdienstes.

Die Vergabe von Passwortrichtlinien nehmen wir im Folgenden mit dem PAM CrackLib (pam_cracklib) vor. Es prüft die Passwörter der Benutzerkonten bei Änderungen.

Stelle für deine Benutzer sicher, dass nach der Passwortänderung eine hohe Passwortsicherheit gewährleistet ist.

Zum Download von CrackLib.

pam_cracklib hat eine hart codierte minimale Passwortlänge von 6 Zeichen und prüft Passwörter standardmäßig auf Muster oder das Vorhandensein in einem mitgelieferten Wörterbuch. Darüber hinaus parametrisierst du das Modul mit folgende Angaben:

  • retry: Anzahl der Eingabeversuche beim Festlegen eines neuen Passworts
  • minlen: Minimale Passwortlänge (Achtung: „minlen“ kann durch die Vergabe von credits ausgehebelt werden. Dazu später mehr.)
  • dcredit: maximale Anzahl der credits für Ziffern
  • lcredit: maximale Anzahl der credits für Kleinbuchstaben
  • ucredit: maximale Anzahl der credits für Grossbuchstaben
  • ocredit: maximale Anzahl der credits für Sonderzeichen

Weitere Parameter wie „maxrepeat“, „maxsequence“ und „maxclassrepeat“ schränken deine Benutzer zusätzlich bei der Passwortauswahl ein, indem du die maximale Anzahl der sich hintereinander wiederholenden Zeichen (maxrepeat), die maximale Länge von Sequenzen wie „123“ (maxsequence) und die maximale Anzahl von hintereinanderstehenden Zeichen derselbe Zeichenklasse (maxclassrepeat), z.B. Großbuchstaben, vorgibst.

Beachte: Diese Vorgaben gelten nicht für den Benutzer root. Wenn du als root-Benutzer ein Passwort für deine Benutzer vergibts, erhältst du zwar einen Hinweis, falls das eingegebene Passwort nicht den Richtlinien entspricht, es wird aber trotzdem geändert. Erst wenn du pam_cracklib explizit den Parameter „enforce_for_root“ vorgibst, gelten deine Passwortrichtlinien auch für den Benutzer root.

Abbildung - Optimiere die Passwortsicherheit - Warnhinweis - unsicheres Passwort
Entspricht das eingegebene Passwort nicht den Richtlinien oder ist es im Wörterbuch von pam_cracklib enthalten, wird die Passwortänderung abgelehnt.

 

Credits und Passwortlänge: Beachte diese Besonderheit der „minlen“

Eine Besonderheit des Parameters „minlen“ solltest du unbedingt berücksichtigen. Dieser gibt zwar die minimale Passwortlänge vor, kann aber ausgehebelt werden. Denn für die erste Verwendung einer Zeichenklasse (Ziffern, Kleinbuchstaben, Großbuchstaben oder Sonderzeichen) gibt es einen „Bonuspunkt“, der hier credit genannt wird. Ein Passwort mit „minlen=12“ erhältst du daher bereits durch die Eingabe von 11 Kleinbuchstaben:

  • Je Zeichen wird die Länge um 1 hochgezählt, das gibt eine „minlen“ von 11.
  • Für die Verwendung des ersten Kleinbuchstabens gibt es einen zusätzlichen credit, wodurch die „minlen“ von 12 erreicht wird.

Verwendest du z.B. auch einen Großbuchstaben, bedeutet dies einen weiteren credit und du erreichst die „minlen“ bereits mit 10 Zeichen Länge.

Wie viele credits maximal vergeben werden, steuerst du mit den Parametern „dcredit“, „lcredit“, „ucredit“ und „ocredit“:

  • Ist der Wert grösser oder gleich 0, gibt er die maximale Anzahl der Zeichen für die jeweilige Zeichenklasse vor, die in credits umgerechnet werden. Ein Beispiel: Bei „ucredit=3“ kannst du mit der Eingabe von Großbuchstaben sogar bis zu drei credits erhalten, statt wie in der Standardkonfiguration mit nur einem.
  • Ist der Wert negativ, wird mindestens die Verwendung der entsprechenden Anzahl an Zeichen erzwungen. „ucredit=-3“ erfordert also, dass mindestens 3 Zeichen mit Großbuchstaben verwendet werden.

Wenn du also beispielsweise die Verwendung von mindestens einem Sonderzeichen erzwingen möchtest, verwende am besten den Parameter „ocredit=-1“. Andernfalls könnten die Benutzer eine in „minlen“ geforderte Anzahl eventuell durch Zeichen aus den anderen Zeichenklassen erfüllen, ohne dass ein Sonderzeichen enthalten ist.

 

Wie du deine Passwortrichtlinien aktivierst

Damit du deine Passwortrichtlinien vorgeben kannst, installiere zunächst pam_cracklib auf deinem System. Trage anschließend deine Vorgaben an die Passwörter der Benutzerkonten ein. Ich zeige dir im Folgenden, wie du dies unter Debian durchführen kannst:

  1. Installiere pam_cracklib mit dem Kommando apt-get install libpam-cracklib
  2. Öffne die „/etc/pam.d/common-password“ in einem Editor, z.B. in vi:
    vi /etc/pam.d/common-password
  3. Du findest hier die Zeile „password requisite pam_cracklib.so retry=3 minlen=8 difok=3”. Indem du die Parameter anpasst bzw. ergänzt, erzwingst du deine Passwortrichtlinie.

Für ein sicheres Passwort mit mindestens 12 Zeichen Länge, mindestens einem Sonderzeichen, mindestens zwei Ziffern und mindestens zwei Großbuchstaben, änderst du die oben genannte Zeile wie folgt ab:

password requisite pam_cracklib.so retry=3 minlen=13 difok=3 ocredit=-1 dcredit=-2 ucredit=-2

Nach dem Speichern der Datei werden deine neuen Passwortvorgaben direkt verwendet und gewährleisten damit hohe Passwortsicherheit. Benutzer des Systems können nun nur noch Passwörter wählen, die der vorgegebenen Richtlinie entsprechen.

Bildnachweis: Fotolia, Lizenz: GoDaddy