ИМЯ
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