Механизм работы 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).