Создание политики паролей в Linux

Автор оригинала: https://twitter.com/curiousputorius
  • Перевод
И снова здравствуйте! Уже завтра начинаются занятия в новой группе курса «Администратор Linux», в связи с этим публикуем полезную статью по теме.



В прошлом туториале мы рассказывали, как использовать pam_cracklib, чтобы усложнить пароли в системах Red Hat 6 или CentOS. В Red Hat 7 pam_pwquality заменила cracklib в качестве pam модуля по умолчанию для проверки паролей. Модуль pam_pwquality также поддерживается в Ubuntu и CentOS, а также во многих других ОС. Этот модуль упрощает создание политик паролей, чтобы удостовериться, что пользователи принимают ваши стандарты сложности паролей.

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

Другая политика, которая недавно была поставлена под сомнение, заставляет пользователей менять свои пароли каждые x дней. Были проведены некоторые исследования, которые показали, что это также наносит ущерб безопасности.

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

Параметры политики паролей

Ниже вы увидите параметры политики паролей и краткое описание каждого из них. Многие из них схожи с параметрами в модуле cracklib. Такой подход упрощает портирование ваших политик из старой системы.

  • difok – Количество символов в вашем новом пароле, кототрые НЕ должны присутствовать в вашем старом пароле. (По умолчанию 5)
  • minlen – Минимальная длина пароля. (По умолчанию 9)
  • ucredit – Максимальное количество кредитов за использование символов верхнего регистра (если параметр > 0), или минимальное требуемое число символов верхнего регистра (если параметр < 0). По умолчанию 1.
  • lcredit — Максимальное количество кредитов за использование символов нижнего регистра (если параметр > 0), или минимальное требуемое число символов нижнего регистра (если параметр < 0). По умолчанию 1.
  • dcredit — Максимальное количество кредитов за использование цифр (если параметр > 0), или минимальное требуемое число цифр (если параметр < 0). По умолчанию 1.
  • ocredit — Максимальное количество кредитов за использование иных символов (если параметр > 0), или минимальное требуемое количество иных символов (если параметр < 0). По умолчанию 1.
  • minclass – Устанавливает количество требуемых классов. Классы включают в себя вышеперечисленные параметры (символы верхнего регистра, нижнего регистра, цифры, иные символы). По умолчанию 0.
  • maxrepeat – Максимальное число повторений символа в пароле. По умолчанию 0.
  • maxclassrepeat — Максимальное количество последовательных символов в одном классе. По умолчанию 0.
  • gecoscheck – Проверяет, содержит ли пароле какие-либо слова из строк GECOS пользователя. ( Информация о пользователе, т.е. настоящее имя, местоположение и т.д.) По умолчанию 0 (выключено).
  • dictpath – Пусть к словарям cracklib.
  • badwords – Разделенные пробелом слова, которые запрещены в паролях (Название компании, слово «пароль» и т. д. ).

Если понятие кредитов звучит странно, ничего страшного, это нормально. Мы поговорим об этом подробнее в следующих разделах.

Конфигурация политики паролей

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

  • Пароль должен иметь минимальную длину 15 символов.
  • В пароле один и тот же символ не должен повторяться более двух раз.
  • В пароле классы символов могут повторяться до четырех раз.
  • Пароль должен содержать символы из каждого класса.
  • Новый пароль должен иметь 5 новых символов по сравнению со старым.
  • Включить проверку GECOS.
  • Запретить слова «password, pass, word, putorius»

Теперь, как только мы изложили политику, мы можем отредактировать файл /etc/security/pwquality.conf, чтобы усилить требования к сложности пароля. Ниже приведен пример файла с комментариями для лучшего понимания.

# Make sure 5 characters in new password are new compared to old password
difok = 5
# Set the minimum length acceptable for new passwords
minlen = 15
# Require at least 2 digits
dcredit = -2
# Require at least 2 upper case letters
ucredit = -2
# Require at least 2 lower case letters
lcredit = -2
# Require at least 2 special characters (non-alphanumeric)
ocredit = -2
# Require a character from every class (upper, lower, digit, other)
minclass = 4
# Only allow each character to be repeated twice, avoid things like LLL
maxrepeat = 2
# Only allow a class to be repeated 4 times
maxclassrepeat = 4
# Check user information (Real name, etc) to ensure it is not used in password
gecoscheck = 1
# Leave default dictionary path
dictpath =
# Forbid the following words in passwords
badwords = password pass word putorius

Как вы могли заметить, некоторые параметры в нашем файле избыточны. Например, параметр minclass избыточен, поскольку мы уже задействуем как минимум два символа из класса, используя поля [u,l,d,o]credit. Наш список слов, которые нельзя использовать также избыточен, поскольку мы запретили повторение какого-либо класса 4 раза (все слова в нашем списке написаны символами нижнего регистра). Я включил эти параметры только, чтобы продемонстрировать, как использовать их для настройки политики паролей.
Как только вы создали свою политику, вы можете принудить пользователей сменить свои пароли при следующем их входе в систему.

Еще одна странная вещь, которую вы, возможно, заметили, заключается в том, что поля [u,l,d,o]credit содержат отрицательное число. Это потому что числа больше или равные 0 дадут кредит на использование символа в вашем пароле. Если поле содержит отрицательное число, это значит, что требуется определенное количество.

Что такое кредиты (credit)?

Я называю их кредитами, поскольку это максимально точно передает их назначение. Если значение параметра больше 0, вы прибавляете количество «кредитов на символы» равное «х» к длине пароля. Например, если все параметры (u,l,d,o)credit установить в 1, а требуемая длина пароля была 6, то вам понадобится 6 символов для удовлетворения требования длины, потому что каждый символ верхнего регистра, нижнего регистра, цифра или иной символ дадут вам один кредит.

Если вы установите dcredit в 2, вы теоретически сможете использовать пароль длиной в 9 символов и получить 2 кредита на символы для цифр и тогда длина пароля уже может быть 10.

Посмотрите на этот пример. Я установил длину пароля 13, установил dcredit в 2, а все остальное в 0.

$ pwscore
 Thisistwelve
 Password quality check failed:
  The password is shorter than 13 characters

$ pwscore
 Th1sistwelve
 18

Моя первая проверка провалилась, поскольку длина пароля была меньше 13 символов. В следующий раз я изменил букву “I” на цифру “1” и получил два кредита за цифры, что приравняло пароль к 13.

Тестирование пароля

Пакет libpwquality обеспечивает функционал, описанный в статье. Также с ним поставляется программа pwscore, которая предназначена для проверки пароля на сложность. Мы использовали ее выше, для проверки кредитов.

Утилита pwscore читает из stdin. Просто запустите утилиту и напишите свой пароль, она выдаст ошибку или значение от 0 до 100.

Показатель качества пароля соотносится с параметром minlen в файле конфигурации. В целом показатель меньше 50 рассматривается как «нормальный пароль», а выше – как «сильный пароль». Любой пароль, который проходит проверки на качество (особенно принудительную проверку cracklib) должен выдержать атаки словаря, а пароль с показателем выше 50 с настройкой minlen по умолчанию даже brute force атаки.

Заключение

Настройка pwquality – это легко и просто по сравнению с неудобствами при использовании cracklib с прямым редактированием файлов pam. В этом руководстве мы рассмотрели все, что вам понадобится при настройке политик паролей в Red Hat 7, CentOS 7 и даже систем Ubuntu. Также мы поговорили о концепции кредитов, о которых редко пишут подробно, поэтому эта тема часто оставалась непонятной тем, кто с ней ранее не сталкивался.

Источники:

pwquality man page
pam_pwquality man page
pwscore man page

Полезные ссылки:

Choosing Secure Passwords – Bruce Schneier
Lorrie Faith Cranor discusses her password studies at CMU
The Infamous xkcd cartoon on Entropy
OTUS. Онлайн-образование
276,00
Авторские онлайн‑курсы для профессионалов
Поделиться публикацией

Похожие публикации

Комментарии 3

    0
    Да, классный инструмент. А как он подключается, автоматически при загрузке системы, или в ручную, если хотим им пользоваться?
      0

      Насколько я понял, это PAM-модуль, который проверяет новый пароль при смене. Т.е. это не демон, и оно никак вручную не запускается.

        0
        Подключается через pam_unix. После подключения будет стартовать вместе с системой.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое