Имена и пароли пользователей (nss и pam)

Традиционный Unix хранил информацию о пользователях и их паролях в простой текстовой базе данных в файле /etc/passwd. База состоит из строк, соответствующих пользователям, каждая из которых состоит из полей, разделённых двоеточием

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

Поля слева на право: имя для входа; пароль (хэш пароля, символ-ссылка на базу паролей, символ отсутствия пароля и т.п.); числовой идентификатор пользователя UID; числовой идентификатор основной группы пользователя GID; текстовое описание пользователя в произвольной форме (называется поле GECOS, поскольку изначально хранило параметры для связи с ОС GECOS); домашний каталог пользователя (стартовый при входе в систему); программа интерпретатор команд пользователя (запускается при входе в систему).

Со временем стало понятно, что хранение хэша пароля в файле доступном для чтения всем пользователям - это неудачное решение, но на формат файла passwd и его доступность ориентировалось уже столько программ, что изменить его было нельзя не потеряв обратной совместимости. В результате, пароли были вынесены в отдельную базу, формат которой сильно отличается в разных Unix-подобных системах. В Solaris и Linux пароли хранятся в файле /etc/shadow. В FreeBSD в /etc/master.passwd. В OSF1 в специализированной базе данных.

В настоящее время файл passwd обеспечивает отображение имён пользователей в числовые идентификаторы и базовую настройку программного окружения пользователя, а база паролей вне зависимости от формата - аутенификацию пользователей. Существуют ситуации, когда важно только отображение имён (запуск локальных служб, не требующий паролей; вход по ключу в протоколе SSH) или только парольная аутенификация (почтовые серверы, хранящие почту по именам в общей БД). В некоторых случаях наоборот данных из файла passwd и пароля оказывается недостаточно. Чаще всего это процедура авторизации, например, для ограничения доступа к определённым ресурсам в определённые часы.

После того, как Unix-компьютеры начали объединяться в сети, у администраторов появилась дополнительная проблема по синхронизации паролей и числовых идентификаторов в пределах локальной сети. Общие пароли нужны для того, чтобы пользователь мог работать на любом из свободных компьютеров, а единые числовые идентификаторы нужны для удалённого доступа к файловым системах (т.к. права доступа определяются не именем пользователя, а его UIDом). Для решения проблемы были предложены протоколы репликации базы пользователей локальной сети с администраторского компьютера (Network Information Service - NIS и NIS++), а также протоколы удалённой аутенификации пользователей на основе криптографии (Kerberos).

В настоящее время существует множество решений, не использующих классические файлы: хранение учётных данных в СУБД общего назначения; доступ к учетным данным по протоколу LDAP; аутенификация с помощью смарт-карт,одноразовых паролей и биометрических средств.

В середине 1990-х для унификации всех этих средств и протоколов программисты фирмы Sun предложили вынести ключевые функций в расширяемые модульные библиотеки. Библиотека доступа к данным из файла passwd (а так же к файлам групп /etc/group, хостов /etc/hosts и некоторым другим) называется Name Service Switch (переключатель служб имён NSS), а библиотека выполняющая аутенификацию и авторизацию пользователей, а также смену паролей - Pluggable Authentication Modules (подключаемые модули аутенификации PAM). Каждая библиотека может наращиваться за счёт динамически подгружаемых модулей. Данные библиотеки доступны в Solaris, Linux, FreeBSD и некоторых других Unix-подобных ОС.

В Linux список модулей NSS можно просмотреть командой:

ls /lib/libnss.so

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

ls /lib*/security

Обычно в Linux присутствуют модули NSS поставляемые в составе библиотеки glibc: files, compat, nis, nisplus, hesiod, dns. Модули PAM по умолчанию включают ряд локальных проверок: проверка пароля в файлах passwd или shadow, проверка на принадлежность к определённой группе, проверка времени суток и т.п.

Для взаимодействия с сетевыми службами, такими как сервер Active Directory, возможно, придётся доустановить дополнительные модули NSS и PAM.