Руководство администратора pam

Состояние перевода: На этой странице представлен перевод статьи PAM. Дата последней синхронизации: 22 июня 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Linux Pluggable Authentication Modules (PAM) — фреймворк для аутентификации пользователей в системе. Со страницы проекта:

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

В этой статье объясняются базовые настройки Arch Linux по умолчанию для PAM для аутентификации локальных и удалённых пользователей. Внесение изменений в настройки по умолчанию описывается в отдельных статьях.

Установка

Пакет pam является зависимостью мета-пакета base и таким образом уже установлен в Arch по умолчанию. Модули PAM устанавливаются в /usr/lib/security.

В репозиториях доступны дополнительные пакеты, примеры есть в разделе #Руководства по настройке.

Настройка

PAM использует несколько путей в /etc; список стандартных файлов настроек можно посмотреть с помощью команды pacman --query --list pam | grep /etc. Они настраивают либо #Параметры безопасности для модулей, либо #Базовый стек PAM.

Параметры безопасности

Каталог /etc/security содержит системные настройки переменных, предлагаемых методами аутентификации. При базовой установке он заполняется стандартными файлами конфигурации из апстрима.

Arch Linux не предоставляет специфичную для дистрибутива конфигурацию этих файлов. Например, файл /etc/security/pwquality.conf можно использовать для определения общесистемных значений по умолчанию для контроля качества паролей. Однако для его использования нужно в #Базовый стек PAM включить модуль pam_pwquality.so, который по умолчанию отключен.

Некоторые возможности описаны в разделе #Настройка параметров безопасности.

Базовый стек PAM

Настройки в каталоге /etc/pam.d/ связывают приложения с определёнными системными схемами аутентификации. Во время установки базовой системы в этот каталог добавляются настройки:

  • из пакета pambase, который содержит базовый стек специфичной для Arch Linux конфигурации PAM для использования приложениями, и
  • из других базовых пакетов. Например, util-linux добавляет конфигурацию для программы login и других программ, пакет shadow добавляет стандартные настройки Arch Linux для защиты и изменения базы данных пользователей (смотрите Пользователи и группы).

Различные файлы настроек базовой установки связываются вместе и складываются во время выполнения. Например, при входе локального пользователя в систему программа login считывает политику system-local-login, которая, в свою очередь, считывает другие политики:

/etc/pam.d/
login -> system-local-login -> system-login -> system-auth

Другие приложения могут применять другие политики. Например, openssh устанавливает свою собственную PAM-политику sshd:

/etc/pam.d/
sshd -> system-remote-login -> system-login -> system-auth

Следовательно, выбор файла для настройки в стеке имеет значение. В приведённом выше примере можно затребовать специальный метод аутентификации или только для sshd путём изменения одноимённого файла, или для всех удалённых входов путём изменения файла system-remote-login; оба изменения не повлияют на локальные входы. Изменение настроек system-login или system-auth повлияет и на локальные, и на удалённые входы.

Как и в случае с sshd, любое приложение, использующее pam, должно установить свою политику в /etc/pam.d, чтобы интегрироваться в стек PAM и полагаться на него должным образом. Если приложение этого не сделает, будет применяться политика по умолчанию /etc/pam.d/other, запрещающая вход и выводящая предупреждение в журнал.

Совет: PAM динамически связывается с программой во время выполнения. Например:

$ ldd /usr/bin/login | grep pam
libpam.so.0 => /usr/lib/libpam.so.0 (0x000003d8c32d6000)
libpam_misc.so.0 => /usr/lib/libpam_misc.so.0 (0x000003d8c30d2000)

Программа login использует PAM и, следовательно, должна иметь свой файл политики.

Справочные страницы pam(8) и pam.d(5) описывают стандартизированное содержимое файлов настроек. В частности, они объясняют четыре группы PAM: account, auth, password и session, а также управляющие значения, которые могут быть использованы для настройки стека и поведения модулей.

Кроме того, в /usr/share/doc/Linux-PAM/index.html устанавливается обширная документация установлена, которая, помимо различных руководств, содержит man-страницы для каждого из стандартных модулей.

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

Совет: Изменения не действуют для уже аутентифицированных пользователей. Способ работы с PAM — войти в систему (желательно локально) на тестовой машине и вести разработку, постоянно поддерживая свой сеанс, одновременно проверяя результаты от имени другого пользователя на другой консоли.

Руководства по настройке

В этом разделе представлен обзор статей, описывающих, как изменять конфигурацию PAM и как интегрировать специальные новые модули PAM в стек PAM. Обратите внимание, что man-страницы для модулей обычно не имеют расширения .so в своём названии.

Настройка параметров безопасности

В следующих разделах описаны примеры изменения параметров PAM по умолчанию:

  • Безопасность#Требования к паролю с pam_pwquality
показывает, как включить требование использования сложных паролей с помощью pam_cracklib.so.
  • Безопасность#Блокировка из-за неудачных попыток входа
показывает, как настроить ограничение на число попыток входа с помощью pam_faillock.so.
  • Безопасность#Доступ только для конкретных пользователей
ограничивает вход пользователей с помощью pam_wheel.so.
  • Realtime process management#Configuring PAM и Безопасность#Ограничение на количество процессов
подробно о том, как настроить ограничения процессов с помощью pam_limits.so.
  • Переменные окружения#С помощью pam_env
показывает примеры установки переменных окружения с помощью pam_env.so.

Настройка стека PAM и модулей

Следующие статьи описывают, как изменить #Базовый стек PAM для специальных случаев использования.

Модули PAM, доступные в официальных репозиториях:

  • pam_mount
подробные примеры использования pam_mount.so для автоматического монтирования зашифрованных каталогов при входе пользователя в систему.
  • ECryptfs#Auto-mounting
использует pam_ecryptfs.so для автоматического монтирования зашифрованного каталога.
  • Dm-crypt/Mounting at login
показывает, как использовать pam_exec.so для выполнения пользовательского скрипта при входе.
  • Интеграция Active Directory#Настройка PAM
использует pam_winbind.so и pam_krb5.so для аутентификации пользователей через службы Active Directory (LDAP, Kerberos).
  • LDAP authentication и раздел LDAP authentication#NSS and PAM
статья об интеграции LDAP-клиента или аутентификации на стороне сервера с помощью pam_ldap.so.
  • YubiKey#Linux user authentication with PAM
описывает использование U2F (pam_u2f.so) и проприетарной реализации Yubico OTP (pam_yubico.so) от YubiKey с PAM.
  • pam_oath
показывает пример реализации программной двухфакторной аутентификации с помощью pam_oath.so.
  • fprint
использует pam_fprintd.so для настройки аутентификации по отпечаткам пальцев.

Модули PAM, доступные в пользовательском репозитории Arch:

  • pam_autologin
сохраняет имя пользователя и пароль для автоматического входа в систему.
  • pam_usb
показывает, как настроить pam_usb.so для использования USB-устройства для (опционально двухфакторной) аутентификации.
  • Ключи SSH#pam_ssh
использует pam_ssh.so для аутентификации в качестве удалённого пользователя.
  • pam_abl
объясняет, как можно использовать pam_abl.so для ограничения атак перебором через ssh.
  • EncFS
настройка автоматического монтирования с помощью pam_encfs.so.
  • Google Authenticator (Русский)
показывает, как настроить двухфакторную аутентификацию с помощью pam_google_authenticator.so.
  • Very Secure FTP Daemon#PAM with virtual users
объясняет, как настроить FTP chroot с помощью pam_pwdfile.so для аутентификации пользователей без локальной системной учётной записи.

Дополнительные пакеты PAM

Помимо упомянутых выше пакетов, в пользовательском репозитории Arch есть дополнительные модули и инструменты PAM.

  • Pamtester — Программа для тестирования подключаемых модулей аутентификации (PAM)
https://pamtester.sourceforge.net/ || pamtesterAUR

Хотя в AUR есть тег PAM, не все доступные пакеты его содержат. Поэтому может понадобиться поиск по описанию пакета.

Смотрите также

  • linux-pam.org — сайт проекта
  • Understanding and configuring PAM — вводная статья

Linux-PAM – это богатая коллекция общих модулей, которые обеспечивают интерактивную аутентификацию пользователя для программ (или служб) в системе Linux.

Linux-PAM – это аббревиатура Pluggable Authentication Modules, которая была разработана на основе дизайна Unix-PAM.

Она объединяет многочисленные низкоуровневые модули аутентификации с высокоуровневым API для обеспечения динамической аутентификации приложений.

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

Linux-PAM (также известный как “PAM”) часто поддерживается по умолчанию в современных вариантах Linux.

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

Вам не нужно постигать внутреннюю работу PAM.

PAM может существенно изменить безопасность вашей Linux-системы.

Неправильные настройки могут полностью или частично запретить доступ к вашей машине.

Содержание

  1. Интерфейсы Linux-PAM
  2. Как проверить программу Linux-PAM
  3. Как настроить программу Linux-PAM на Ubuntu
  4. Заключение

Интерфейсы Linux-PAM

Четыре различные группы управления решают задачи аутентификации PAM по отдельности.

Когда обычный пользователь запрашивает ограниченный сервис, эти группы обрабатывают различные части запроса.

  • Account: Этот модуль используется для определения того, является ли предоставленная учетная запись действительной в текущих обстоятельствах. В этой категории проверяется несколько факторов, включая срок действия учетной записи, время суток или наличие у пользователя авторизации на соответствующую услугу.
  • Authentication: В этом модуле личность пользователя подтверждается после проверки достоверности всей основной информации. Личность пользователя проверяется путем предоставления логина или любой другой части данных, которые должны быть известны только ему.
  • Password: модуль аутентификации должен работать в сотрудничестве с этим модулем, который помогает пользователю в обновлении паролей. Оба резона обеспечивают возможность применения надежных паролей.
  • Session: Этот модуль описывает действия, которые должны быть предприняты в начале и в конце сеансов, и он является не менее важным из модулей, составляющих порядок, с помощью которого общая стратегия PAM выполняет поставленную задачу. Сессия начинается, когда человек успешно прошел аутентификацию.

Как проверить программу Linux-PAM

Приложение или программа должны быть “PAM aware”, или специально собраны и скомпилированы для использования PAM.

Используйте команду “ldd”, чтобы узнать, была ли программа собрана с использованием библиотеки PAM, чтобы определить, является ли она “PAM-aware” или нет.

Когда выполняется команда “ldd /bin/su”, файл “libpam.so” выделяется во второй строке, поддерживающей запрос.

Проверка показана на скриншоте ниже:

Каталог /etc/pam.d/ содержит конфигурацию для LINUX-PAM.

Перейдите в каталог PAM, введя следующую команду в терминале вашей операционной системы Linux:

Предыдущий скрин показывает, что можно изучить содержимое, введя команду “ls” в каталоге PAM.

Как настроить программу Linux-PAM на Ubuntu

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

Результат обрабатывается PAM с помощью управляющих флагов.

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

Имеется четыре предварительно настроенных управляющих флага:

  • required: Чтобы аутентификация прошла успешно, ответ пакета должен быть успешным. Пользователь не будет предупрежден о неудачной попытке на этом этапе, пока все тесты пакета, использующие этот интерфейс, не завершат свою работу.
  • requisite: Согласно аргументам, если это сломается, то сломается и все остальное. PAM также будет завершен, и будет доставлено уведомление о неудаче.
  • sufficient: Если этот модуль работает успешно и все предыдущие необходимые модули также успешны, дальнейшие необходимые модули не вызываются.
  • optional: Указывает, что модуль не является существенным для того, чтобы запрос пользователя на обслуживание был успешным или неуспешным. Его значение учитывается только при отсутствии убедительных успехов или ошибок более ранних или более поздних модулей.
  • include: При совпадении параметра соответствия каждая строка файла конфигурации извлекается с помощью этого управляющего флага.

Просто введите следующую команду внутри каталога PAM:

Вы можете увидеть термины, которые мы описали ранее в следующем PAM-файле:

При написании основной конфигурации следует руководствоваться следующими общими рекомендациями:

  • Service: реальное имя программы
  • Type: интерфейс/контекст/тип модуля
  • Control-Flag: если модуль не выполнит свою задачу аутентификации, флаг управления определяет, как будет вести себя PAM-API
  • Module: Абсолютное или относительное имя пути к файлу PAM
  • Module-argument: Параметры модуля – это список маркеров, которые могут быть использованы для влияния на функциональность модуля

Если вы хотите предотвратить подключение пользователей root к любой системе по SSH, необходимо ограничить доступ к службе sshd.

Несколько модулей ограничивают доступ и предоставляют привилегии, но мы можем использовать невероятно адаптируемый и многофункциональный модуль /lib/security/pam listfile.so.

Перейдите в каталог /etc/pam.d/, откройте файл целевой службы и внесите необходимые изменения следующим образом:

sudo vim /etc/ssh/deniedusers

Ранее тип модуля был auth (или context).

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

Средства для разрешения или запрета сервисов на основе любого файла предоставляет модуль PAM listfile.so. onerr=succeed является аргументом модуля. item=user – аргумент модуля, описывающий содержимое файла, который необходимо проверить.

Опция модуля sense=deny указывает на действие, которое будет предпринято, если элемент находится в файле.

В противном случае запрашивается противоположное действие.

Файл с одним элементом в строке задается опцией модуля file=/etc/ssh/deniedusers.

После внесения необходимых разрешений сохраните изменения и закройте файл:

  sudo chmod 600 /etc/ssh/denieduser

После введения предыдущего правила PAM получит указание проверить файл /etc/ssh/deniedusers и запретить всем перечисленным пользователям использовать службы SSH и входа в систему.

Заключение

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

Он обладает большими возможностями, но он также довольно сложен для понимания и эксплуатации.

Для приложений и служб, работающих под Linux, PAM предлагает поддержку динамической аутентификации.

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

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

см. также:

  • Как настроить и использовать PAM в Linux
  • Apache pam Astra linux
  • 🐧 20 полезных функций и инструментов безопасности для администраторов Linux
  • 🐧 Руководство для начинающих по системным логам в системах Linux
  • 🐧 Советы по обеспечению безопасности сервера Linux для новичков
  • 🐧 Интеграция серверов Linux с Active Directory с помощью Samba, Winbind и Kerberos

Библиотеки PAM или Pluggable Authentication Modules — это набор компонентов, предоставляющих программный интерфейс для авторизации пользователей в Linux. Возможно вы уже сталкивались с PAM, когда хотели запустить какую либо графическую программу от имени суперпользователя без использования sudo. Но применение этих библиотек намного шире. Они используются утилитой login и менеджером входа gdm при входе в системе, утилитой ssh при удалённом подключении по SSH, а также другими службами где нужна аутентификация.

Этот механизм появился примерно в 1997 году и с тех пор дошёл до нашего времени практически неизменным. Конечно, были дописаны новые модули, но суть работы осталась такая же как изначально. В этой статье мы рассмотрим как выполняется настройка PAM в Linux.

Основа безопасности Linux — это аутентификация пользователей и их права. Если бы не было библиотек PAM, то разработчику каждой программы пришлось бы реализовать самому проверку логина и пароля пользователя, а также его прав, может ли он получить доступ к тому или иному ресурсу или нет. Чтобы этого не делать был создан набор библиотек, который поддерживает различные способы аутентификации. Для различных служб нужны разные способы аутентификации, это может быть логин и пароль Unix, открытый ключ, Fingerprint ключа или что-то ещё, и всё это поддерживается в PAM. Давайте рассмотрим как работает PAM на примере авторизации в текстовой консоли Linux с помощью утилиты login:

  • Утилита login запрашивает у пользователя логин и пароль, а затем делает запрос к libpam, чтобы выяснить действительно ли это тот пользователь, за которого он пытается себя выдать. Для проверки локального логина и пароля используется модуль pam_unix, затем результат возвращается в программу.
  • Затем утилита спрашивает у libpam может ли этот пользователь подключаться. Библиотека использует тот же модуль, чтобы определить не истёк ли пароль пользователя. Другие модули могут проверять права доступа основанные на имени хоста или времени.
  • Если пароль пользователя истёк он не сможет войти в систему, либо ему предложат сменить пароль прямо сейчас.
  • Если всё хорошо, то процесс входа продолжается, и модуль pam_unix записывает временную метку входа в файл /var/log/wtmp, затем запускается командная оболочка.
  • Если на каком-либо этапе входа возникла ошибка, сообщение о ней записывается в файл журнала /var/log/secure.
  • При выходе с системе тот же модуль unix_pam записывает временную метку в файл /var/log/wtmp.

Теперь рассмотрим как выполняется настройка PAM Linux.

Как настроить PAM в Linux

Все конфигурационные файлы PAM для различных приложений находятся в папке /etc/pam.d. Давайте посмотрим на конфигурационный файл для утилиты sudo:

cat /etc/pam.d/sudo

Каждая строчка файла состоит из нескольких полей:

тип обязательность модуль параметры

Разберем подробнее:

  • Первое поле — тип, определяет какой тип запроса к PAM надо выполнить. Существует четыре различных типа запроса auth (проверка данных входа, например, логина и пароля), account (проверка не истёк ли пароль пользователя), password (обновление пароля), и session (обслуживание сессии, например, логгирование и монтирование папок).
  • Второе поле определяет как нужно интерпретировать результат, возвращённый модулем PAM. Доступно тоже несколько возможных вариантов: required (тест должен быть обязательно пройден, но следующие строки тоже будут проверяться), requisite (аналогично required, только если тест не проходит, то следующие строки уже не проверяются), sufficient (противоположно requisite, если тест проходит, то следующие строки уже не проверяются), optional (проваленные тесты игнорируются).
  • Третье и четвертое поле — это название библиотеки модуля и её параметры. Всё это надо выполнить для выполнения теста авторизации или действия.

Кроме того, существуют директивы include, которые включают строки из других файлов так, как будто они были написаны в этом файле. Файл настройки sudo кажется совсем коротким, но в него включаются другие файлы. Давайте посмотрим ещё на файл /etc/pam.d/common-auth:

cat /etc/pam.d/common-auth

Здесь можно видеть более расширенный синтаксис параметра обязательности. Он позволяет лучше понять как всё это работает. Давайте его рассмотрим:

[значение1=действие1 значение2=действие2 …]

Модули PAM могут возвращать около 30-ти значений и они зависят от выбранного типа (account/auth/session…), вот они все: success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete и default. Последнее, default, означает все поля, которые явно не заданы.

В качестве действия могут быть указанны такие значения:

  • ignore — не влияет на общий код возврата в приложение;
  • bad — расценивать это значение как свидетельство сбоя модуля;
  • die — аналогично bad, только сразу возвращать управление в приложение;
  • ok — значение должно влиять на общий возвращаемый результат, переопределяет общий результат если он раньше был успешен, но не отменяет сбой;
  • done — аналогично ok, только управление сразу возвращается приложению.

Таким образом, те четыре варианта обязательности, которые мы рассматривали выше можно описать вот так:

  • required: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • requisite: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • sufficient: [success=done new_authtok_reqd=done default=ignore]
  • optional: [success=ok new_authtok_reqd=ok default=ignore]

Здесь:

  • success — модуль вернул состояние успешно, поскольку значение ok, это состояние будет учтено если ни один предыдущий модуль не дал сбоя;
  • new_authtok_reqd — модуль сообщает, что пароль пользователя желательно обновить;
  • ignore — модуль просит игнорировать его результат, игнорируем;
  • default — все остальные возвращаемые значение расцениваем как сбой.

Обратите внимание. что модуль возвращает только одно определенное значение и уже к нему применяется действие.

Чтобы закрепить всё это на практике давайте рассмотрим как запретить авторизацию от имени пользователя losst на компьютере с помощью PAM. Для этого можно воспользоваться модулем /lib/security/pam_listfile.so. Он позволяет ограничить доступ для пользователей на основе файла со списком. Откройте файл /etc/pam.d/sshd и добавьте туда такую строчку:

sudo vi /etc/pam.d/sshd

auth required pam_listfile.so
onerr=succeed item=user sense=deny file=/etc/denyusers

Здесь мы используем тип запроса auth, обязательность required и указанный выше модуль. Вот его опции и их значения:

  • onerr=succeed — если возникает ошибка, доступ разрешить;
  • item=user — указывает, что в файле конфигурации находятся логины пользователей;
  • sense=deny — действие, если логин пользователя найден в файле;
  • file=/etc/denyusers — файл с логинами пользователей, для которых надо запретить доступ.

Теперь в файл /etc/denyusers добавьте имя пользователя losst, естественно, такой пользователь должен существовать в системе. Затем попробуйте перейти в любую консоль и авторизоваться от его имени. У вас ничего не выйдет, а в логе /var/log/security или /var/log/auth.log будет сообщение об ошибке:

А если эту строчку закомментировать, то всё снова заработает.

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

PAM или Pluggable Authentication Modules (подключаемые модули аутентификации) — это модульный подход к системе аутентификации. Они позволяют сторонним службам предоставлять модуль аутентификации для обеспечения доступа к службе для систем с поддержкой PAM. Службы, использующие PAM для аутентификации, могут использовать их сразу же, без необходимости дополнительной пересборки.

На сервере Linux PAM (Pluggable Authentication Modules) могут использоваться для управления аутентификацией (как часть управления предоставления доступа). При использовании PAM сервисам нет необходимости поддерживать собственную систему аутентификации. Вместо этого они полагаются на модули PAM, доступные в системе. Любой сервис при необходимости может использовать собственную конфигурацию PAM, хотя в большинстве случаев аутентификация выполняется одинаково во множестве сервисов. Вызывая модули PAM, сервисы могут поддерживать двухфакторную аутентификацию «из коробки», сразу же использовать централизованные хранилища аутентификационных средств и многое другое.

PAM предоставляют гибкую модульную архитектуру для следующих сервисов:

  • Управление аутентификацией — проверяет, существует ли пользователь, под которым пытаются зайти.
  • Управление учётными записями — проверяет, что пароль пользователя не истёк или имеет ли пользователь право обращаться к определённому сервису.
  • Управление сеансами — выполняет определённые задачи во время входа или выхода пользователя из системы (аудит, монтирование файловых систем и так далее).
  • Управление паролями — предлагает интерфейс для сброса пароля и тому подобное.

При работе с PAM администраторы очень быстро поймут принципы, по которым функционирует PAM.

Во-первых, это «независимость от бэк-энда». Приложениям, поддерживающим PAM, нет необходимости учитывать низкоуровневую логику, чтобы работать с бэк-эндами, например, базами данных, службой LDAP, файлами паролей, веб-службами с поддержкой WS-Security или другими ещё не изобретёнными бэк-эндами. Используя PAM, приложения отделяют логику работы бэк-энда от своей. Всё, что им нужно сделать — это вызвать функцию PAM.

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

Последним принципом, являющимся также частью названия PAM, является «подключаемая архитектура». Когда необходимо интегрировать новый бэк-энд, всё, что нужно сделать администратору — это установить библиотеку для этого бэк-энда (большинство модулей используют один файл настроек). Начиная с этого момента, модуль становится доступен для использования приложениями. Администраторы могут настроить аутентификацию для использования этого бэк-энда и просто перезапустить приложение.

Приложения, для которых необходимо использование PAM, линкуются с библиотекой PAM (libpam) и могут вызывать нужные функции работы с указанными выше службами. Кроме этого, в приложении не нужно реализовывать ничего специфичного для работы с этими сервисами, так как эту задачу на себя берёт PAM. И когда пользователь захочет аутентифицироваться, скажем, в веб-приложении, то это приложение вызывает PAM (передавая ему идентификатор и, возможно, пароль или запрос) и проверяет возвращаемые данные, чтобы принять решение, аутентифицировался ли пользователь и имеет ли он доступ к приложению. Внутренней задачей PAM является определение, где необходимо аутентифицировать пользователя (например, в центральной базе данных или на LDAP-сервере).

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

Другой важной особенностью PAM является то, что они поддерживают объединение в цепочки нескольких модулей. Пример конфигурационного файла PAM для некоего сервиса:

# Аутентификация
auth         required        pam_env.so
auth         required        pam_ldap.so
# Управление учётными записями
account      required        pam_ldap.so
# Управление паролями
password     required        pam_ldap.so
# Управление сеансами
session      optional        pam_loginuid.so
session      required        pam_selinux.so close
session      required        pam_env.so
session      required        pam_log.so level=audit
session      required        pam_selinux.so open multiple
session      optional        pam_mail.so

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

Каждый из этих разделов в файле вызывает один или несколько модулей PAM. Например, pam_env.so устанавливает переменные среды, которые могут быть использованы последующими модулями. Код, возвращаемый модулем PAM, вместе с управляющими директивами (в данном примере — required или optional) позволяет PAM решать, что делать дальше.

PAM поддерживают следующие управляющие директивы:

  • required — Указанный модуль PAM должен вернуть код успеха для того, чтобы весь сервис (например, аутентификация) был успешен. Если модуль PAM вернёт код неудачи, остальные модули будут всё равно вызваны (хотя уже точно известно, что сам сервис будет недоступен).
  • requisite — Указанный модуль PAM должен вернуть код успеха для того, чтобы весь сервис был доступен. В отличие от required, если модуль PAM вернёт код неудачи, директива сразу же завершится, и сам сервис будет недоступен.
  • sufficient — Если указанный модуль PAM вернёт код успеха, весь сервис будет разрешен. Оставшиеся модули PAM не будут проверяться. Однако, если модуль PAM вернёт код неудачи, оставшиеся модули пройдут проверку, а неудача данного модуля не будет приниматься во внимание.
  • optional — Код успеха или неудачи указанного модуля PAM будет иметь значение, если это единственный модуль в стеке.

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

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

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

Это же относится к тому месту, где располагаются модули PAM (/lib/security или /lib64/security).

Помимо файлов-сценариев для некоторых модулей могут использоваться дополнительные файлы конфигурации. Все они расположены в каталоге /etc/security и каждый файл предназначен для конкретной группы настроек.

  • time.conf — Здесь вы сможете ограничить время доступа пользователей с различных терминалов к различным сервисам. Например, запретить входить в систему с первой виртуальной консоли администратору во время выходных. Эти настройки обслуживает модуль pam_time и, соответственно, если вы желаете, чтобы ваши ограничения возымели действие модуль должен быть прописан в соответствующем сценарии.
  • pam_env.conf — Здесь можно ограничить возможности в изменении отдельных переменных среды пользователями. Работает под руководством модуля pam_env.
  • limits.conf — Здесь можно индивидуально или для группы ограничить: размер core-файла, максимальный допустимый размер файла, максимальное количество открытых файлов, запущенных процессов, сколько раз можно одновременно зайти в систему и т.д. Руководящий модуль pam_limits.
  • access.conf — Так как PAM имеет средства аутентификации по сети, то подобные настройки являются полезными ибо контролируется не только кто может или не зайти, но и откуда. Контролируется pam_access.
  • group.conf — Можно указать какой группе будет принадлежать служба запущенная определенным пользователем в определенное время с определенного терминала. Контролируется pam_time и pam_group.
  • console.perms — Несколько выбивается своим названием, но не функциями. Здесь определяются права, получаемые привилегированными пользователями к консоли во время входа в систему и возвращаемые при выходе. Модуль pam_console.

Список модулей:

  • pam_cracklib: Тип password. Проверяет ваш пароль на стойкость, не является ли он, например, палиндромом (примечание — это не обязательно при использовании модуля pam_unix). Полезен для программ, задающих пароли. Полезные параметры:
    retry=N — дается N попыток на исправление ошибки,
    diffok=N — должно быть изменено минимум N символов при смене пароля,
    minlen=N — минимальный размер пароля,
    dcredit=N ucredit=N lcredit=N ocredit=N — в пароле должно присутствовать минимум N цифр, строчных, прописных букв и других символов.
  • pam_deny: Тип любой. Всегда перекрывает доступ.
  • pam_env: Тип auth. Контролирует сохранность переменных среды. Полезный параметр conffile=S — задает альтернативное название файла конфигурации.
  • pam_ftp: Тип auth. Предназначен для организации анонимного доступа. То есть, получив имя пользователя «anonymous», ждет в качестве пароля что-то похожее на его почтовый адрес. Полезные параметры:
    ignore — не обращать внимание похож ли пароль на почтовый адрес,
    users=XXX,YYY — позволяет анонимный вход для пользователей из этого списка.
  • pam_group: Тип auth. Предназначение ясно из описания конфигурационного файла group.conf.
  • pam_lastlog: Тип session. Сообщает о времени и месте входа в систему. Обновляет /var/log/wtmp файл. Полезные параметры:
    nodate, noterm, nohost, silent — не выводить в сообщении даты, терминала, машины или вообще ничего,
    never — если пользователь никогда ранее не появлялся, то его приветствуют.
  • pam_limits: Тип session. Предназначение указано выше при описании файла limits.conf. Полезный параметр:
    conf=S — альтернативное имя конфигурационного файла.
  • pam_listfile: Тип auth. Предназначен для организации доступа на основе конфигурационных файлов-списков например /etc/ftpaccess. Для примера смотрите соответствующие файлы сценариев. Возможные параметры: on err=succeed|fail; sence=allow|deny; file=filename; item=user|tty|rhost|ruser|group|shell apply=user|@group. Первый параметр задает возвращаемое значение в случае неудачного поиска. Второй — в случае удачного поиска. Третий — имя файла со списком. Четвертый — тип элемента в списке. Последний вносит дополнительные ограничения, если тип объявлен tty, rhost или shell.
  • pam_mail: Тип auth. Сообщается о наличии почты, если таковая имеется. Полезные параметры:
    dir=S — путь к каталогу почтовых очередей,
    noenv — не устанавливать переменную среды MAIL,
    close — сообщать, если есть почта у пользователей с аннулированными бюджетами,
    nopen — не печатать какой-либо почтовой информации, если пользовательский бюджет только что заведен.
  • pam_nologin: Тип auth. Стандартная реакция на наличие файла /etc/nologin. Когда он присутствует, в систему может зайти только root, а остальным будет выдано на экран содержимое этого файла.
  • pam_permit: Тип любой. Использование данного модуля ОПАСНО и применимо только в критических ситуациях. Всегда дает допуск.
  • pam_pwdb: Тип любой. Замещает модули серии pam_unix… . Использует интерфейс библиотеки libpwdb (пользовательские базы данных), что повышает независимость системы аутентификации от способа хранения пользовательских данных (NIS или passwd или shadow). Полезные параметры:
    nullok — можно использовать пустые пароли,
    md5, shadow, bigcrypt — различные способы шифрования пароля.
  • pam_radius: Тип session. Позволяет осуществлять аутентификацию через RADIUS сервер.
  • pam_rhosts_auth: Тип auth. Механизм работы этого модуля основывается на анализе содержимого файлов hosts.equiv и .rhosts, используемых для аутентификации таких служб как rlogin и rsh. Полезные параметры:
    no_hosts_equiv — игнорировать содержимое файла hosts.equiv,
    no_rhosts — игнорировать содержимое файлов .rhosts,
    suppres s — охраняет системные журналы от потока малозначимых сообщений, в частности когда используется контрольный флаг sufficient.
  • pam_rootok: Тип auth. Используется в случае, когда администратору необходимо получать доступ к сервису без введения пароля. Этот модуль допускает пользователя к сервису, только если его uid равен 0.
  • pam_securetty: Включает в проверку файл /etc/securitty. Суперпользователь сможет зайти только на указанных там терминалах.
  • pam_time: Тип account. Смотри описание устройства конфигурационного файла time.conf.
  • pam_warn: Тип auth, session и password. Просто ведет записи в системных журналах, например, при смене пароля.
  • pam_wheel: Тип auth и account. Права суперпользователя может использовать только пользователь группы wheel (группа root в Linux). Полезные параметры:
    group=XXX — использовать указанную группу вместо стандартной нулевой,
    deny — инвертирование действия алгоритма, запрещается получать права суперпользователя пользователям указанной группы, используется вместе с предыдущим параметром,
    trust — избавляет пользователей группы wheel от необходимости вводить пароль при смене uid на 0.

Дата последнего изменения: 21.11.2022

Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.

Для пользователей Linux безопасное предоставление общего доступа к файлам является достаточно трудоемкой задачей. В частности, она порождает необходимость запоминать множество паролей и требует больших затрат времени на модификацию приложений системного доступа (таких как login , su , password , ftp и т. п.). Дело усложняется тем, что это процесс аутентификации, во время которого система идентифицирует пользователя и предоставляет ему соответствующий доступ.

История использования PAM

PAM – это набор API для аутентификации пользователей. До появления PAM такие приложения, как login (а также rlogin , telnet , rsh ), искали имя пользователя в файле /etc/passwd, сравнивали оба значения и выполняли аутентификацию пользователя по введенному им имени. Все приложения использовали эти общие службы, хотя детали реализации и полномочия для их настройки различались.

Затем разработчики приложений попытались создавать собственные процессы. Для этого понадобилось разделить модули приложения и безопасности (общий модуль безопасности мог использоваться всеми приложениями и настраиваться как необходимо).

Механизм PAM объединяет множество низкоуровневых схем аутентификации в API высокого уровня, позволяющий создавать приложения, использующие аутентификацию независимо от применяемой схемы аутентификации. Принципиальным свойством PAM является динамическая настройка аутентификации при помощи файла /etc/pam.d или /etc/pam.conf .

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

На рисунке 1 показаны основные этапы работы модуля PAM.

Рисунок 1. Библиотека PAM обрабатывает файл pam.d и загружает соответствующие модули

Рисунок 1. Библиотека PAM обрабатывает файл pam.d и загружает соответствующие модули

Операционные системы, поддерживающие PAM

PAM был разработан Sun Microsystems в 1995 году и поддерживается следующими версиями операционных систем (и более новыми):

  • RedHat 5.0
  • SUSE 6.2
  • Debian 2.2
  • Mandrake 5.2
  • Caldera 1.3
  • TurboLinux 3.6

Также PAM поддерживается новыми версиями Solaris™, AIX®, HP-UX и Mac OS® X. Позже PAM был стандартизирован в рамках процесса стандартизации X/Open UNIX® (в составе архитектуры службы X/Open single sign-on (XSSO)).

Реализации PAM

Хотя строгая классификация отсутствует, можно сказать, что существует три реализации PAM:

  1. Linux-PAM : охватывает все типы PAM, обсуждаемые в этой статье. Основная архитектура PAM на любой платформе Linux подобна версии Linux-PAM.
  2. OpenPAM — другая реализация PAM, разработанная Дагом-Эрлингом Сморгравом (Dag-Erling Smorgrav) в NAI Labs, в рамках программы исследований DARPA-CHATS. Поскольку это реализация с открытым кодом, она в основном используется во FreeBSD, NetBSD и приложениях (а также в Mac OS X).
  3. Java™ PAM или JPam : PAM – это фактически стандартные модули аутентификации с поддержкой Linux и UNIX. JPam выступает в качестве моста между кодом Java и обычными PAM. При помощи JPam приложения на Java могут использовать модули PAM и связанные с ними средства (такие как auth , account , passwd , session , и т. п.).

Несмотря на существование различных реализаций PAM их основная функциональность остается одинаковой.

Из чего состоят модули PAM?

Установка PAM состоит из нескольких шагов. Инструкции по установке см. в разделе Ресурсы .

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

  1. Модуль аутентификации используется для аутентификации пользователей или создания и удаления учетных данных.
  2. Модуль управления учетными записями выполняет действия, связанные с доступом, истечением учетных данных или записей, правилами и ограничениями для паролей и т. д.
  3. Модуль управления сеансами используется для создания и завершения сеансов.
  4. Модуль управления паролями выполняет действия, связанные с изменением и обновлением пароля.

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

  • pam_access обеспечивает управление входом в систему в виде протоколируемой службы при помощи имени пользователя и домена в зависимости от правил, указанных заранее в файле /etc/security/access.conf.
  • pam_cracklib проверяет пароли на соответствие правилам для паролей.
  • pam_env sets/unsets устанавливает и сбрасывает переменные среды из файла /etc/security/pam_env_conf.
  • pam_debug выполняет отладку PAM.
  • pam_deny блокирует модули PAM.
  • pam_echo выводит сообщения.
  • pam_exec выполняет внешнюю команду.
  • pam_ftp модуль для анонимного доступа.
  • pam_localuser проверяет наличие имени пользователя в файле /etc/passwd.
  • pam_unix выполняет обычную аутентификацию на основе пароля из файла /etc/passwd .

Существует множество других модулей ( pam_userdb , pam_warn , pam_xauth ), ), перехватывающих набор возвращаемых значений. Подробную информацию об этих модулях можно найти в Руководстве по администрированию PAM в разделе Ресурсы .

Настройка PAM

Настройки PAM в основном сосредоточены в файле /etc/pam.d или /etc/pam.conf (для старых версий).

Структура файла конфигурации

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

Поля файла конфигурации PAM содержат следующую информацию:

  • Service_name указывает название службы или приложения. По умолчанию – OTHER.
  • Module_type указывает тип модуля ( auth/account/session/passwd ) для соответствующей службы, указанной в поле Service_name .
  • Control_flag указывает дополнительное свойство для модуля. Оно может принимать следующие значения: requisite (необходимый) , required (требуемый) , sufficient (достаточный) и optional (необязательный) .
  • Module_path указывает путь к объекту библиотеки, использующемуся в модуле. По умолчанию он имеет значение /lib/security .
  • Module_options / module_args (дополнительные поля) указывает параметры или аргументы, которые могут быть переданы модулям службы.

Модули вызываются в том порядке, в котором они указаны в файле конфигурации, в зависимости от значения поля Control_flag (Управляющий флаг) для каждого модуля. Поле Control_flag принимает следующие значения:

  • required (требуемый): все требуемые модули в стеке должны вернуть положительный ответ. Если один или несколько требуемых модулей вернут отрицательный ответ, все требуемые модули будут выполнены, но запрос будет отвергнут.
  • sufficient (достаточный): если модуль помечен как достаточный и перед ним ни один из необходимых или достаточных модулей не возвратил отрицательного ответа, то все оставшиеся модули в стеке игнорируются, и возвращается положительный ответ.
  • optional (дополнительный): если в стеке нет требуемых модулей и ни один из достаточных модулей не возвратил положительного ответа, то хотя бы один из дополнительных модулей приложения или службы должен вернуть положительный ответ.

Примеры конфигурационных файлов PAM

В таблице 1 приведены сведения о конфигурационных файлах PAM для различных операционных систем:

Таблица 1. Конфигурационные файлы PAM
Операционная система Расположен в … Тип Control_flag Модуль
Red Hat /etc/pam.d auth required /lib/security/pam_unix.so
Red Hat /etc/pam.d account sufficient /lib/security/pam_unix.so
Red Hat /etc/pam.d session required /lib/security/pam_limit.so
AIX /etc/pam.conf auth required /usr/lib/security/pam_aix
AIX /etc/pam.conf account required /usr/lib/security/pam_aix
AIX /etc/pam.conf password required /usr/lib/security/pam_aix
zSUSE 64-bit 32-bit /etc/pam.conf auth required
zSUSE 64-bit 32-bit /etc/pam.conf account required
zSUSE 64-bit 32-bit /etc/pam.conf session required
Solaris /etc/pam.conf auth required /usr/lib/security/pam_unix.so.1
Solaris /etc/pam.conf account required /usr/lib/security/pam_unix.so.1
Solaris /etc/pam.conf password required /usr/lib/security/pam_unix.so.1
HP-UX /etc/pam.conf auth required libpam_unix.so.1
HP-UX /etc/pam.conf account required libpam_unix.so.1
HP-UX /etc/pam.conf password required libpam_unix.so.1

Файл политик PAM «other»

Файл конфигурации политик PAM /etc/pam.d используется для указания модулей аутентификации по умолчанию, то есть для тех приложений, о которых в файле конфигурации ничего не сказано явным образом. Он, вероятно, является самым простым и надежным файлом конфигурации PAM по умолчанию. Внутри этого файла мы можем увидеть что-то подобное:

12345678910/etc/pam.d/other File auth        required     pam_warn.soauth        required     pam_deny.soaccount     required     pam_warn.soaccount     required     pam_deny.sopassword    required     pam_warn.sopassword    required     pam_deny.sosession     required     pam_warn.sosession     required     pam_deny.so

Этот файл устроен очень просто. Для всех типов модулей указано одинаковое значение Control_flag – required . Вызывается два модуля:

  1. Вначале вызывается pam_warn.so для записи информации о текущей попытке аутентификации.
  2. Затем вызывается pam_deny.so , который просто возвращает отказ и запрещает все типы подключения или аутентификации.

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

10 шагов для создания простого PAM-приложения входа в систему

Эти 10 шагов помогут вам создать собственное PAM-приложение и помогут понять, как работает сеанс PAM:

  1. Включите заголовочные файлы, необходимые для использования PAM (например, pam_appl.h, pam_misc.h).
  2. В функции main инициализируйте библиотеку PAM libpam.so (которая загружает модули, указанные в файле конфигурации для приложения) при помощи уникального идентификатора.
  3. Попытайтесь выполнить аутентификацию для всех модулей и рассмотрите сценарии отказов.
  4. Проверьте учетные данные пользователей и параметры учетных записей.
  5. Откройте новый сеанс PAM.
  6. Создайте среду для пользователя при помощи учетных данных.
  7. По завершении работы пользователя закройте пользовательскую среду.
  8. Закройте сеанс PAM.
  9. Выйдите из библиотеки libpam.so с соответствующим идентификатором.
  10. Выход.

Заключение

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

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

Теперь вы можете перейти к более сложным материалам по использованию PAM. Ссылки приведены в разделе Ресурсы .

Ресурсы для скачивания

  • этот контент в PDF

Похожие темы

  • Оригинал статьи (EN).
  • Сборник руководств Linux-PAM (EN) содержит документацию по проблемам системного администрирования, написанию модулей и разработке приложений.
  • Взгляд на PAM со стороны Неофициального FAQ по SUSE Linux (EN).
  • Если вам необходимо обновление, на сайте Gentoo есть руководство по обновлению Linux-PAM (EN).
  • Взгляните на модель архитектуры X/Open Single Sign-on Service (XSSO) (EN).
  • Готовы к более подробным материалам по работе с PAM?
    • Сравнение подсистем безопасности в AIX, Linux и Solaris (developerWorks, октябрь 2005 г.; ): как работают PAM в этих системах.
    • Применение пространства имен монтирования (developerWorks, сентябрь 2007 г.; ): познакомьтесь с соответствующей частью модулей PAM.
    • Централизованное управление учетными записями пользователей при помощи OpenLDAP (developerWorks, май 2006 г.; EN): узнайте, как PAM в Linux взаимодействуют с LDAP.
    • Усиление безопасности при помощи многоэкземплярности (developerWorks, февраль 2008 г.; EN): использование подключаемых модулей аутентификации для защиты личной информации.
    • Учебник для экзамена LPI 202, Тема 210: Управление сетевыми клиентами (developerWorks, май 2006 г.): настройка PAM для обеспечения аутентификации.
    • Настройка PAM в SUSE Enterprise Linux 9 (Technote (IBM Tivoli Netcool/OMNIbus), октябрь 2008 г.; EN): настройка модуля PAM для аутентификации локальных пользователей при помощи ObjectServer.
  • В разделе Linux сайта developerWorks можно найти дополнительные ресурсы для разработчиков Linux и самые популярные среди наших читателей статьи и руководства (EN).
  • Посмотрите все советы по Linux и руководства по Linux на сайте developerWorks.
  • Используйте в своем следующем проекте разработки для Linux ознакомительные версии программного обеспечения IBM , которые можно скачать непосредственно с developerWorks.(EN)

PAM

Понравилась статья? Поделить с друзьями:
  • Dramenex инструкция по применению на русском
  • Мазь тримедат инструкция по применению цена
  • Академия котина руководство
  • Этаперазин инструкция по применению цена отзывы аналоги таблетки
  • Е88 pro квадрокоптер инструкция на русском