Manpages

ИМЯ

nsswitch.conf − Системные базы данных и файл с настройками для диспетчера службы имен

ОПИСАНИЕ

Для корректной работы в локальном окружении необходима различная настройка функций библиотеки языка C. Традиционно это делалось с помощью файлов (таких как ’/etc/passwd’), но со временем стали популярны другие службы имен (такие как Network Information Service (NIS) и Domain Name Service (DNS)) и они были внесены в библиотеку C, причем обычно использовался фиксированный порядок поиска.

Linux-версия libc5 с поддержкой NYS (NYS - это специальная доработка libc5, которая позволяет работать с NIS. Подробнее об этом читайте NIS-HOWTO. -- Прим. пер.), а также библиотека GNU C 2.x (libc.so.6) используют более корректный метод решения этой проблемы. Этот метод был разработан по образцу того метода, что использован в библиотеке C, написанной в Sun Microsystems для Solaris 2. Мы используем их название и зовем данную схему "Name Service Switch", NSS (Диспетчер Службы Имен). Базы данных, в которых ищется информация, и порядок их просмотра задаются в файле /etc/nsswitch.conf.

В NSS можно использовать следующие базы данных:
aliases

Почтовые псевдонимы, используемые программой sendmail(8). В данный момент игнорируются.

ethers

Номера ethernet.

group

Группы пользователей, с которыми работает функция getgrent(3).

hosts

Имена хостов и номера (имеются в виду IP-адреса? -- Прим. пер.), используемые функцией gethostbyname(3) и другими, ей подобными.

netgroup

Список хостов и пользователей сети, используемый для правил доступа. Библиотеки C до версии glibc 2.1 поддерживают сетевые группы только посредством NIS.

network

Имена и номера сетей, используемые функциями getnetent(3).

passwd

Пароли пользователей, используемые функциями getpwent(3).

protocols

Сетевые протоколы, используемые функциями getprotoent(3).

publickey

Открытые и секретные ключи для Secure_RPC, которая используется в NFS и NIS+.

rpc

Имена и номера вызовов удаленных процедур, используемых функцией getrpcbyname(3) и другими похожими функциями.

services

Сетевые службы, используемые функциями getservent(3).

shadow

Теневые пароли пользователей, используемые getspnam(3).

Например, файл /etc/nsswitch.conf может выглядеть так (Эти настройки будут использоваться по умолчанию, если файл /etc/nsswitch.conf отсутствует):

passwd:

compat

group:

compat

shadow:

compat

hosts:

dns [!UNAVAIL=return] files

networks:

nis [NOTFOUND=return] files

ethers:

nis [NOTFOUND=return] files

protocols:

nis [NOTFOUND=return] files

rpc:

nis [NOTFOUND=return] files

services:

nis [NOTFOUND=return] files

Первая колонка -- это база данных. Остаток строки задает используемый метод поиска. Вы можете задать этот метод отдельно для каждой базы данных.

Спецификация настройки для каждой базы данных может содержать два разных элемента:
* Спецификация службы, такая как ’files’, ’db’ или ’nis’.
* Реакция на поиск результата, такая как ’[NOTFOUND=return]’.

Для libc5 с NYS допустимы спецификации служб ’files’, ’nis’ и ’nisplus’. Для hosts вы можете в качестве дополнительной службы указать ’dns’, а для passwd и group, но не для shadow -- ’compat’.

При использовании glibc у вас должен быть файл /lib/libnss_SERVICE.so.X для каждой службы SERVICE, которую вы используете. При стандартной установке можно использовать ’files’, ’db’, ’nis’ и ’nisplus’. Для hosts вы можете в качестве дополнительной службы указать ’dns’, для passwd, group и shadow -- ’compat’. Эти службы не будут использоваться libc5 с NYS. Номер версии X это 1 для glibc 2.0 и 2 для glibc 2.1.

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

’[’ ( ’!’? СОСТОЯНИЕ ’=’ ДЕЙСТВИЕ )+ ’]’

где
СОСТОЯНИЕ => success | notfound | unavail | tryagain
ДЕЙСТВИЕ => return | continue

Регистр букв не важен. СОСТОЯНИЕ -- это результат вызова функции поиска заданной службы. Оно может принимать значения:
success

Нужная запись найдена и ошибок не произошло. Для этого состояния действием по умолчанию является ’return’.

notfound

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

unavail

Служба недоступна. Это может означать, что недоступен нужный файл, или DNS-сервер или что нет допустимых запросов. Для этого состояния действием по умолчанию является ’continue’.

tryagain

Служба временно недоступна. Это может означать, что какой-либо файл заблокирован или что в данный момент сервер не может принять больше соединений. Для этого состояния действием по умолчанию является ’continue’.

Взаимодействие с синтаксисом +/- (режим compat)
Linux libc5 без NYS не содержит диспетчера службы имен, но предоставляет пользователю некоторую возможность управления процедурой поиска. В файле /etc/passwd вы можете сделать записи вида +пользователь или +@сетевая_группа (что включает заданного пользователя из карты NIS passwd), -пользователь или -@сетевая_группа (что исключает заданного пользователя) и + (что включает каждого пользователя, не считая исключенных, из карты NIS). Так как обычно просто помещают + в конец файла /etc/passwd, чтобы включить всех пользователей из NIS, то диспетчер в этом случае предоставляет более быструю альтернативу (’passwd: files nis’), которая не требует одиночной записи + в файле /etc/passwd, /etc/group и /etc/shadow. Если этого недостаточно, то служба NSS ’compat’ предоставляет полную семантику +/-. По умолчанию, источником является ’nis’, но он может быть переназначен, если задать ’nisplus’ как источник для псевдо-баз данных passwd_compat, group_compat и shadow_compat. Эти псевдо-базы данных доступны только в библиотеке GNU C Library.

ФАЙЛЫ

Служба, называемая SERVICE, реализуется через разделяемую объектную библиотеку, которая называется libnss_SERVICE.so.X и находится в каталоге /lib.

/etc/nsswitch.conf

файл с настройками

/lib/libnss_compat.so.X

реализует источник ’compat’ для glibc2

/lib/libnss_db.so.X

реализует источник ’db’ для glibc2

/lib/libnss_dns.so.X

реализует источник ’dns’ для glibc2

/lib/libnss_files.so.X

реализует источник ’files’ для glibc2

/lib/libnss_hesiod.so.X

реализует источник ’hesiod’ для glibc2

/lib/libnss_nis.so.X

реализует источник ’nis’ для glibc2

/lib/libnss_nisplus.so.2

реализует источник ’nisplus’ для glibc 2.1

ЗАМЕЧАНИЯ

Внутри каждого процесса, который использует файл nsswitch.conf, файл полностью читается только раз; если позднее файл бы изменен, то процесс продолжит выполнение, используя старые настройки.
В Solaris невозможно статически собрать программу, использующую службу NSS. В Linux такой проблемы нет.

ПЕРЕВОД

Перевёл с английского Виктор Вислобоков <corochoone [AT] perm.ru> 2004