Механизм работы PAM
Работа системы PAM строится вокруг понятия стека аутентификации, в рамках которого выполняется последовательный вызов определённых модулей в установленном порядке. Для каждого прикладного сервиса (например, sshd, login, sudo, gdm-password) создаётся отдельный конфигурационный файл в каталоге /etc/pam.d/.
Каждая строка в конфигурационном файле имеет следующую структуру:
<тип> <контроль> <модуль> [аргументы]
где:
- тип (type) — указывает назначение модуля:
auth— проверка подлинности пользователя (например, ввод пароля или PIN-кода);account— проверка политики доступа и допустимости входа (например, срок действия учётной записи, членство в группе);password— управление паролем (например, смена, проверка сложности, политика смены);session— инициализация и завершение пользовательской сессии (например, монтирование ресурсов, логирование активности).
- контроль (control flag) — определяет, как результат выполнения модуля влияет на общее решение (разрешить или запретить доступ):
required— модуль должен выполниться успешно; при ошибке вход будет запрещён, даже если другие модули завершатся успешно;requisite— аналогично required, но при ошибке выполнение следующих модулей будет прекращено;sufficient— при успешном выполнении модуля дальнейшая проверка может быть пропущена, если это допускается конфигурацией;optional— результат выполнения модуля игнорируется, если он не является единственным в своей категории;include— подключение правил из другого PAM-файла;substack— подключение стека из другого файла с сохранением логики типа.
- модуль — путь к библиотеке или её имя (если библиотека находится в стандартном каталоге
/lib/security/или/lib64/security/); - аргументы — параметры, передаваемые модулю (например, try_first_pass, nullok, debug, inactive=N и т.д.).
Пример записи:
auth required pam_unix.so try_first_pass nullok
Данная строка означает, что при аутентификации (auth) обязательно требуется успешное выполнение модуля pam_unix, использующего локальные пароли пользователей. Модуль будет использовать ранее введённый пароль (если он уже есть в стеке PAM) и разрешит вход без пароля, если поле пароля пустое (nullok).