Когда мы проводим аудит Linux-инфраструктуры клиента, почти всегда натыкаемся на одну и ту же картину: PAM либо вообще не трогали со времён установки системы, либо настроили как-то вкривь-вкось по инструкции пятилетней давности. Между тем именно PAM — это тот самый слой, через который проходит каждый вход на сервер.
PAM расшифровывается как Pluggable Authentication Modules. Буквально — подключаемые модули аутентификации. Идея элегантная: приложение не реализует логику проверки пользователя самостоятельно, а делегирует это фреймворку. SSH, sudo, login, su — все они работают через PAM. Хотите добавить двухфакторную аутентификацию? Подключили модуль. Нужна блокировка после 5 неудачных попыток? Ещё один модуль. При этом само приложение не меняется ни строчкой.
Появился PAM ещё в середине 90-х в Solaris. В Linux пришёл через Linux-PAM — открытую реализацию, которая сейчас стоит на каждом дистрибутиве. Debian/Ubuntu используют пакет libpam-runtime, RHEL/CentOS — pam.
Почему это критически важно с точки зрения безопасности? Без нормальной настройки PAM у вас: нет блокировки при брутфорсе, слабые пароли принимаются системой, нет 2FA, нет ограничений на ресурсы. Один из наших клиентов — небольшая торговая компания в Москве — получил инцидент именно из-за отсутствия pam_faillock. Атакующий методично перебирал пароли к SSH почти сутки, пока это не заметили в логах.
