Может ли модуль pam изменить пароль, введенный пользователем, прежде чем его увидят другие модули?
Справочная информация: я написал генератор паролей, который работает следующим образом:
- Генерация 130 случайных битов
- Интерпретировать случайные биты как 26 элементов
GF(32)
- Используйте элементы в качестве коэффициентов для построения полинома 25-й степени
- Оцените полиномиум для всех 32 возможных входов
- Кодировать результат, используя модифицированную кодировку base32
Это дает мне надежные пароли (130 бит энтропии), где допускается несколько опечаток при вводе пароля без ущерба для безопасности.
До сих пор я интегрировал часть алгоритма исправления ошибок с ssh-add
Команда, это работает безупречно. Теперь я хотел бы использовать то же плавное использование для моего пароля для входа.
Вопрос: можно ли написать pam
модуль, который изменяет пароль, введенный пользователем, прежде чем его увидят другие модули? В частности, я хотел бы убедиться, что ecryptfs
видите исправленный пароль, чтобы домашний каталог можно было смонтировать после того, как мой алгоритм исправил опечатку в пароле, введенном пользователем?
1 ответ
Нет очевидного способа сделать это как отдельный модуль. Но это можно сделать с помощью простой модификации pam_unix
модуль.
К концу pam_sm_authenticate()
в modules/pam_unix/pam_unix_auth.c
найден следующий код:
/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
name = p = NULL;
Это можно изменить, чтобы применить исправление ошибок мне нужно:
/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
if (retval == PAM_AUTH_ERR) {
apply_error_correction(p);
retval = _unix_verify_password(pamh, name, p, ctrl);
}
name = p = NULL;