Wie zeige ich Kennwortrichtlinien-Informationen für einen Benutzer (Ubuntu) an?

Ubuntu Dokumentation > Ubuntu 9.04 > Ubuntu Server Guide > Sicherheit > Benutzerverwaltung besagt, dass es eine standardmäßige Mindestkennwortlänge für Ubuntu gibt:

Standardmäßig benötigt Ubuntu ein Minimum passwortlänge von 4 Zeichen

Angenommen, das Passwort soll vom Benutzer mit passwd geändert werden. Gibt es einen Befehl zum Anzeigen der aktuellen Kennwortrichtlinien für einen Benutzer (z. B. zeigt der Befehl chage den Kennwortablauf an informationen 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

Dies ist eher, als verschiedene Orte zu untersuchen, die die Richtlinie steuern, und sie zu interpretieren, da der Prozess Fehler enthalten kann. Ein Befehl, der die zusammengesetzte Richtlinie meldet, wird verwendet, um die Richtlinieneinstellungsschritte zu überprüfen.

Author: CW Holeman II, 2010-06-09

2 answers

Das OP verwechselt zwei verschiedene Fragen: policy und password length.

Wie bereits von @BillThor angegeben, wird die Passwortlänge vom PAM-Modul unter dem nicht wirklich günstigen Schlüsselwort obscure in der Datei /etc/pam behandelt.d / common-password, das die folgende Zeile enthält:

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

Das Schlüsselwort obscure steht für (nach 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")

Das Rezept von obscure kann wie folgt überschrieben werden: in /etc/pam.d / common-password, schreiben Sie die obige Zeile neu als

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

Oder was auch immer du magst.

Um genau zu finden, wo das Passwort mit der minimalen Länge definiert ist, muss man 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 zu finden, wo die minimale Passordlä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 durchlesen, werden Sie feststellen, dass der Parameter UNIX_MIN_PASS_LEN (der 27. mögliche Parameter) einer Variablen namens minlen entspricht, die in /Module/pam_unix/support.c. Einer der Debian-Patches behebt jedoch pass_min_len: Die Datei debian/patches-applied/007_modules_pam_unix enthält folgende Zeilen:

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

Und die Datei debian/Changelog gibt an:

  • Weitere Bereinigungen von 007_modules_pam_unix -- Verwenden Sie keine globale Variable verschieben Sie für pass_min_len die Längenüberprüfung nicht unentgeltlich in die "obscure" überprüft und internationalisiert die Fehlerzeichenfolgen.

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

Die von chage -l username angezeigten Informationen sind stattdessen vollständig in der Datei /etc/shadow enthalten: Die Manpage besagt:

Shadow ist eine Datei, die die Kennwortinformationen für die Konten des Systems und optionale Alterungsinformationen enthält.

Die Felder jedes Eintrags sind:

Name der Anmeldung, verschlüsseltes Kennwort, Datum der letzten Kennwortänderung, Mindestalter des Kennworts, maximales Kennwortalter, Kennwortwarnzeit, Zeitraum der Kennwortinaktivität, Ablaufdatum des Kontos sowie ein reserviertes Feld für die zukünftige Verwendung.

Um dies zu überprüfen, zeigt ein strace des Befehls chage an, 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 +++                                                 
 5
Author: MariusMatutiae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-08-06 19:00:47

Die Richtlinie befindet sich in /etc/pam.d/common-password. Die Standardrichtlinie ist dunkel, was auf der pam_unix-Manpage dokumentiert ist. 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 pam nicht zum Überprüfen des neuen Kennworts verwenden, gehört die Richtlinie zu dem Tool, mit dem das Kennwort geändert wird. Dies kann passieren, wenn Sie LDAP oder eine andere externe Kennwortdatenbank verwenden und das Kennwort ändern direkt in der Datenbank.

 2
Author: BillThor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-06-09 15:51:40