Настройка PAM в Linux
Библиотеки PAM или Pluggable Authentication Modules — это набор компонентов, предоставляющих программный интерфейс для авторизации пользователей в Linux. Возможно вы уже сталкивались с PAM, когда хотели запустить какую либо графическую программу от имени суперпользователя без использования sudo. Но применение этих библиотек намного шире. Они используются утилитой login и менеджером входа gdm при входе в системе, утилитой ssh при удалённом подключении по SSH, а также другими службами где нужна аутентификация.
Этот механизм появился примерно в 1997 году и с тех пор дошёл до нашего времени практически неизменным. Конечно, были дописаны новые модули, но суть работы осталась такая же как изначально. В этой статье мы рассмотрим как выполняется настройка PAM в Linux.
Как работает 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:
Каждая строчка файла состоит из нескольких полей:
тип обязательность модуль параметры
- Первое поле — тип, определяет какой тип запроса к PAM надо выполнить. Существует четыре различных типа запроса auth (проверка данных входа, например, логина и пароля), account (проверка не истёк ли пароль пользователя), password (обновление пароля), и session (обслуживание сессии, например, логгирование и монтирование папок).
- Второе поле определяет как нужно интерпретировать результат, возвращённый модулем PAM. Доступно тоже несколько возможных вариантов: required (тест должен быть обязательно пройден, но следующие строки тоже будут проверяться), requisite (аналогично required, только если тест не проходит, то следующие строки уже не проверяются), sufficient (противоположно requisite, если тест проходит, то следующие строки уже не проверяются), optional (проваленные тесты игнорируются).
- Третье и четвертое поле — это название библиотеки модуля и её параметры. Всё это надо выполнить для выполнения теста авторизации или действия.
Кроме того, существуют директивы include, которые включают строки из других файлов так, как будто они были написаны в этом файле. Файл настройки sudo кажется совсем коротким, но в него включаются другие файлы. Давайте посмотрим ещё на файл /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, как видите, это очень гибкая система, но будьте осторожны. Любая неверная настройка может отнять у вас доступ к собственной системе!
Источник
IgorKa — Информационный ресурс
Немного обо всем и все о немногом, или практический опыт системного администратора.
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
---|---|---|---|---|---|---|
« Фев | Апр » | |||||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Лекция №29 — Аутентификация в Linux. Система PAM
Linux — это многопользовательская среда и чтобы пользователь мог начать работу в системе ему нужно пройти процедуру аутентификации. PAM (Pluggable Authentication Modules) — это система (механизм), которая берет на себя работу по реализации процедур аутентификации. До появления PAM, разработчикам программ, которые были так или иначе связаны с аутентификацией, приходилось подстраивать свою программу под существующие механизмы аутентификации. Соответственно если менялись механизмы аутентификации, значит нужно было менять и программы которые использовали их. Поэтому была разработана система PAM, которая является “прослойкой” между программами и механизмами аутентификации. То есть теперь программы аутентификации (например, программа login) должны всего лишь уметь работать с системой PAM. Программа передает PAM параметры (например логин и пароль) и ее (программу) уже не “интересует” какой способ аутентификации реализован в системе — аутентификация по паролу или смарт-карте или другой способ. Дальше работает PAM и возвращает программе или успех или отказ.
Посмотрим на систему PAM подробнее. Основные функции, или действия, или задачи которые выполняет система PAM — разбиты на четыре группы которые имеют определенные названия:
группа auth — это действия связанные непосредственно с аутентификацией. То есть действия или функции которые позволяют определить, что вы это вы. Это может быть аутентификация по паролю, по смарт-карте, биометрическая аутентификация (отпечаток пальца и т.д.) и другие.
группа account — это действия связанные с управлением учетными записями. Например, даже если вы аутентифицировались в системе, то вашей учетной записи можно поставить запрет на работу в определенное время суток. Или разрешить заходить в консольном режиме, но запретить заходить в графическом режиме. И т.д.
группа session — действия этой группы осуществляют выделение пользователю необходимых для работы ресурсов. Самый простой пример — это разрешение на монтирование каталогов.
группа password — действия, которые реализуют изменение аутентификационных данных пользователя. Чаще всего это действия по управлению паролями пользователя.
Все эти действия или процедуры (функции) реализованы в виде отдельных модулей, которые расположены в каталоге /lib/security/. То есть можно сказать, есть модули группы auth, модули группы account и т.д. Соответственно система PAM является модульной и если вам необходимо реализовать биометрическую аутентификацию, то необходимо просто установить модуль, которых может это процедуру выполнить.
Основной конфигурационный файл системы PAM — это файл /etc/pam.conf. Кроме файла /etc/pam.conf, настройки PAM хранятся в файлах каталога /etc/pam.d/. Внутри каталога находятся текстовые файлы которые содержат в себе последовательность действий (некий алгоритм) для программ которые используют PAM. Например, файл /etc/pam.d/login содержит алгоритм работы системы PAM для программы login, а файл /etc/pam.d/passwd для программы passwd.
Рассмотрим сначала формат файла /etc/pam.conf. Файл состоит из строк. Файл может состоять из одной строки, а может из нескольких строк складываясь в цепочку последовательных действий. Каждая строка описывает одно правило или один шаг такой цепочки (алгоритма). Строка состоит из четырех полей. Первое поле это имя программы к которой относится данный шаг. Второе поле, это тип действия (auth, account, session, password). Третье поле это поле в котором задается поведение системы PAM после завершения этого шага на этом шаге алгоритма (чуть ниже остановимся подробнее на этом вопросе). Четвертое поле — это имя файла модуля. Также в строке могут присутствовать некоторые параметры передаваемые модулю.
Структура файлов находящихся в каталоге /etc/pam.d/, такая же. Отличие только в отсутствии первого поля — имени. Так как имя программы берется из имени самого файла. Посмотрим на пример такого файла. Назовем его testpam.
Рассмотрим первую строку. Поле auth говорит, что первым шагом будет аутентификация. Третье поле — это модуль, который будет выполнять аутентификацию и возвращать результат выполнения. В данном примере модуль pam_rootok.so проверяет является ли учетная запись рутом (root). Если, да то будет возвращен успех (true), если нет, то будет возвращена ошибка или отказ (false). Второе поле — это реакция или влияние полученного результата на цепочку в целом.
Реакция может быть четырех типов: required, requisite, optional, sufficient. На примере строки auth sufficient pam_rootok.so рассмотрим, что означают эти значения.
Если во втором поле установлено значение requisite, то это означает, что если модуль pam_rootok.so завершился с ошибкой, то дальнейшее выполнение файла testpam прерывается и система PAM возвращает приложению ошибку. Если модуль вернул положительные результат, то выполнение цепочки продолжается.
required похож на requisite. Если модуль pam_rootok.so завершился с ошибкой, то PAM также вернет, ошибку, но после того как будут выполнены остальные модули, то есть цепочка не прерывается. Если модуль вернул положительные результат, то выполнение цепочки продолжается.
sufficient — если модуль pam_rootok.so вернул успех, то система PAM возвращает приложению успех, и дальнейшее выполнение цепочки прерывается. Если неудача, то продолжается выполнение цепочки.
optional — этот параметр никак не влияет на ход цепочки. Указывается для тех модулей которые не выполняют никаких проверочных действий. Если в файле будут только строки с параметром optional, то PAM вернет приложению успех.
Более подробно о системе PAM и назначении той или иной библиотеки можно прочитать на сайте http://kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html. Сейчас выполним небольшое практическое упражнение которое позволить лучше понять как работает система PAM и как составлять конфигурационные файлы.
Перейдите в каталог /etc/pam.d/. Скопируйте файл su в домашнюю директорию (чтобы можно было восстановить его) и удалите файл в su из директории /etc/pam.d/. Попробуйте теперь выполнить команду su в терминале чтобы перейти в режим суперпользователя. После ввода пароля система выдаст ошибку аутентификации, так как отсутствует конфигурационный файл для программы su.
Создаем файл /etc/pam.d/su и пишем в нем такую строку:
Сохраняем файл. Пробуем снова выполнить команду su, и видим, что теперь мы становимся суперпользователем без запроса пароля. Это произошло потому, что модуль pam_permit.so всегда возвращает положительный результат, sufficient тут же прерывает выполнение цепочки и система PAM возвращает положительный результат. Отредактируем файл к следующему виду:
Модуль pam_deny.so всегда возвращает ошибку. Какой будет результат? Проверьте. А если заменить requisite на required?
Теперь напишем в файле следующее правило:
Теперь после выполнения команды su будет запрошен пароль пользователя root. Если пароль ввести правильно, то вы станете рутом, если пароль будет неверный, то останетесь обычным пользователем. Теперь добавим в файл еще одну строку, так чтобы получились следующие правила:
Модуль pam_wheel.so возвращает успех если учетная запись пользователя принадлежит группе wheel. Если попробовать сейчас выполнить команду su, то она тут же завершиться с ошибкой. То есть сейчас команду su смогут выполнить только пользователи, который входят в группу wheel и знают пароль учетной записи root. Если создать группу wheel и добавить туда свою учетную запись, то команда su сработает.
Попробуйте ответить кто сможет успешно выполнить команду su и, что для этого нужно будет сделать?
На этом завершим практическое упражнение (не забудьте вернуть на место оригинальный файл su).
Хочу еще раз подчеркнуть, что конфигурационные файлы в каталоге /etc/pam.d/ можно создавать только для файлов которые используют систему PAM. Например, если создать файл /etc/pam.d/ls со строкой auth requisite pam_deny.so, то команда ls все равно будет выполнятся так как она не использует систему PAM. Чтобы проверить использует ли команда систему PAM можно использовать команду ldd, которой в качестве параметра передается полный путь к файлу команды. Например:
Команда ldd покажет какие библиотеки использует программа и если в перечне есть libpam.so.0, libpam_misc.so.0 значит программа использует систему PAM.
В завершении хочу еще упомянуть о таком файле как /etc/nsswitch.conf. Первые три строки этого файла как раз и задают какая система аутентификации будет работать в системе:
Ключевое слово compat как раз и “говорит” о том что в качестве системы аутентификации, будет использована система PAM.
И еще. Будьте осторожны в экспериментах с PAM. По незнанию или неосторожности можно запросто заблокировать свою систему. Поэтому перед тем как что-то менять обязательно сохраните исходные конфигурационные файлы, чтобы в случае проблем можно было их быстро восстановить.
Источник