Wie zeige ich Kennwortrichtlinieninformationen für einen Benutzer an (Ubuntu)?

5

Die Ubuntu-Dokumentation> Ubuntu 9.04> Ubuntu Server-Handbuch> Sicherheit> Benutzerverwaltung gibt an, dass es für Ubuntu eine Standard-Mindestkennwortlänge gibt:

Standardmäßig erfordert Ubuntu eine Mindestlänge von 4 Zeichen

Sagen wir, das Passwort soll vom Benutzer mit geändert werden passwd. Gibt es einen Befehl zum Anzeigen der aktuellen Kennwortrichtlinien für einen Benutzer (z. B. zum chageAnzeigen der Kennwortablaufinformationen für einen bestimmten Benutzer)?

> sudo chage -l SomeUserName
Last password change                                : May 13, 2010
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

Hierbei werden nicht verschiedene Bereiche untersucht, die die Richtlinie steuern, und sie werden interpretiert, da der Prozess Fehler enthalten kann. Ein Befehl, der die erstellte Richtlinie meldet, wird zum Überprüfen der Richtlinieneinstellungsschritte verwendet.

CW Holeman II
quelle
Bitte geben Sie einen gültigen Grund für die Migration gültiger Super User-Fragen an. Wenn eine Frage nach einer gewissen Zeit keine Antwort auf Super User erhält, sind wir bereit, sie zu migrieren, migrieren jedoch keine gültigen Fragen ohne gültigen Grund. Beachten Sie auch, dass alle weiteren diesbezüglichen Flags auf der obigen Basis ignoriert werden.
BinaryMisfit
Ich würde die Frage eher auf der Ubuntu-Site als auf SU posten, wenn ich gewusst hätte, dass es sie gibt. Soll ich diese Frage auf der Ubuntu-Site erneut veröffentlichen, anstatt sie auf die am stärksten fokussierte Site migrieren zu lassen?
CW Holeman II

Antworten:

5

Das OP verwechselt zwei verschiedene Fragen: Richtlinie und Kennwortlänge .

Wie bereits von @BillThor angegeben, wird die Kennwortlänge vom PAM-Modul unter dem nicht wirklich verheißungsvollen Schlüsselwort obscurein der Datei /etc/pam.d/common-password behandelt, die die folgende Zeile enthält:

 password        [success=1 default=ignore]      pam_unix.so obscure sha512

Das obscureSchlüsselwort steht für (laut man pam_unix ):

 obscure
       Enable some extra checks on password strength. These checks are based on the "obscure" checks in the
       original shadow package. The behavior is similar to the pam_cracklib module, but for
       non-dictionary-based checks. The following checks are implemented:

       Palindrome
           Verifies that the new password is not a palindrome of (i.e., the reverse of) the previous one.

       Case Change Only
           Verifies that the new password isn't the same as the old one with a change of case.

       Similar
           Verifies that the new password isn't too much like the previous one.

       Simple
           Is the new password too simple? This is based on the length of the password and the number of
           different types of characters (alpha, numeric, etc.) used.

       Rotated
           Is the new password a rotated version of the old password? (E.g., "billy" and "illyb")

Die Vorschrift von obscurekann wie folgt überschrieben werden: Schreiben Sie in /etc/pam.d/common-password die obige Zeile neu als

 password        [success=1 default=ignore]      pam_unix.so obscure sha512 minlen=20

oder was auch immer du magst.

Um herauszufinden, wo genau das Passwort mit der Mindestlänge definiert ist, müssen Sie in die Tiefen von Pam eintauchen:

  # apt-cache search pam_unix.so
    libpam-modules - Pluggable Authentication Modules for PAM
  # apt-get source libpam-modules

... und dann finden Sie heraus, wo die minimale Passwortlänge definiert ist:

  # grep -rl UNIX_MIN_PASS_LEN
    modules/pam_unix/support.h
    modules/pam_unix/support.c
    debian/patches-applied/007_modules_pam_unix
    debian/patches-applied/055_pam_unix_nullok_secure

Wenn Sie die Debian-Patches lesen, werden Sie sehen, dass der Parameter UNIX_MIN_PASS_LEN (der 27. mögliche Parameter) einer Variablen namens minlen entspricht , die in /modules/pam_unix/support.c festgelegt ist. Einer der Debian-Patches behebt jedoch pass_min_len: Die Datei debian / patches-applied / 007_modules_pam_unix enthält die folgenden Zeilen:

 -       int pass_min_len = 0;
 +       int pass_min_len = 6;

und die Datei debian / Changelog spezifiziert:

  • Weitere Bereinigungen von 007_modules_pam_unix - verwenden Sie keine globale Variable für pass_min_len, verschieben Sie die Längenprüfung nicht unentgeltlich in die "obskuren" Prüfungen und internationalisieren Sie die Fehlerzeichenfolgen.

Ich mochte PAM immer nicht und aus diesem Grund: Um einen trivialen Parameter wie die minimale Kennwortlänge zu finden, müssen Sie sich den Quellcode ansehen.

Die Informationen, die von angezeigt werden, chage -l usernamesind stattdessen vollständig in der Datei / etc / shadow enthalten: Auf der Manpage heißt es:

shadow ist eine Datei, die die Kennwortinformationen für die Systemkonten und optionale Alterungsinformationen enthält.

Die Felder jedes Eintrags sind:

Anmeldename, verschlüsseltes Kennwort, Datum der letzten Kennwortänderung, Mindestalter für Kennwörter, Höchstalter für Kennwörter, Kennwortwarnzeitraum, Zeitraum der Kennwortinaktivität, Ablaufdatum des Kontos sowie ein reserviertes Feld für die zukünftige Verwendung.

Ein einfach zu überprüfen, straceder chageBefehl zeigt , welche Dateien geöffnet werden ,

 # strace -e trace=open -f chage -l myusername
   open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3                                                                                                                                                                                                               
   open("/proc/filesystems", O_RDONLY)     = 3                                                                                                                                                                                                                                    
   open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3                                                                                                                                                                                                                 
   open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW) = 3                                                                                                                                                                                                               
   open("/etc/shadow", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW) = 4                                                                                                                                                                                                               
   open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 5                                                                                                                                                                                                                 
   open("/usr/share/locale/en_US/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such      file or directory)                                                                                                                                                                        
   open("/usr/share/locale/en/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                                                                                                                           
   open("/usr/share/locale-langpack/en_US/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                                                                                                               
   open("/usr/share/locale-langpack/en/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                                                                                                                  
   open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 5                                                                                                                                                                                                                                 
   Last password change                                    : mag 05, 2014                                                                                                                                                                                                         
   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                                                                                                                                                                                                                    
   +++ exited with 0 +++                                                 
MariusMatutiae
quelle
2

Die Richtlinie befindet sich in /etc/pam.d/common-password. Die Standardrichtlinie ist dunkel und wird in der pam_unix-Manpage dokumentiert. Möglicherweise möchten Sie pam_cracklib installieren und einige zusätzliche Richtlinien hinzufügen. Kennwortänderungen durch root vermeiden im Allgemeinen Richtlinien.

Wenn Sie das neue Kennwort nicht mit pam überprüfen, gehört die Richtlinie zu dem Tool, das zum Ändern des Kennworts verwendet wird. Dies kann passieren, wenn Sie LDAP oder eine andere externe Kennwortdatenbank verwenden und das Kennwort direkt in der Datenbank ändern.

BillThor
quelle
Hinzugekommen zu der Frage, dass passwd das zu verwendende Tool ist.
CW Holeman II
2
In diesem Fall wird die Richtlinie in /etc/pam.d/common-passwd eingefügt. pam_unix stellt die Standardrichtlinie bereit. Ich glaube nicht, dass es ein Tool zur Anzeige von Richtlinien gibt. Es müsste alle möglichen pam-Module kennen, die zutreffen. In Anbetracht dessen, dass diese möglicherweise vom Benutzer geschrieben wurden, wären nur einige Richtlinien möglich.
BillThor