4

Документация по Ubuntu> Ubuntu 9.04> Руководство по Ubuntu Server> Безопасность> Управление пользователями заявляет, что для Ubuntu установлена минимальная длина пароля по умолчанию:

По умолчанию Ubuntu требует минимальную длину пароля 4 символа

Скажем, пароль должен быть изменен пользователем с помощью passwd . Существует ли команда для отображения текущих политик паролей для пользователя (например, команда chage отображает информацию об истечении срока действия пароля для конкретного пользователя)?

> 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

Это вместо того, чтобы исследовать различные места, которые контролируют политику, и интерпретировать их, поскольку процесс может содержать ошибки. Команда, которая сообщает составленную политику, будет использоваться для проверки шагов настройки политики.

2 ответа2

5

ОП смешивает два разных вопроса: политика и длина пароля.

Как уже говорилось в @BillThor, длина пароля определяется модулем PAM под не совсем благоприятным ключевым словом obscure в файле /etc/pam.d/common-password, который содержит следующую строку:

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

obscure ключевое слово означает (согласно 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")

Предписание по obscure может быть переопределено следующим образом: в /etc/pam.d/common-password переписать строку выше как

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

или что угодно.

Чтобы найти именно то, где определен пароль минимальной длины, необходимо погрузиться в глубину pam:

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

... а затем найти минимальную длину пароля:

  # 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

Просматривая патчи Debian, вы увидите, что параметр UNIX_MIN_PASS_LEN (27-й возможный параметр) соответствует переменной с именем minlen, которая установлена в /modules/pam_unix/support.c. Однако одно из исправлений debian исправляет pass_min_len: файл debian /patches-apply /007_modules_pam_unix содержит строки:

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

и файл debian/Changelog указывает:

  • Дальнейшие очистки 007_modules_pam_unix - не используйте глобальную переменную для pass_min_len, не перемещайте проверку длины в "неясные" проверки и интернационализируйте строки ошибок.

Мне всегда не нравился PAM, и по этой причине: чтобы найти тривиальный параметр, такой как минимальная длина пароля, он обязывает вас изучить исходный код.

Информация, отображаемая chage -l username , вместо этого полностью содержится в файле /etc /shadow: Страница Man гласит:

shadow - это файл, который содержит информацию о пароле для учетных записей системы и необязательную информацию о устаревании.

Поля каждой записи:

Имя пользователя, зашифрованный пароль, дата последнего изменения пароля, минимальный срок действия пароля, максимальный срок действия пароля, период предупреждения о пароле, период бездействия пароля, дата истечения срока действия учетной записи, а также зарезервированное поле для использования в будущем.

Просто для двойной проверки, strace команды chage показывает, какие файлы открыты,

 # 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 +++                                                 
2

Политика находится в /etc/pam.d/common-password. Политика по умолчанию неясна, что описано в справочной странице pam_unix. Вы можете установить pam_cracklib и добавить некоторые дополнительные политики. Смена пароля пользователем root обычно позволяет избежать политики.

Если вы не используете pam для проверки нового пароля, то политика будет принадлежать инструменту, используемому для смены пароля. Это может произойти, если вы используете LDAP или другую внешнюю базу паролей и меняете пароль непосредственно в базе данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .