Во многих дистрибутивах Linux (а более подробно мы будем говорить о Debian / Ubuntu) политика паролей по умолчанию не установлена, и никто не помешает нам установить слабый пароль, даже «123».
Это неправильно, поэтому мы сейчас займемся более гибкой настройкой политики паролей. Для этого сначала установим в систему необходимые пакеты:
apt install libpam-pwquality
После чего откроем файл /etc/security/pwquality.conf, который отвечает за политику паролей. Опции будут перечислены в порядке их перечисления в файле со значениями по умолчанию:
Количество символов, на которые новый пароль должен отличаться от старого.
difok = 1
Минимальная длина пароля
minlen = 8
При составлении пароля учитываются классы символов, их четыре: прописные буквы, строчные буквы, цифры и специальные символы.
Мы можем поощрить использование определенных классов символов за счет более короткой длины пароля, для этого используется система кредитов. По умолчанию один любой символ – один кредит. Количество кредитов должно быть равно или превышать минимальную длину пароля.
Следующие опции позволяют начислять дополнительные кредиты за каждый класс символов:
dcredit = 0 – цифры
ucredit = 0 – прописные буквы
lcredit = 0 – строчные буквы
ocredit = 0 – специальные символы
Таким образом, если мы установим dcredit = 1, то пароль pass123 получит 10 кредитов, что будет эквивалентно его длине в 10 символов.
Если же мы установим количество кредитов меньше нуля, то это будет требованием минимального количества символов данного класса, например, ocredit = -2 – не менее двух специальных символов в пароле.
Для того, чтобы сочетать в пароле разные классы символов мы можем задать необходимое количество классов:
minclass = 0
Так если мы установим его значение равным трем, то это будет значить, что в пароле требуется использовать не менее трех классов символов. Не забываем, что классов у нас всего четыре.
Для повышения сложности пароля можем задать максимально допустимое количество повторений одного символа:
maxrepeat = 0
Рядом есть другая опция, которая задает максимальное количество повторения символов одного класса:
maxclassrepeat = 0
Чтобы понять разницу между ними разберем простой пример, допустим, что оба параметра имеют значение, установленное в три.
В первом случае пароль АААА не пройдет, а пароль ABCD пройдет, так как символы разные. Во втором не пройдут оба, так как и там и там символы одного класса.
Учетная запись пользователя в Linux имеет специальное поле GECOS, которое может содержать его реальное имя, телефон, адрес почты и т.д. Мы можем проверить пароль на наличие в нем общедоступной информации:
gecoscheck = 0
При установке значения в единицу при нахождении в пароле данных GECOS он не будет пропущен.
Также мы можем осуществлять проверку по словарям cracklib (ставятся по зависимостям):
dictcheck = 1
Следующая проверка исключает использование имени пользователя в пароле:
usercheck = 1
Но это грубая проверка, которая проверяет имя пользователя целиком, например, сочетание логина и пароля ivanov:ivan123 будет разрешено. Но мы можем ужесточить эту проверку, указав предельно допустимую длины подстроки имени пользователя:
usersubstr = 0
Если установить его равным трем, то сочетание ivanov:ivan123 будет запрещено, равно как vano456, а iva123 будет пропущен.
Следующая опция устанавливает количество попыток ввода пароля:
retry = 3
Но есть одна тонкость, все эти правила не распространяются на пользователя root, чтобы изменить это поведение просто раскомментируйте опцию:
enforce_for_root
Как видим, настроить политику паролей в Linux не сложно, но это позволит значительно повысить безопасность системы и не допустить использования слабых или словарных паролей.