Важность 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 - это один из тех файлов, про который редко вспоминают, пока всё работает. Но именно он определяет, откуда система берёт ключевую информацию и в каком порядке это делает. И если что-то настроено не так - можно получить неожиданные тормоза, лишние риски безопасности или просто странное поведение сервисов.