В начало → Linux не для идиотов → Управление пользователями, NSS и PAM |
Linux – система многопользовательская. По умолчанию, большинство дистрибутивов используют «классический» набор файлов в которых
хранится информация о пользователях и группах: /etc/passwd
, /etc/group
, /etc/shadow
, /etc/gshadow
. Во многих ситуациях этого вполне достаточно, но иногда возникает необходимость в интеграции Linux в более или менее чужеродное,
либо просто распределенное окружение, и именно в этот момент к нам на помощь приходят такая интересная подсистема, как NSS
– Name Service Switch. Основная задача NSS – создать модульное окружение для управления пользователями. Реализовано это посредством
загружаемых библиотек. Основные вызовы NSS реализованы в библиотеке libc, а libc в свою очередь загружает и вызывает бакэнды
NSS:
При инициализации программы, так или иначе связанной с NSS, загружаются основная библиотека libc.so
, которая считывает конфигурацию из файла /etc/nsswitch.conf
, после чего также загружаются те библиотеки NSS, которые указаны в этом файле.
Впоследствии при работе программы, если программе требуется работать с именованными сущностями, соответствующие вызовы функций
glibc будут обращаться к функциям NSS и использовать в те источники данных, которые указаны в nsswitch.conf
.
В частности, через NSS можно разрешать (определять) имена и идентификаторы протоколов, номера портов служб (сервисов), имена и идентификаторы пользователей и групп, IP-адреса и имена компьютеров и некоторые другие данные.
Пример файла nsswitch.conf
:
$
cat /etc/nsswitch.conf
passwd: files ldap shadow: files ldap group: files ldap hosts: files dns bootparams: nisplus [NOTFOUND=return] files ethers: files netmasks: files networks: files protocols: files rpc: files services: files netgroup: nisplus publickey: nisplus automount: files nisplus aliases: files nisplus
В данном примере указано, что для определения имен пользователей и групп используются сначала текстовые файлы и затем LDAP, для определения имен компьютеров и IP-адресов используются сначала текстовые файлы и затем DNS, для определения алиасов и настроек автоматического монтирования каталогов используются сначала текстовые файлы и затем служба NIS+.
Библиотеки бакэндов системы NSS хранятся в файлах libnss_
, где XXX – это имя бакэнда. Например XXX
.solibnss_files.so
– это бакэнд NSS использующий в качестве источника данных текстовые файлы, libnss_db.so
– бакэнд использующий файлы BerkleyDB, libnss_ldap.so
– бакэнд позволяющий хранить данные в каталоге LDAP. Как правило, каждый бакэнд имеет свои дополнительные конфигурационные
файлы.
Как следствие, если у вас возникла необходимость использовать вашу Linux-систему в сетевом или чужеродном окружении и обеспечить ее интеграцию с ним, вы можете воспользоваться NSS и получить доступ к информации через соответствующий бакэнд – например, для интеграции в среду Solaris, вы можете воспользоваться бакэндом NIS/NIS+, для интеграции в ActiveDirectory – бакэндом LDAP.
При этом модульность NSS позволяет вам объединять различные источники данных – например, использовать текстовые файлы и DNS для определения имен компьютеров, NIS для определения имен протоколов и сервисов, и текстовые файлы и LDAP для определения имен и идентификаторов пользователей и групп.
Подсистема PAM (Pluggable Authentification Modules) идейно очень схожа с NSS, но отличается от нее назначением. Основная задачам
PAM – аутентификация пользователей (проверка паролей, прав доступ, ограничений и так далее). Как и NSS, PAM состоит из набора
основных библиотек и бакэндов, причем необходимые бакэнды, порядок их вызова и некоторые опциональные параметры определяются
в конфигурационных файлах PAM, обычно они расположены в каталоге /etc/pam.d
. Главным отличием PAM от NSS (кроме естественно назначения) является то, что PAM является не составной и неотъемлемой частью
libc, а отдельным множеством библиотек.
Основная часть стандартных утилит UNIX для управления пользователями и группами и получения информации о них, в большинстве дистрибутивов Linux общего назначения, адаптирована и собрана с поддержкой NSS и PAM. К таким утилитам относятся passwd, chsh, chfn, id, who и другие. NSS также используется даже такими утилитами как ls, find, ps – то есть всеми теми программами, которые отображают имя пользователя. Соответственно, если программа запрашивает у пользователя пароль – скорее всего она использует и NSS, и PAM (например XDM или GDM). Большинство программ в чьи функции входит обработка почты также используют NSS. Соответственно, можно уверенно говорить что подсистемы NSS и PAM и базовые знания об их предназначении на сегодняшний день являются необходимыми для администратора Linux-систем.
В начало → Linux не для идиотов → Управление пользователями, NSS и PAM |