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).
Например, файл
/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 такой проблемы нет.