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

Как использовать PAM для настройки аутентификации на Ubuntu 12.04 VPS


Статус: устарело

В этой статье рассматривается версия Ubuntu, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением Ubuntu 12.04, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию Ubuntu:

  • Обновите Ubuntu до версии 14.04.
  • Обновление Ubuntu 14.04 до Ubuntu 16.04
  • Перенесите данные сервера в поддерживаемую версию.

Причина:

Смотрите вместо этого:

Введение

PAM, или Pluggable Authentication Modules, — это уровень абстракции, который существует в Linux и Unix-подобных операционных системах и используется для обеспечения аутентификации между различными службами.

Созданная в качестве посредника между службами проверки подлинности и приложениями, требующими проверки подлинности пользователя, эта система позволяет этим двум уровням изящно интегрироваться и изменять модели проверки подлинности без необходимости переписывать код. Это достигается за счет использования модулей.

В этом руководстве мы рассмотрим систему PAM на Ubuntu 12.04 VPS, хотя большинство современных дистрибутивов Linux должны работать аналогичным образом.

За кулисами: гайки и болты PAM

Как работает подключаемая аутентификация

Многие обычные приложения, с которыми мы ежедневно взаимодействуем в среде Linux, фактически используют PAM под капотом.

Приложения должны быть написаны с поддержкой библиотеки PAM. Чтобы получить список приложений в вашей системе, которые каким-то образом могут использовать PAM, введите:

ldd /{,usr/}{bin,sbin}/* | grep -B 5 libpam | grep '^/'
/bin/login:
/bin/su:
/sbin/mkhomedir_helper:
/sbin/pam_tally2:
/usr/bin/chfn:
/usr/bin/chsh:
/usr/bin/passwd:
/usr/sbin/atd:
/usr/sbin/chpasswd:
/usr/sbin/cron:
/usr/sbin/newusers:
/usr/sbin/sshd:

Вы можете проверить конкретное приложение на наличие функций PAM, набрав:

<пред>

Если он что-то возвращает, он может использовать PAM.

Как видите, многие распространенные утилиты и инструменты фактически используют PAM в качестве посредника для выполнения своих задач.

Организация ПАМ

Версия PAM для Linux делит функциональность модулей на разные категории в зависимости от того, в какой части процесса они задействованы. Вот краткое объяснение категорий:

  • Функции аутентификации: Модули аутентификации проверяют учетные данные аутентификации пользователя. Это означает, что он проверяет, может ли пользователь предоставить действительные учетные данные.
  • Функции учетной записи: эти модули отвечают за определение того, имеет ли учетная запись, которая пытается войти, доступ к ресурсам, которые она запрашивает в данный момент. PAM позволяет указать элементы управления, которые могут запрещать или разрешать пользователям доступ на основе заранее определенных критериев.
  • Функции сеанса: эти модули устанавливают среду, которая будет создаваться и разрушаться после входа или выхода пользователя. Файлы сеанса могут определять, какие команды необходимо выполнить для подготовки среды.
  • Функции пароля: эти модули отвечают за обновление данных аутентификации различных служб. Если для службы необходимо изменить пароль, этот модуль может помочь в общении со службой и изменении правильных значений.

Первые две из этих категорий модулей будут использоваться каждый раз, когда программа успешно использует PAM для аутентификации. Модули сеанса будут запускаться при необходимости после первых двух. Доступ к модулям паролей осуществляется по требованию.

Что касается структуры каталогов, файлы конфигурации PAM хранятся в /etc/pam.d:

ls /etc/pam.d
atd       chsh            common-password                cron      other   su
chfn      common-account  common-session                 login     passwd  sudo
chpasswd  common-auth     common-session-noninteractive  newusers  sshd

В этом каталоге обычно есть файл конфигурации для каждого приложения, которое будет запрашивать аутентификацию PAM. Если приложение вызывает PAM, но связанный с ним файл конфигурации отсутствует, применяется «другой» файл конфигурации.

Внутри файлов конфигурации обычно есть вызовы для включения файлов конфигурации, которые начинаются с \common-. Это общие файлы конфигурации, правила которых должны применяться в большинстве ситуаций.

Модули, на которые есть ссылки в файлах конфигурации, можно найти с помощью этой команды:

ls /lib/*/security
pam_access.so     pam_keyinit.so    pam_permit.so      pam_tally.so
pam_debug.so      pam_lastlog.so    pam_pwhistory.so   pam_time.so
pam_deny.so       pam_limits.so     pam_rhosts.so      pam_timestamp.so
pam_echo.so       pam_listfile.so   pam_rootok.so      pam_umask.so
. . .

Посмотрите в этом каталоге, какие модули доступны для использования. Почти все модули имеют справочные страницы, в которых можно описать их использование.

Как PAM оценивает аутентификацию

Когда приложение запрашивает аутентификацию в системе PAM, PAM считывает соответствующий файл конфигурации PAM.

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

Основываясь на этих значениях, файл конфигурации затем решает, должен ли он вернуть вызывающей стороне сообщение «аутентификация прошла успешно» или отправить ему сообщение об ошибке аутентификации.

Конфигурации могут дать сбой при возврате первого сбоя от вызываемого модуля, или можно настроить альтернативные политики. Например, система может разрешить пользователям LDAP проходить аутентификацию. Если это не удается, он может свериться со списком локальных пользователей.

Строки каждого файла конфигурации оцениваются сверху вниз, если только оценка строки не приводит к пропуску остальной части файла конфигурации.

Как читать линии политики

Каждая строка в файле конфигурации содержит следующий синтаксис, где каждое поле разделено пробелом.

[service] type control module-path [module-arguments]

Файлы, расположенные в /etc/pam.d, исключают поле службы и вместо этого называют файл конфигурации именем приложения, которое он обслуживает. Если каталога pam.d нет, вместо него потребуется файл /etc/pam.conf, и соответствующее приложение должно быть указано в начале каждой строки.

Тип – это вид предоставляемой услуги. Это одна из четырех категорий, перечисленных выше (аутентификация, учетная запись, пароль, сеанс).

Элемент управления определяет действие, предпринимаемое при получении статуса возврата вызова модуля. Это может быть любое из этих значений (и может дополнительно использоваться более сложный синтаксис, который здесь не рассматривается):

  • required: Это приведет к сбою аутентификации, если вызов модуля приведет к сбою. Однако оставшиеся указанные модули по-прежнему вызываются.
  • requisite: Это ведет себя точно так же, как и требуется, но немедленно приводит к сбою аутентификации вместо вызова остальных модулей.
  • достаточно: этот элемент управления означает, что если эта строка завершится успешно (при условии, что требуемый модуль еще не вышел из строя), аутентификация немедленно вернется как успешная без запуска остальных модулей. Сбой в этой строке просто переходит к следующему вызову модуля.
  • необязательный: успех или неудача этих строк не имеют отношения к успеху или неудаче общей аутентификации, если только они не являются единственным вызовом модуля своего типа.
  • include: эта строка указывает, что строки данного типа должны быть прочитаны из другого сценария конфигурации. Это часто используется для ссылки на файлы \common-.
  • подстек: это похоже на включение, но сбои или успехи не вызывают выхода всего файла, а только подстека.

Module-path — это имя вызываемого модуля pam.

Аргументы модуля — это необязательные параметры, передаваемые модулю. Иногда это необходимо, чтобы модуль знал, какое действие следует предпринять в случае успеха.

Отдельные файлы могут также ссылаться на другие файлы, которые необходимо проверять, используя следующий синтаксис:

<пред>

При этом будет прочитан весь файл конфигурации, который отличается от типа элемента управления \include, который считывает только строки того же типа.

Изучение примеров конфигураций

Мы можем понять, как настроены клиенты, изучив некоторые примеры в каталоге /etc/pam.d.

Откройте файл, описывающий требования аутентификации для \atd, который является демоном планирования.

less /etc/pam.d/atd
auth	required		pam_env.so
@include common-auth
@include common-account
@include common-session-noninteractive
session		required	pam_limits.so

Первая строка вызывает модуль \pam_env. Если вы посмотрите на справочные страницы, то увидите, что этот модуль используется для установки некоторых переменных окружения, которые хранятся в /etc/security/pam_env.conf по умолчанию. Это «обязательно», что означает, что вся конфигурация завершится ошибкой, если этот модуль вернет «fail», но этого не должно происходить.

Следующие три строки читаются в файлах \common-auth, \common-account и \common-session-noninteractive для работы с соответствующими ролями.

Последняя строка вызывает модуль \pam_limits, который проверяет файл /etc/security/limits.conf или каталог /etc/security/limits.d/. , Среди прочего, это можно использовать для введения ограничений на количество пользователей, которые могут одновременно использовать службу.

Мы можем получить более полное представление обо всех проверках, просматривая файлы, на которые есть ссылки.

Проверка файла common-auth

Я удалил комментарии из файла, чтобы сжать информацию.

less /etc/pam.d/common-auth
auth	[success=1 default=ignore] 		pam_unix.so nullok_secure
auth	requisite						pam_deny.so
auth	required						pam_permit.so
auth	optional						pam_ecryptfs.so unwrap

Первую строку мы еще не обсуждали. Мы можем сказать, что он вызывает модуль «pam_unix», который обеспечивает стандартную аутентификацию unix, настроенную через файл «/etc/nsswitch.conf». Обычно это просто означает проверку файлов /etc/passwd и /etc/shadow, как и ожидалось.

Аргумент \nullok_secure, передаваемый модулю unix, указывает, что учетные записи без пароля допустимы, если информация для входа подтверждается файлом /etc/securetty.

Поле управления, которое имеет значение \[success=1 default=ignore], является странной частью этого примера. Оно заменяет упрощенные параметры \required, sufficient и т.д. и обеспечивает более точное управление.

В этом случае, если модуль возвращает успех, он пропускает следующую строку \1. Случай по умолчанию, который обрабатывает любое другое возвращаемое значение модуля, приводит к тому, что строка игнорируется и движется дальше.

Вторая строка имеет контрольное значение \requisite, означающее, что в случае сбоя вся конфигурация немедленно возвращает ошибку. Она также вызывает модуль \pam_deny, который возвращает ошибку для каждого вызова.

Это означает, что это всегда будет терпеть неудачу. Единственным исключением является случай, когда эта строка пропущена, что происходит при успешном возврате первой строки.

Третья строка является обязательной и вызывает модуль \pam_permit, который каждый раз возвращает успех. Это просто сбрасывает текущую запись \пройдено/не пройдено в этот момент, чтобы убедиться, что нет каких-то странных значений из более ранних.

Четвертая строка указана как необязательная и вызывает модуль «pam_ecryptfs» с параметром «unwrap». Это используется для распаковки парольной фразы с использованием предоставленного пароля, который затем будет использоваться для монтирования частного каталога. Это имеет значение только тогда, когда вы используете эту технологию, поэтому это необязательно.

Проверка файла общей учетной записи

Мы рассмотрим следующий файл, на который есть ссылка в конфигурации \atd. Я снова уберу комментарии для краткости.

less /etc/pam.d/common-account
account [success=1 new_authtok_reqd=done default=ignore] 	pam_unix.so
account	requisite		pam_deny.so
account	requisite		pam_permit.so

Почти все в этом файле аналогично файлу \common-auth. Первая строка вызывает проверку учетной записи с помощью модуля \pam_unix.

Модули могут выполнять различные функции в зависимости от «типа» вызова. Для вызовов учетной записи pam_unix проверяет, не истек ли срок действия учетной записи и не контролируется ограничениями входа на основе времени.

Если он проходит успешно, он пропускает вызов \pam_deny под ним, а затем обрабатывает правило разрешения в конце. Если, с другой стороны, это не удается, он перемещается вниз к строке отказа и завершается с ошибкой.

Проверка файла common-session-noninteractive

В следующем разделе представлены проверки сеанса для неинтерактивных программ или сред.

less /etc/pam.d/common-session-noninteractive
session [default=1] 		pam_permit.so
session	requisite			pam_deny.so
session	required			pam_permit.so
session	optional			pam_umask.so
session	required			pam_unix.so
session	optional			pam_ecryptfs.so unwrap

Первые три строки могут показаться странными. К этому моменту вы должны быть в состоянии понять ход выполнения программы, но они, вероятно, кажутся произвольными и избыточными. Первая строка всегда успешна, следующая строка пропускается, а третья строка всегда успешна.

Это связано с тем, что многие конфигурации PAM генерируются автоматически и могут быть изменены для обеспечения более существенных правил, когда станут доступны дополнительные методы аутентификации с учетом PAM. Это просто создает структуру, в которую можно вставить новые правила, чтобы позже повлиять на ход программы.

Четвертая строка является вызовом модуля \pam_umask и помечена как необязательная. Она устанавливает маску создания файла для сеанса. Она будет проверять несколько различных местоположений файлов, чтобы попытаться найти соответствующее расположение umask.

Пятая строка снова является обязательным вызовом модуля pam_unix. Поскольку это сеансовый тип звонка, unix-модуль опять же ведет себя по-другому. В данном случае он реализует протоколирование с помощью системных утилит.

Последняя строка снова является вызовом \pam_ecryptfs. Она выполняет ту же функцию, что и ее размещение в файле \auth.

Заключение

Сначала PAM может быть очень сложно освоить. Однако базовое понимание того, как работает система и как она связывает различные компоненты, необходимо для разработки разумных процедур аутентификации.

Хотя вы можете не понимать всего, что входит в настройку правил PAM, полезно знать, какие системы используются для защиты от незаконного использования компьютера.

Понимание PAM особенно важно при внедрении новой схемы аутентификации, такой как LDAP. Схемы аутентификации должны быть изменены для использования новой системы либо полностью, либо условно.

Джастин Эллингвуд