nsswitch.conf

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

Назначение

Перед доступом к сайту компьютеру необходимо узнать его IP. Обычно для этого используется запрос к DNS серверу, который веб-браузер или операционная система выполняют автоматически, без действий пользователя.

В операционных системах Windows и Linux имеется файл hosts, в котором можно установить IP адреса для любых имён - хостов и доменных имён. По умолчанию операционные системы работают так:

  • если запрашиваемое имя присутствует в файле hosts, то его IP берётся из этого файла и запрос к DNS серверу не делается
  • если в файле hosts имя хоста не найдено, то выполняется запрос к DNS серверу

В операционной системе Linux можно поменять приоритет источников для получения IP адреса или вовсе отключить некоторые из них. Для этого используется файл /etc/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

Пример

Как сделать приоритет DNS выше файла /etc/hosts

Чтобы запросы к DNS серверу выполнялись до поиска имён в файле /etc/hosts, нужно в файле /etc/nsswitch.conf найти строку, которая начинается на hosts и слово dns поставить ДО слова files. Например, так:

hosts: resolve [!UNAVAIL=return] dns files mymachines myhostname

Примечания

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

Дополнительно можно почитать здесь: https://zalinux.ru/?p=2814