Введение

Механизм операционной системы "Коммутатор службы имен" (Name Service Switch, NSS) — это интерфейс glibc, который связывает компьютер с различными источниками общих баз данных конфигурации и механизмами разрешения имен. К этим источникам относятся локальные файлы операционной системы (такие как /etc/passwd, /etc/group и /etc/hosts), Система доменных имен (DNS), Сетевая информационная служба (NIS, NIS+) и LDAP.

История

Ранние Unix-подобные системы имели доступ либо только к локальным файлам, либо использовали жёстко заданные правила доступа к файлам или сетевым базам данных. Ultrix был заметным исключением, обладая почти идентичной функциональностью конфигурационного файла NSS. Sun Microsystems впервые разработала NSS для своей операционной системы Solaris. Соответствие Solaris стандарту SVR4, который Sun Microsystems и AT&T Unix System Laboratories совместно разработали, объединив UNIX System V, BSD и Xenix, требовало, чтобы сторонние разработчики могли подключать реализации служб имён для выбранного транспортного уровня (OSI или IP) без переписывания приложений RPC (TI RPC), соответствующих SVR4, или перекомпиляции операционной системы. Sun представила службу каталогов NIS+ в Solaris для замены NIS, что требовало одновременного существования обеих служб каталогов в организации для упрощения перехода. Инженеры Sun Томас Маслен и Санджай Дани первыми разработали и реализовали Name Service Switch, выполнив требования Solaris с помощью спецификации файла nsswitch.conf и решения загружать модули доступа к базам данных как динамически подключаемые библиотеки, что также впервые реализовала Sun. Изначальный дизайн инженеров Sun конфигурационного файла и загрузки библиотек служб имён во время выполнения оказался устойчивым к изменениям, поскольку операционные системы развивались и появлялись новые службы имён. На протяжении многих лет программисты портировали конфигурационный файл NSS с почти идентичными реализациями во многие другие операционные системы, включая FreeBSD, NetBSD, Linux, HP-UX, IRIX и AIX. Спустя более двух десятилетий после изобретения NSS, GNU libc реализует его практически без изменений.