Поиск по сайту:

Как настроить и использовать 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. Если у вас есть какие-либо вопросы или комментарии, которыми вы хотите поделиться, воспользуйтесь формой обратной связи ниже.