NSSWITCH.CONF(5)

НАЗВАНИЕ
nsswitch.conf - конфигурационный файл cистемных баз данных и переключателя сервисов имен

ОПИСАНИЕ
Многие функции в бибилиотеках C должны быть настроены так, чтобы без сбоев работать в локальной среде. Раньше это делалось с помощью соответствующих файлов (например, `/etc/passwd'), но потом появились другие сервисы имен (такие, как Network Information Service (NIS) и Domain Name Service (DNS)), ставшие популярными и включенные в библиотеки C.

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

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

aliases
    (почтовые алиасы (псевдонимы), используемые sendmail(8),которые в настоящее время игнорируются);

ethers
    (ethernet-адреса);

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

hosts
    (имена и адреса машин, используемые функцией gethostbyname(3) и ей подобными);

netgroup
    (общесетевой список машин и пользователей, используемый для определения прав доступа к системе. Библиотеки C до glibc 2.1 поддерживали эти группы только для NIS);

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

passwd
    (пароли пользователей, обрабатываемые функцией getpwent(3));

protocols
    (сетевые протоколы, используемые функцией getprotoent(3));

publickey
    (открытые и закрытые ключи для Secure_RPC, используемые NFS и NIS+);

rpc (имена и номера удаленных вызовов процедур RPC, используемые функцией getrpcbyname(3) и ей подобными);

services
    (сетевые службы, работающие с функцией getservent(3));

shadow
    (скрытые (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'. Для имен машин можно использовать сервис `dns', для passwd и group - `compat' (но не для shadow).

В glibc, у Вас должен быть файл /lib/libnss_СЕРВИС.so.X для каждого СЕРВИСА, с которым Вы работаете. Вы увидите `files', `db', `nis' и `nisplus'. Для имен машин можно использовать сервис `dns', для passwd, group и shadow - `compat'. Эти сервисы не будут использоваться в libc5 с NYS. Номер версии X равен 1 в glibc 2.0 и 2 в glibc 2.1.

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

`[' ( `!'? СТАТУС `=' ДЕЙСТВИЕ )+ `]'

where

СТАТУС => success | notfound | unavail | tryagain
ДЕЙСТВИЕ => return | continue

Регистр написания ключевых слов неважен. СТАТУС - это результат вызова соответствующей функции заданного сервиса:

success
    Ошибки не произошло, и возвращено искомое значение. Стандартное действие для этого статуса - `return'.

notfound
    Поиск проведен успешно, но искомое значение не найдено. Стандартное действие - `continue'.

unavail
    Сервис недоступен. Это означает, что файла не существует или, в случае DNS, сервер недоступен или не позволяет отправлять запросы. Стандартное действие - `continue'.

tryagain
    Сервис временно недоступен. Это означает, что файл заблокирован или сервер не может создать соединение. Стандартное действие - `continue'.

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

ФАЙЛЫ
Сервис под именем СЕРВИС включен в разделяемую библиотеку под названием libnss_СЕРВИС.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 этой проблемы нет.