PAM (подключаемые модули аутентификации)
PAM (Pluggable Authentication Modules, подключаемые модули аутентификации) это набор библиотек, к которым обращаются службы Linux, такие как login, su и sshd, чтобы проверить пользователя и права доступа. Linux-PAM читает файл каждой службы в /etc/pam.d, где модули выстроены в четыре группы: auth, account, password и session. Политику входа можно менять без перекомпиляции программ.
Что такое PAM и как он работает
PAM (Pluggable Authentication Modules) это набор библиотек, которые выполняют аутентификацию для системных служб. В руководстве pam(8) сказано, что он даёт программам, выдающим привилегии, например login и su, единый интерфейс для типовых задач аутентификации, а сам способ аутентификации настраивается динамически. Программа запрашивает у PAM решение, и PAM выполняет модули, перечисленные администратором для этой службы.
Модули делятся на четыре группы управления:
- auth аутентифицирует пользователя и устанавливает учётные данные.
- account проверяет состояние учётной записи, например истёк ли пароль и разрешено ли пользователю пользоваться службой.
- password обновляет токены аутентификации.
- session выполняет подготовку перед запуском службы и очистку после её завершения, например аудит.
Настройки лежат в файлах служб в /etc/pam.d, где имя файла в нижнем регистре совпадает с именем службы (sshd, su, login). Если этот каталог существует, /etc/pam.conf игнорируется, а файлы в нём перекрывают одноимённые файлы поставщика из /usr/lib/pam.d.
Как читать правило PAM и безопасно проверять изменения
Каждая строка файла службы состоит из четырёх полей: тип, управление, путь к модулю и аргументы модуля. Модули одного типа выполняются в указанном порядке, а поле управления определяет смысл результата, согласно руководству pam.d(5):
required: об ошибке сообщается только после выполнения остальных модулей.requisite: при ошибке результат возвращается сразу.sufficient: успех возвращается сразу, если ранее не было ошибки у required-модуля, а ошибка игнорируется.optional: важен, только если это единственный модуль данного типа.
В руководстве pam_wheel приведён пример: root пропускается, чтобы стать root, нужно членство в wheel, затем проверяется пароль:
auth sufficient pam_rootok.so
auth required pam_wheel.so
auth required pam_unix.so
Чтобы проверить безопасно, держите открытой сессию root, меняйте один файл и пробуйте новый вход из второго терминала, не закрывая прежние. Префикс - у типа лишь убирает запись в журнал, если модуль отсутствует.
Как sshd использует PAM и откуда берутся блокировки
В руководстве sshd_config сказано, что UsePAM yes включает PAM для парольной и keyboard-interactive аутентификации, а также применяет обработку модулей account и session ко всем способам аутентификации. Поэтому сбойный модуль account может не пустить пользователя даже с верным ключом SSH. Значение по умолчанию в руководстве no, хотя многие дистрибутивы поставляют yes, и там же советуют отключить PasswordAuthentication или KbdInteractiveAuthentication, так как они обычно играют одну роль.
Типичные ловушки:
- Некорректная строка, как правило, приводит к отказу аутентификации.
requisiteможет раскрыть, что учётная запись существует.pam_unixотклоняет пустые пароли, пока не указанnullok.pam_nologinблокирует вход не-root, пока существует/etc/nologin.pam_faillockпо умолчанию блокирует после 3 неудач за 900 секунд на 600 секунд, не блокирует root безeven_deny_rootи хранит счётчики в/var/run/faillock, который может не пережить перезагрузку.
Место PAM в защите сервера
PAM применяет политику входа после собственных проверок sshd, поэтому это и слой защиты, и риск блокировки одновременно. Используйте его для конкретных задач: pam_wheel ограничивает, кто может выполнять su, pam_faillock замедляет подбор, а модуль одноразовых кодов добавляет второй фактор. В руководстве pam_faillock есть эти настройки и команды для просмотра и сброса блокировки:
# /etc/security/faillock.conf
deny=4
unlock_time=1200
silent
faillock --user alice
faillock --user alice --reset
Помните, что злоумышленник может намеренно заблокировать настоящего администратора, поэтому сочетайте это с сетевыми мерами из руководства по защите SSH от подбора и fail2ban. Следуйте порядку из руководства по двухфакторной аутентификации SSH, держите под рукой консоль провайдера и заранее прочитайте как восстановить доступ после блокировки SSH.
Связанные термины: sshd_config, Двухфакторная аутентификация, sudo, TOTP, Fail2ban.
Часто задаваемые вопросы
Что означает PAM в Linux?
PAM расшифровывается как Pluggable Authentication Modules, подключаемые модули аутентификации. Через эту систему службы login, su и sshd проверяют пользователей и применяют правила для учётных записей и сессий, используя модули, выбранные в файлах настройки.
Где находятся файлы настройки PAM?
В каталоге /etc/pam.d, по одному файлу на службу с именем в нижнем регистре, например /etc/pam.d/sshd. Если этот каталог существует, /etc/pam.conf игнорируется, а файлы поставщика могут лежать в /usr/lib/pam.d.
Чем отличаются required, requisite и sufficient?
При required об ошибке сообщается только после выполнения остальных модулей. При requisite ошибка возвращается сразу. При sufficient успех возвращается сразу, если ранее не было ошибки у required-модуля, а ошибка игнорируется.
Использует ли sshd PAM?
Да, если UsePAM равен yes. Тогда PAM обрабатывает парольную и keyboard-interactive аутентификацию и применяет проверки account и session ко всем способам входа, включая вход по публичному ключу.
Как не заблокировать себя при правке PAM?
Держите открытой сессию root, меняйте один файл за раз и проверяйте новым входом из другого терминала, не закрывая прежние. Некорректная строка, как правило, ломает аутентификацию, поэтому подготовьте консоль провайдера или режим восстановления.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab