Архитектура и основные концепции PAM
Компоненты PAM
Для успешного управления аутентификацией с использованием PAM важно понимать его основные компоненты. Каждый из них играет ключевую роль в работе системы.

1. Модуль
Модули PAM — это отдельные программные компоненты, которые реализуют конкретные задачи аутентификации или управления доступом. Они предоставляют различные методы проверки учетных данных или выполнения сопутствующих действий.
Модули, как правило, хранятся в директории /lib/security/
или /usr/lib/security/
.
Примеры модулей:
- pam_unix.so: выполняет проверку пароля, хранящегося в системных файлах
/etc/passwd
и/etc/shadow
. - pam_faillock.so: блокирует учетные записи после нескольких неудачных попыток входа.
- pam_ldap.so: позволяет использовать сервер LDAP для аутентификации.
- pam_google_authenticator.so: обеспечивает поддержку двухфакторной аутентификации (2FA).
Примеры настройки модулей
1. pam_unix.so: проверка пароля пользователя через локальные файлы.
Пример настройки в файле /etc/pam.d/common-auth
:
# Проверка пароля пользователя
auth required pam_unix.so nullok
Ключ nullok
разрешает вход пользователям без пароля, если это необходимо.
2. pam_faillock.so: защита от перебора паролей.
Пример настройки в файле /etc/pam.d/common-auth
:
# Блокировка после 3 неудачных попыток
auth required pam_faillock.so preauth silent deny=3 unlock_time=600
auth [default=die] pam_faillock.so authfail deny=3 unlock_time=600
Параметры:
deny=3
: блокировка после трех неудачных попыток.unlock_time=600
: автоматическая разблокировка через 10 минут.silent
: отключает вывод сообщений для пользователя.
3. pam_google_authenticator.so: двухфакторная аутентификация (2FA).
Пример настройки в файле /etc/pam.d/sshd
:
# Включение двухфакторной аутентификации
auth required pam_google_authenticator.so
Для использования этого модуля каждый пользователь должен настроить Google Authenticator с помощью команды google-authenticator
.
4. pam_ldap.so: аутентификация через LDAP.
Пример настройки в файле /etc/pam.d/common-auth
:
# Аутентификация через LDAP
auth sufficient pam_ldap.so
auth required pam_deny.so
Параметры определяются в файле /etc/ldap.conf
, где указываются сервер LDAP, базовые DN и другие параметры соединения.
2. Сервис
Сервис в контексте PAM — это приложение или служба, которая обращается к системе PAM для выполнения аутентификации. Примеры сервисов включают:
- sshd: процесс аутентификации для подключения по SSH.
- login: аутентификация при входе в систему через консоль.
- sudo: проверка личности пользователя при выполнении команд с повышенными привилегиями.
- passwd: изменение пароля пользователя.
Каждый сервис имеет свой конфигурационный файл в директории /etc/pam.d/
. Например, файл /etc/pam.d/sshd
содержит настройки аутентификации для сервиса SSH.
Пример: Для обеспечения двухфакторной аутентификации можно добавить модуль pam_google_authenticator.so
в файл /etc/pam.d/sshd
:
auth required pam_google_authenticator.so
3. Профиль
Профиль в PAM представляет собой набор правил и модулей, которые определяют, как именно обрабатывается аутентификация для конкретного сервиса. Каждый профиль соответствует файлу конфигурации в /etc/pam.d/
или общему файлу /etc/pam.conf
.
Профиль состоит из последовательных записей, каждая из которых включает:
- Тип модуля: определяет этап аутентификации (например,
auth
,account
,password
,session
). - Контрольный флаг: определяет, как обрабатываются результаты выполнения модуля (например,
required
,sufficient
,optional
). - Модуль: путь к библиотеке модуля (например,
pam_unix.so
). - Аргументы: дополнительные параметры, передаваемые модулю.
Пример: Профиль для сервиса SSH может выглядеть следующим образом (файл /etc/pam.d/sshd
):
# Аутентификация пользователя
auth required pam_unix.so
auth required pam_google_authenticator.so
# Проверка учетной записи
account required pam_nologin.so
account required pam_unix.so
# Настройка окружения
session required pam_limits.so
session optional pam_motd.so
Этот профиль выполняет проверку пароля пользователя, включает двухфакторную аутентификацию через Google Authenticator, проверяет, не отключен ли вход для учетной записи, и настраивает лимиты ресурсов.