Важность nsswitch.conf в Linux

Важность nsswitch.conf в Linux


Файл /etc/nsswitch.conf играет ключевую роль в системах Linux - он определяет, где и в каком порядке система ищет информацию: о пользователях, группах, хостах, службах и т.д. В нём задаётся, какие источники данных будут использоваться и в каком порядке обращаться к ним..

Если вам приходилось возиться с развертыванием и конфигурацией FreeIPA или SambaDC, то вы, скорее всего, отлично понимаете что это за файл и зачем он нужен. Для тех, кто пока мало с ним знаком, в этой статье разберёмся со структурой файла nsswitch.conf, его ключевыми параметрами и тем, как настроить его правильно.

Структура файла nsswitch.conf

Файл nsswitch.conf состоит из строк, каждая из которых определяет базу данных и связанные с ней источники для поиска. Общий формат такой:

<database>: <source> [<option>] ...
  • <database> - указывает, какая именно информация будет запрашиваться (например, пользователи, группы, хосты).
  • <source> - задаёт источник или сервис, из которого будет производиться поиск (например, files, ldap, dns).
  • <option> - дополнительная настройка, влияющая на поведение поиска (например, [NOTFOUND=return]).

Если хочется копнуть глубже, можно заглянуть в документацию Oracle по Name Service Switch - там очень интересно)

Ключевые источники в nsswitch.conf

1. files

Источник files использует локальные файлы для получения информации. Примеры:

  • Данные о пользователях и группах берутся из /etc/passwd и /etc/group.
  • Разрешение имён хостов происходит через /etc/hosts.

Это самый быстрый и безопасный вариант, поэтому он обычно стоит первым в списке источников.

2. dns

Источник dns обращается к DNS-серверам, чтобы разрешить имена хостов в IP-адреса. Чаще всего используется в контексте базы hosts.

hosts: files dns

В этом случае система сначала проверит /etc/hosts, и если имя хоста там не найдено - отправит запрос на DNS-сервер.

3. ldap

Источник ldap позволяет системе обращаться к LDAP-серверу, чтобы получить данные о пользователях, группах и другой информации. Этот способ часто используется в сетевых окружениях, где удобно централизованно управлять учётными записями.

passwd: files ldap

В такой конфигурации система сначала смотрит данные о пользователях в /etc/passwd, а если там нужной записи нет - обращается к LDAP-серверу.

Замечание в части безопасности: если вы ошибётесь с настройкой или добавите ненадёжный LDAP-сервер, злоумышленники могут подсунуть системе привилегированных пользователей - например, с root-правами.

4. nis и nisplus

Источники nis и nisplus используют Network Information Service (NIS) и его улучшенную версию NIS+ для получения данных. Это достаточно старая технология, но её всё ещё можно встретить в некоторых сетях.

netgroup: nis

Такой вариант говорит системе использовать NIS для получения информации о сетевых группах.

5. mdns и mdns4_minimal

Источник mdns включает поддержку Multicast DNS (mDNS), который позволяет разрешать имена хостов в пределах локальной сети без необходимости в централизованном DNS-сервере.

hosts: files mdns4_minimal [NOTFOUND=return] dns

где,

  • mdns4_minimal используется для разрешения имён по IPv4 с помощью mDNS;
  • [NOTFOUND=return] говорит системе прекратить дальнейшие попытки поиска, если имя не найдено через mdns4_minimal. Это помогает избежать лишней нагрузки и снижает риск подключения к нежелательным адресам.

6. db

Источник db позволяет системе получать данные из локальных баз в формате Berkeley DB. Обычно он используется для таких баз, как protocols и services.

services: db files

В этом случае система сначала попытается найти нужную информацию в файле services.db, и только если не найдёт - обратится к обычному /etc/services.

7. compat

Источник compat нужен для обратной совместимости со старыми системами, использующими NIS. Он позволяет сочетать данные из локальных файлов с запросами к NIS. Сейчас почти не используется, но может встретиться в унаследованных конфигурациях.

8. hesiod

Источник hesiod позволяет получать информацию о пользователях и группах через DNS. Сегодня встречается крайне редко и почти не используется в современных дистрибутивах.

9. Опция [NOTFOUND=return]

Эта опция говорит системе: если поиск в текущем источнике не дал результатов (данные не найдены), дальше другие источники опрашивать не нужно - остановиться на этом.

hosts: files mdns4_minimal [NOTFOUND=return] dns

В этом случае, если mdns4_minimal не сможет разрешить имя хоста, система не будет пытаться обращаться к DNS - она просто завершит поиск. Это может быть полезно для повышения производительности и для снижения риска утечки запросов во внешние сети.

Пример конфигурации nsswitch.conf

Ниже - типичная конфигурация файла nsswitch.conf:

passwd:         files systemd
group:          files systemd
shadow:         files
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns mymachines
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Разберёмся, что здесь происходит:

  • passwd, group, shadow, gshadow - данные о пользователях и группах сначала берутся из локальных файлов.
  • hosts - разрешение имён хостов идёт в таком порядке: сначала /etc/hosts, затем mdns4_minimal, и только если не найдено - DNS. Источник mymachines используется для обнаружения локальных контейнеров и виртуальных машин (например, в systemd-nspawn).
  • protocols, services, ethers, rpc - сетевая информация сначала ищется в базах Berkeley DB (например, services.db), а затем в обычных текстовых файлах.
  • netgroup - информация о сетевых группах берётся из NIS.

Заключение

nsswitch.conf - это один из тех файлов, про который редко вспоминают, пока всё работает. Но именно он определяет, откуда система берёт ключевую информацию и в каком порядке это делает. И если что-то настроено не так - можно получить неожиданные тормоза, лишние риски безопасности или просто странное поведение сервисов.

Report Page