ОП смешивает два разных вопроса: политика и длина пароля.
Как уже говорилось в @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 +++