Как настроить и использовать PAM в Linux
Linux-PAM (сокращение от Подключаемые модули аутентификации, которые произошли от архитектуры Unix-PAM) — это мощный набор общих библиотек, используемых для динамической аутентификации пользователя в приложениях (или службах). ) в системе Linux.
Он интегрирует несколько модулей аутентификации низкого уровня в API высокого уровня, который обеспечивает поддержку динамической аутентификации для приложений. Это позволяет разработчикам писать приложения, требующие аутентификации, независимо от базовой системы аутентификации.
Многие современные дистрибутивы Linux поддерживают Linux-PAM (далее «PAM») по умолчанию. В этой статье мы объясним, как настроить расширенный PAM в системах Ubuntu и CentOS.
Прежде чем продолжить, обратите внимание на следующее:
- Для системного администратора наиболее важным является понимание того, как файлы конфигурации PAM определяют соединение между приложениями (службами) и подключаемыми модулями аутентификации (PAM), которые выполняют фактические задачи аутентификации. Вам не обязательно понимать внутреннюю работу PAM.
- PAM может серьезно изменить безопасность вашей системы Linux. Ошибочная конфигурация может частично или полностью отключить доступ к вашей системе. Например, случайное удаление файла(ов) конфигурации в /etc/pam.d/* и/или /etc/pam.conf может заблокировать вас своя система!
Как проверить, что программа поддерживает PAM
Чтобы использовать PAM, приложение/программа должна «поддерживать PAM»; он должен быть написан и скомпилирован специально для использования PAM. Чтобы узнать, поддерживает ли программа PAM, проверьте, скомпилирована ли она с библиотекой PAM, с помощью команды ldd.
Например, СШД:
sudo ldd /usr/sbin/sshd | grep libpam.so
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)
Как настроить PAM в Linux
Основным файлом конфигурации для PAM является /etc/pam.conf, а каталог /etc/pam.d/ содержит файлы конфигурации PAM для каждое приложение/служба, поддерживающее PAM. PAM будет игнорировать файл, если каталог существует.
Синтаксис основного файла конфигурации следующий. Файл состоит из списка правил, записанных в одну строку (вы можете расширить правила, используя escape-символ “\ ”
), а комментариям предшествует “# ”
. отметки и продлиться до следующего конца строки.
Формат каждого правила представляет собой набор токенов, разделенных пробелами (первые три нечувствительны к регистру). Мы объясним эти токены в последующих разделах.
service type control-flag module module-arguments
где :
- service: фактическое имя приложения.
- тип: тип/контекст/интерфейс модуля.
- control-flag: указывает поведение PAM-API, если модуль не сможет успешно выполнить свою задачу аутентификации.
- модуль: абсолютное имя файла или относительный путь к PAM.
- module-arguments: список токенов, разделенных пробелами, для управления поведением модуля.
Синтаксис каждого файла в /etc/pam.d/ аналогичен синтаксису основного файла и состоит из строк следующего вида:
type control-flag module module-arguments
Это пример определения правила (без аргументов модуля), найденного в файле /etc/pam.d/sshd, которое запрещает вход в систему без полномочий root при /etc/nologin . существует:
account required pam_nologin.so
Понимание групп управления PAM и флагов управления
Задачи аутентификации PAM разделены на четыре независимые группы управления. Эти группы управляют различными аспектами запроса типичного пользователя на ограниченную услугу.
Модуль связан с одним из следующих типов групп управления:
- аккаунт: предоставляет услуги по проверке аккаунта: истек ли срок действия пароля пользователя?; разрешен ли этому пользователю доступ к запрошенной услуге?
- аутентификация: аутентификация пользователя и настройка учетных данных пользователя.
- пароль: отвечают за обновление паролей пользователей и работают вместе с модулями аутентификации.
- сеанс: управляйте действиями, выполняемыми в начале и в конце сеанса.
Загружаемые объектные файлы PAM (модули) должны располагаться в следующем каталоге: /lib/security/ или /lib64/security в зависимости от архитектура.
Поддерживаемые флаги управления:
- необходимое: сбой мгновенно возвращает управление приложению с указанием характера сбоя первого модуля.
- обязательно: все эти модули должны быть успешными, чтобы libpam вернул успех приложению.
- достаточно: учитывая, что все предыдущие модули завершились успешно, успех этого модуля приводит к немедленному и успешному возврату в приложение (сбой этого модуля игнорируется).
- необязательно: успех или неудача этого модуля обычно не записываются.
Помимо вышеперечисленных ключевых слов, есть еще два допустимых управляющих флага:
- include and substack: включает все строки заданного типа из файла конфигурации, указанного в качестве аргумента этого элемента управления.
Как ограничить root-доступ к службе SSH через PAM
В качестве примера мы настроим использование PAM для отключения доступа пользователя root к системе через SSH и программы входа в систему. Здесь мы хотим отключить доступ пользователя root к системе, ограничив доступ к службам входа и sshd.
Мы можем использовать модуль /lib/security/pam_listfile.so, который предлагает большую гибкость в ограничении привилегий определенных учетных записей. Откройте и отредактируйте файл целевой службы в каталоге /etc/pam.d/, как показано.
sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login
Добавьте это правило в оба файла.
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
Объяснение токенов в приведенном выше правиле:
- auth: тип модуля (или контекст).
- required: это управляющий флаг, который означает, что если модуль используется, он должен пройти проверку, иначе общий результат будет неудачным, независимо от состояния других модулей.
- pam_listfile.so: модуль, который позволяет запрещать или разрешать услуги на основе произвольного файла.
- onerr=succeed: аргумент модуля.
- item=user: аргумент модуля, который указывает, что указано в файле и что следует проверить.
- sense=deny: аргумент модуля, который определяет действие, которое необходимо предпринять, если элемент найден в файле. Если элемент НЕ найден в файле, запрашивается противоположное действие.
- file=/etc/ssh/deniedusers: аргумент модуля, который указывает файл, содержащий один элемент в каждой строке.
Далее нам нужно создать файл /etc/ssh/deniedusers и добавить в него имя root:
sudo vim /etc/ssh/deniedusers
Сохраните изменения и закройте файл, затем установите для него необходимые разрешения:
sudo chmod 600 /etc/ssh/deniedusers
С этого момента приведенное выше правило предписывает PAM обращаться к файлу /etc/ssh/deniedusers и запрещать доступ к SSH и службам входа в систему для любого указанного пользователя.
Как настроить расширенный PAM в Linux
Чтобы написать более сложные правила PAM, вы можете использовать допустимые control-flags в следующей форме:
type [value1=action1 value2=action2 …] module module-arguments
Где valueN соответствует коду возврата функции, вызванной в модуле, для которого определена строка. Поддерживаемые значения можно найти в онлайн-руководстве администратора PAM. Специальное значение — default, что подразумевает все значения valueN, не упомянутые явно.
действиеN может принимать одну из следующих форм:
- игнорировать: если это действие используется со стеком модулей, статус возврата модуля не будет учитываться в коде возврата, который получает приложение.
- плохо: указывает, что код возврата следует рассматривать как признак сбоя модуля. Если этот модуль выйдет из строя первым в стеке, его значение статуса будет использоваться для всего стека.
- die: эквивалентно плохому, но может привести к прекращению работы стека модулей и немедленному возврату PAM в приложение.
- ok: это указывает PAM, что системный администратор считает, что этот код возврата должен непосредственно вноситься в код возврата полного стека модулей.
- done: эквивалентно ok, но может завершить работу стека модулей и PAM немедленно вернется в приложение.
- N (целое число без знака): эквивалент ok, но может переходить через следующие N модули в стеке.
- Сброс: это действие очищает всю память о состоянии стека модулей и перезапускает его со следующим стековым модулем.
Каждое из четырех ключевых слов: обязательно; реквизит; достаточный; и необязательно иметь эквивалентное выражение в терминах синтаксиса [...]
, которое позволит вам писать более сложные правила, а именно:
- обязательно: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
- необходимое: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
- достаточно: [success=done new_authtok_reqd=done default=ignore]
- необязательно: [success=ok new_authtok_reqd=ok default=ignore]
Ниже приведен пример современной системы CentOS 7. Давайте рассмотрим эти правила из PAM-файла /etc/pam.d/postlogin:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session [default=1] pam_lastlog.so nowtmp showfailed
session optional pam_lastlog.so silent noupdate showfailed
Вот еще один пример конфигурации из PAM-файла /etc/pam.d/smartcard-auth:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password required pam_pkcs11.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
Дополнительную информацию см. на странице руководства pam.d:
man pam.d
Наконец, подробное описание синтаксиса файла конфигурации и всех модулей PAM можно найти в документации Linux-PAM.
Краткое содержание
PAM — это мощный высокоуровневый API, который позволяет программам, использующим аутентификацию, аутентифицировать пользователей в приложениях в системе Linux. Это мощный инструмент, но его очень сложно понять и использовать.
В этой статье мы объяснили, как настроить расширенные функции PAM в Ubuntu и CentOS. Если у вас есть какие-либо вопросы или комментарии, которыми вы хотите поделиться, воспользуйтесь формой обратной связи ниже.