Сетевая информационная служба NIS (Network Information Service) - это административная база данных, реализующая централизованное сопровождение и автоматическое распространение важных административных файлов.

NIS позволяет преобразовать ряд стандартных файлов Unix в базы данных, к которым можно обращаться по сети. Такие базы данных называются картами NIS. Некоторые карты создаются из файлов, с которыми вы знакомы по системному администрированию, - в частности, из файла паролей (/etc/passwd) и файла групп (/etc/group). Прочие являются производными от файлов, связанных с сетевым администрированием:

/etc/ethers Источни к NIS-кар т ethers.byaddr и ethers.by пате. Фай л /etc/ethers используется в работе RARP (см. главу 2).

  • /etc/hosts Источник карт hosts.byname и hosts.byaddr (см. главу 3).
  • /etc/networks Источник карт networks.byname и networks.byaddr (см. главу 3).
  • /etc/protocols Источник карт protocols.by пате и protocols.byaddr (см. главу 2).
  • /etc/services Источник одной карты - services.byname (см. главу 2).
  • /etc/aliases Определяет псевдонимы для адресов электронной почты и служит источником карт mail.aliases и mailbyaddr (см. главу 10).

Определить, какие карты доступны на сервере, можно при помощи команды ypcat -х. Данная команда выводит одинаковый список для наших тестовых систем Solaris и Linux. Список для вашего сервера может отличаться. Вот список, полученный в системе Linux:

% ypcat -х 
Use "passwd" for ma p "passwd.byname"
Use "group" for ma p "group.byname" 
Use "networks" for ma p "networks.byaddr" 
Use "hosts" for ma p "hosts.byname" 
Use "protocols" for ma p "protocols.bynumber" 
Use "services" for ma p "services.byname" 
Use "aliases" for ma p "mail.aliases" 
Use "ethers" for ma p "ethers.byname"

MIS позволяет централизованно хранить на сервере важные административные файлы, предоставляя доступ к ним всем рабочим станциям сети. Все карты хранятся на головном сервере, выполняющем серверный процесс NIS - ypserv. Клиентские системы обращаются к картам по сети. Клиенты используют ypbind для обнаружения сервера.


Сервер NIS и его клиенты составляют домен NIS. Этот термин NIS делит с DNS. Домен NIS обозначается доменным именем NIS. Единственное предъявляемое к именам требование заключается в том, что в пределах одной локальной сети различные домены NIS должны иметь разные имена. Хотя домены NIS и DNS - различные сущности, но Sun рекомендует использовать в качестве имен NIS-доменов имена DNS-доменов, чтобы упростить администрирование и избежать путаницы.

NIS использует имя своего домена при создании подкаталога в иерархии /var/ ур для хранения карт. Например, домен DNS нашей воображаемой сети носит имя wrotethebook.com, и такое же имя мы используем для нашего домена NIS. NIS создает каталог /var/ур/wrotethebook.com и хранит в нем карты NIS.

Протоколы и команды NIS изначально были определены компанией Sun Microsystems, однако сама служба в настоящее время получила широкое распространение в различных реализациях. Многочисленные примеры этого раздела относятся к системе Linux, а не Solaris, и замечательно иллюстрируют этот факт. Синтаксис команд в различных системах весьма схож.

Команда domainname позволяет узнать либо задать имя домена NIS. Суперпользователь может сделать wrotethebook.com именем домена NIS, выполнив следующую команду:

# domainname wrotethebook.com

Имя домена NIS обычно указывается в процессе загрузки системы - с этой целью команда domainname помещается в один из загрузочных сценариев. Во многих системах имя домена NIS, выступающее в качестве аргумента команды domainname, хранится в отдельном файле. Так, в системах Solaris значение имени домена NIS извлекается из файла /etc/defaultdomain. Как видно из следующего примера, defaultdomain содержит только имя домена NIS:

% cat /etc/defaultdomain 
wrotethebook.com

В системах Red Hat Linux имя домена NIS - лишь одно из значений, хранящихся в файле /etc/sysconfig/network:

$ cat /etc/sysconfig/network 
NETWORKING=yes
HOSTNAME=jerboas.wrotethebook.com 
NISDOMAIN=wrotethebook.com

Инициализация сервера NIS и создание первых вариантов карт выполняется при помощи make. Файл /var/ур/Makefil e содержит инструкции, необходимые для сборки карт. Как уже говорилось, каталог для карт получает имя, совпадающее с именем домена NIS. Makefile читает файлы из каталога /etc и сохраняет созданные на их основе карты в новом каталоге. Чтобы инициализировать систему Linux в качестве сервера NIS, выполните подобную последовательность команд:

# domainname wrotethebook.com 
# cd /var/ур 
# make 
make[1]: Entering directory '/var/yp/wrotethebook.com' 
Updating hosts.byname... 
Updating hosts.byaddr... 
Updating networks.byaddr... 
Updating networks.byname... 
Updating protocols.bynumber... 
Updating protocols.byname... 
Updating rpc.byname... 
Updating rpc.bynumber... 
Updating services.byname... 
Updating passwd.byname.., 
Updating passwd.byuid... 
Updating group.byname... 
Updating group.bygid... 
Updating netid.byname... 
make[1]: Leaving directory '/var/yp/wrotethebook.com'

После инициализации карт запустите процесс сервера NIS ypse rv и связую- щий процесс NIS - ypbind:

# ypserv 
# ypbind

Наша система теперь выступает в роли как NIS-сервера, так и NIS-клиента. Быстрая проверка при помощи ypwhich показывает, что мы связаны с нужным сервером. Воспользуйтесь ypcat или ypmatch, чтобы убедиться, что данные с сервера действительно доступны. В следующем примере мы используем ypcat:

# ypwhich 
localhost 
# ypcat hosts 
172.16.55.105 cow cow.wrotethebook.com 
172.16.55.106 pig pig.wrotethebook.com
172.16.26.36 island.wrotethebook.com island 
127.0.0.1 localhost

Клиентам остается только указать корректное доменное имя и выполнить приложение связующего модуля - ypbind:

# domainname wrotethebook.com 
# ypbind

Большинство клиентов NIS для обнаружения сервера используют ypbind. Исходя из имени домена NIS, ypbind передает широковещательный запрос к серверу этого домена. К первому из ответивших серверов и «привязывается» клиент. Теория гласит, что сервер, ответивший быстрее прочих, имеет наи- меньшую загрузку. Как правило, гипотеза работает хорошо. Тем не менее существует вероятность привязки клиента к неподходящей системе, а именно к системе, на которой случайно оказался установлен сервер ypserv, либо к системе, которую специально настроили в качестве ложного сервера. Принимая во внимание такую возможность, некоторые системы позволяют явным образом указать сервер, с которым общается клиент. Этой цели в Linux служит файл /etc/yp.conf. Синтаксис записей файла варьируется от версии к версии, поэтому обратитесь к документации по своей системе, прежде чем использовать файл.

Поместите имя домена NIS в подходящий загрузочный файл, чтобы настройки NIS продолжали действовать и после перезагрузки. Команды ypbind и ypserv, вероятно, уже присутствуют в одном из загрузочных сценариев. В системе Red Hat Linux программам ypbind и ypserv соответствуют специальные сценарии в каталоге /etc/init.d. Поместив значение NISDOMAIN в /etc/ sysconfig/network, не забудьте при помощи команды chkconfig убедиться, что сценарии ypbind и ypserv выполняются в процессе загрузки системы.

NIS является возможной альтернативой DNS, однако в большинстве систем применяется как NIS, так и DNS. Преобразование имен узлов в IP-адреса может быть возложено на DNS, NIS и таблицу узлов. Порядок опроса различных источников определяется в файле nsswitch.conf.