Может ли модуль 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;
Другие вопросы по тегам