Вопрос или проблема
Я замечаю, что в /etc/pam.d/common-password
есть настройки для определения минимальной силы пароля. Например:
...
password requisite pam_pwquality.so retry=3 maxrepeat=0 minlen=19 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root dictcheck=0
password required pam_pwhistory.so remember=10 use_authtok enforce_for_root
...
Эти проверки выполняются, когда запускается passwd
. Я хочу проверить, пройдет ли данная строка эти проверки, но не хочу, чтобы фактически изменялся пароль пользователя, если проверка пройдет успешно. По сути, я ищу что-то вроде passwd --dry-run
.
Как я могу это сделать?
Ответ или решение
Чтобы протестировать параметры PAM (Pluggable Authentication Modules) для проверки пароля, не изменяя фактический пароль пользователя, важно понимать, какие модули и настройки используются в системе. В вашем случае имеются настройки в файле /etc/pam.d/common-password
, которые определяют минимальную сложность пароля. Ниже приведены варианты, позволяющие проверить, пройдет ли заданная строка (например, потенциальный пароль) через проверку PAM.
Подходы для тестирования сложности пароля без изменения пароля
-
Использование PAM модуля для проверки качества пароля:
PAM предлагает возможность проверить пароли с помощью модуля
pam_pwquality.so
. Однако прямого способа проверить строку без изменения текущего пароля через стандартные утилиты, такие какpasswd
, нет. Вы можете, однако, использовать командуpamtester
, чтобы протестировать PAM модули.Установка
pamtester
(если он не установлен):sudo apt-get install pamtester
Применение
pamtester
для проверки:pamtester common-password <your-username> <your-plain-password>
Этот метод выполнит проверки, которые описаны в конфигурации PAM, и выдаст результат о соответствии пароля заданным критериям.
-
Создание временного пользователя:
Если вы хотите протестировать пароль в контексте системы, можно создать временного пользователя и установить для него тестируемый пароль. Для этого выполните следующие шаги:
sudo useradd testuser sudo passwd testuser
Установите тестируемый пароль. Если изменения будут успешно приняты, это будет означать, что пароль соответствует требованиям.
После проверки не забудьте удалить временного пользователя:
sudo userdel -r testuser
-
Использование скриптов для проверки требования пароля:
Если вышеперечисленные методы не подходят, можно написать скрипт для проверки пароля, который будет учитывать правила из
/etc/pam.d/common-password
. Например, на Python можно использовать библиотекуpasslib
, чтобы проверить сложность пароля:from passlib.context import CryptContext pwd_context = CryptContext(schemes=["sha256_crypt"], deprecated="auto") def check_strength(password): min_length = 19 # Дополнительные проверки на символы и условия if len(password) < min_length: return False # Здесь можно реализовать другие условия, такие как ucredit, lcredit... return True test_password = "ваш_тестовый_пароль" if check_strength(test_password): print("Пароль соответствует требованиям.") else: print("Пароль не соответствует требованиям.")
Заключение
К сожалению, в текущей версии утилит Linux нет прямого способа выполнить команду passwd
с параметром --dry-run
, чтобы проверить пароль с PAM. Однако можно использовать предложенные методы для тестирования паролей на соответствие требованиям безопасности, указанным в конфигурации PAM. Выбор метода зависит от ваших потребностей и доступных ресурсов.