Next Previous Contents

## 6. Что нужно сделать для настройки NIS?

## 6.1 Определите что вам нужно: сервер, подчиненный сервер или клиент.

Чтобы ответить на этот вопросы вы должны рассмотреть два случая:

1. Ваша машина входит в сеть, где уже есть NIS серверы
2. Вы пока не имеете никаких NIS серверов в сети

В первом случае, вам нужны только клиентские программы (ypbind, ypwhich, ypcat, yppoll, ypmatch). Самой важной программой является ypbind. Эта программа должна быть запущена всегда, она должна всегда быть в списке процессов. Эта программа является демоном и должна запускаться при старте системы (например из файлов /etc/init.d/nis, /sbin/init.d/ypclient, /etc/rc.d/init.d/ypbind, /etc/rc.local). Как только демон ypbind запущен в вашей системе, она становится клиентом NIS.

Во втором случае, если вы не имеете NIS серверов, то вам таже понадобится и NIS сервер (программа обычно называется ypserv). Секция Установка Сервера NIS описывает как установить сервер NIS на вашей Linux машине, используя реализацию "ypserv" авторов Peter Eriksson и Thorsten Kukuk. Заметим что начиная с версии 0.14 данная реализация поддерживает концепцию мастер-подчиненный о которой мы говорили в секции 4.1.

Имеется также другая свободная реализация сервера NIS, называемая "yps", которую написал Tobias Reber из Germany и которая не поддерживает концепцию мастер-подчиненный и имеет другие ограничения и уже давно не поддерживается.

## 6.2 Программное обеспечение

Системная библиотека "/usr/lib/libc.a" (версии 4.4.2 и выше) или динамическая библиотека "/lib/libc.so.x" содержит все необходимые системные вызовы для успешной компиляции клиента и сервера NIS. Для библиотеки GNU C 2 (glibc 2.x), также нужна библиотека /lib/libnsl.so.1.

Некоторые люди говорят, что NIS работает только с "/usr/lib/libc.a" версии 4.5.21 м выше, так что если вы хотите, чтобы все было хорошо сразу, не используйте старые версии. Клиент NIS может быть получен отсюда:

> `

>       Site                  Directory                        File Name

>       ftp.kernel.org        /pub/linux/utils/net/NIS         yp-tools-2.2.tar.gz
>       ftp.kernel.org        /pub/linux/utils/net/NIS         ypbind-mt-1.4.tar.gz
>       ftp.kernel.org        /pub/linux/utils/net/NIS         ypbind-3.3.tar.gz
>       ftp.kernel.org        /pub/linux/utils/net/NIS         ypbind-3.3-glibc5.diff.gz
>       ftp.uni-paderborn.de  /linux/local/yp                  yp-clients-2.2.tar.gz

> `

Когда вы получили клиента, пожалуйста следуйте инструкциям, которые идут с клиентом. yp-clients 2.2 может использоваться как с libc4 так и с libc5 до версии 5.4.20. Для libc 5.4.21 и glibc 2.x нужны yp-tools версии 1.4.1 или выше. Новые yp-tools 2.2 должны работать с любым Linux libc. Так как в более ранних версиях libc, в коде NIS был найдена ошибка, вам не нужны версии libc 5.4.21-5.4.35. Используйте libc 5.4.36 или выше вместо них или большинство программ YP работать не будут. ypbind 3.3 также будет работать со всеми библиотеками. Если вы используете gcc 2.8.x или выше, egcs или glibc 2.x, вы должны добавить исправления ypbind-3.3-glibc5.diff для ypbind 3.3. Пожалуйста никогда не используйте ypbind от yp-clients 2.2. ypbind-mt - это новый демон, использующий нити (треды). Ему нужно ядро Linux версии 2.2 и glibc 2.1 или выше.

## 6.3 Демон ypbind

После того как вы успешно скомпилировали программное обеспечение, вы готовы установить его. Наилучшее место для демона ypbind - это каталог /usr/sbin. Некоторые люди могу сказать вам, что вам не нужен ypbind в системе с NYS. Это неверно. Он нужен для ypwhich и ypcat.

Разумеется вы должны устанавливать демон с правами суперпользователя root. Другие программы (ypwhich, ypcat, yppasswd, yppoll, ypmatch) должны быть в каталогах доступных всем пользователям, обычно в /usr/bin.

Новые версии ypbind имеют файл с настройками, называемый /etc/yp.conf. С помощью него вы можете настроить NIS сервер - для подробностей смотрите страницу руководства man ypbind(8). Это файл вам также понадобится для NYS. Пример:

> `

>       ypserver voyager
>       ypserver defiant
>       ypserver ds9

> `

Если система может получить имена узлов (отрезолвить) без NIS, то вы можете использовать имя, в противном случае вы должны использовать IP адрес. ypbind 3.3 имеет ошибку и будет использовать только последнюю запись (запись ypserver ds9 в примере выше). Все другие записи игнорируются. ypbind-mt управляет записями корректно и использует ту, сервер прописанный в которой отвечает первым.

Хорошо бы протестировать ypbind перед тем как включить его в работу при старте системы. Для тестирования ypbind надо сделать следующее:

- Убедитесь, что вы задали имена YP-доменов. Если вы это не сделали, то выполните команду

  > `

  >                 /bin/domainname nis.domain

  > `

  где nis.domain должен быть некоторой строкой обычно _НЕ_ соответствующей имени DNS-домена вашей машины! Причина этого в том, что при одинаковых именах доменов, хакерам снаружи предоставляется маленькая возможность получить базу данных паролей с ваших серверов NIS. Если вы не знаете какое имя NIS-домена в вашей сети, спросите у вашего администратора системы/сети.
- Запустите "/usr/sbin/portmap", если он уже не запущен.
- Создайте каталог "/var/yp", если он не существует.
- Запустите "/usr/sbin/ypbind"
- Используйте команду "rpcinfo -p localhost" чтобы проверить, что ypbind доступа регистрация своей службы с portmapper. Вы должны получить:

  > `

  >            program vers proto   port
  >             100000    2   tcp    111  portmapper
  >             100000    2   udp    111  portmapper
  >             100007    2   udp    637  ypbind
  >             100007    2   tcp    639  ypbind

  > `

  или

  > `

  >            program vers proto   port
  >             100000    2   tcp    111  portmapper
  >             100000    2   udp    111  portmapper
  >             100007    2   udp    758  ypbind
  >             100007    1   udp    758  ypbind
  >             100007    2   tcp    761  ypbind
  >             100007    1   tcp    761  ypbind

  > `

  В зависимости от версии ypbind которую вы используете.
- Вы можете также запустить "rpcinfo -u localhost ypbind". Эта команда должна выдать следующее:

  > `

  >             program 100007 version 2 ready and waiting

  > `

  или

  > `

  >             program 100007 version 1 ready and waiting
  >             program 100007 version 2 ready and waiting

  > `

  в зависимости от версии ypbind, которая установлена. Важным является только сообщение "version 2".

После этого вам должно быть доступно использование клиентских программ NIS, таких как ypcat, и т.д. Например, "ypcat passwd.byname" даст вам базу данных паролей NIS.

ВАЖНО: Если вы пропустите процедуру тестирования, то убедитесь что вы задали имя домена и создали каталог

> `

>         /var/yp

> `

Данный каталог ДОЛЖЕН существовать для того, чтобы запуск ypbind был успешен.

Для проверки корректности установки имени домена, используйте /bin/ypdomainname из yp-tools 2.2. Эта программа использует функцию yp_get_default_domain(), которая более ограничена. Она не позволяет например задавать имя домена "(none)", которое устанавливается по умолчанию в Linux и может создать большое количество проблем.

Если тест работает, то вы можете теперь захотеть изменить ваши файлы старта системы таким образом, чтобы ypbind запускался во время загрузки и ваша система становилась клиентом NIS. Убедитесь, что имя домена установлено перед тем как запускать ypbind.

Хорошо. Теперь перегрузите машину и смотрите сообщения, выдаваемые при загрузке, чтобы увидеть, что ypbind действительно запустился.

## 6.4 Установка клиента NIS используя традиционоык OIS

Для поиска узлов вы должны установить (или добавить) запись "nis" в строку lookup order в файле /etc/host.conf. Пожалуйста прочтите станицу руководства man "resolv+(8)" для подробностей.

Добавьте следующую строку в файл /etc/passwd на машинах NIS-клиентах:

> `

>     +::::::

> `

Вы можете также использовать символы + и - для добавления/исключения или изменения пользователей. Если вы хотите исключить пользователя guest, то просто добавьте -guest в файл /etc/passwd file. Вы хотите использовать другой интерпретатор команд (например ksh) для пользователя "linux"? Нет проблем, просто добавьте "+linux::::::/bin/ksh" (без кавычек) в файл /etc/passwd. Поля, которые вам не нужно изменять вы должны оставить пустыми. Вы можете также использовать Netgroups для управления пользователем.

Например, для того, чтобы разрешить вход в систему только пользователям miquels, dth и ed, и всем членам сетевой группы sysadmin, но при этом чтобы была доступна информация о всех других пользователях, используйте:

> `

>           +miquels:::::::
>           +ed:::::::
>           +dth:::::::
>           +@sysadmins:::::::
>           -ftp
>           +:*::::::/etc/NoShell

> `

Заметим, что в Linux вы можете также перекрыть поле пароля, как мы делали в этом примере. Мы также удалили имя "ftp", так что оно стало неизвестным и anonymous ftp работать не будет.

Сетевая группа может выглядеть так

> `

>     sysadmins (-,software,) (-,kukuk,)

> `

ВАЖНО: Возможность работы с сетевой группой реализуется начиная с libc 4.5.26. Если вы имеете версию libc младше 4.5.26, каждый пользователь в базе данных паролей NIS может иметь доступ к вашей linux машине, если вы запустили "ypbind" !

## 6.5 Установка клиента NIS используя NYS

Все что требуется - это файл с настройками NIS (/etc/yp.conf) с корректной информацией о сервере (серверах). Также, должен быть корректно установлен файл с настройками Переключателя Служб Имен (/etc/nsswitch.conf).

Вы должны установить ypbind. Это не требует libc, но требуется для утилит NIS(YP).

Если вы желаете использовать возможности добавления/удаления пользователя (+/-guest/+@admins), вы должны использовать "passwd: compat" и "group: compat" в файле nsswitch.conf. Заметим, что там нет строчки "shadow: compat"! Вы должны использовать "shadow: files nis" в этом случае.

Исходные тексты NYS являются частью исходных текстов libc 5. Когда вы запускаете configure, сперва скажите "NO" на вопрос "Values correct", затем "YES" на вопрос "Build a NYS libc from nys".

## 6.6 Установка клиента NIS Client используя glibc 2.x

glibc использует "традиционную NIS", так что вам нужно просто запустить ypbind. Файл с настройками Переключателя Служб Имен (/etc/nsswitch.conf) должен быть корректно установлен. Если вы используете режим compat для passwd, shadow или group, вы должны добавить "+" в конец этих файлов и вы можете использовать возможность добавления/исключения пользователей. Настройка точно такая же как в Solaris 2.x.

## 6.7 Файл nsswitch.conf

Файл Переключателя Служб Имен /etc/nsswitch.conf определяет порядок поиска, который выполняется когда требуется определенный кусок информации, также как файл /etc/host.conf, который определяет способ выполнения поиска узлов. Например, строка

> `

>         hosts: files nis dns

> `

говорит, что функции поиска узлов должны сперва смотреть в локальный файл /etc/hosts, затем производить поиск через NIS и наконец использовать службу доменных имен (/etc/resolv.conf и демон named), и если нужный узел не найден, возвратить ошибку. Данный файл должен быть доступен на чтение для любого пользователя! Вы можете найти больше информации на станице руководства nsswitch(5) или nsswitch.conf(5).

Хороший файл /etc/nsswitch.conf для NIS это:

> `

>      #
>      # /etc/nsswitch.conf
>      #
>      # An example Name Service Switch config file. This file should be
>      # sorted with the most-used services at the beginning.
>      #
>      # The entry '[NOTFOUND=return]' means that the search for an
>      # entry should stop if the search in the previous entry turned
>      # up nothing. Note that if the search failed due to some other reason
>      # (like no NIS server responding) then the search continues with the
>      # next entry.
>      #
>      # Legal entries are:
>      #
>      #       nisplus                 Use NIS+ (NIS version 3)
>      #       nis                     Use NIS (NIS version 2), also called YP
>      #       dns                     Use DNS (Domain Name Service)
>      #       files                   Use the local files
>      #       db                      Use the /var/db databases
>      #       [NOTFOUND=return]       Stop searching if not found so far
>      #

>      passwd:     compat
>      group:      compat
>      # For libc5, you must use shadow: files nis
>      shadow:     compat

>      passwd_compat: nis
>      group_compat: nis
>      shadow_compat: nis

>      hosts:      nis files dns

>      services:   nis [NOTFOUND=return] files
>      networks:   nis [NOTFOUND=return] files
>      protocols:  nis [NOTFOUND=return] files
>      rpc:        nis [NOTFOUND=return] files
>      ethers:     nis [NOTFOUND=return] files
>      netmasks:   nis [NOTFOUND=return] files
>      netgroup:   nis
>      bootparams: nis [NOTFOUND=return] files
>      publickey:  nis [NOTFOUND=return] files
>      automount:  files
>      aliases:    nis [NOTFOUND=return] files

> `

passwd_compat, group_compat и shadow_compat поддерживаются только glibc 2.x. Если в файле /etc/nsswitch.conf нет правил для shadow, glibc будет использовать для поиска правило passwd. Для glibc имеет несколько больше модулей для поиска таких как hesoid. Для подробностей смотрите документацию на glibc.

## 6.8 Теневые пароли в NIS

Теневые пароли через NIS всегда плохая идея. Вы теряете безопасность, которую дают вам теневые пароли и кроме того такая возможность поддерживается только некоторыми библиотеками C в Linux. Хорошая идея в использовании теневых паролей с NIS состоит в том, чтобы поместить в /etc/shadow только локальных системных пользователей. Удалите записи о пользователях NIS из базы данных теневых паролей или поместите пароли обратно в файл /etc/passwd. Вы можете использовать теневой пароль для пользователя root и обычный пароль для пользователя NIS. Это будет работать с любым клиентом NIS.

Linux

  Только библиотека GNU C 2.x в Linux поддерживает теневые пароли через NIS. Linux libc5 скомпилированная с NYS также имеет возможности для этого. Но код в ней плохо работает в некоторых случаях и может работать не всегда корректно.

Solaris

  Solaris не имеет поддержку теневых паролей через NIS.

PAM

  PAM не поддерживает теневых паролей через NIS, особенно pam_pwdb/libpwdb. Это большая проблема для пользователей RedHat 5.x. Если вы имеете glibc и PAM, вам нужно изменить значения /etc/pam.d/*. Замените все правила pam_pwdb на pam_unix_* модули. Но из-за ошибки в pam_unix_auth.so это не всегда работает.

  Пример файла /etc/pam.d/login:

  > `

  >      #%PAM-1.0
  >      auth       required     /lib/security/pam_securetty.so
  >      auth       required     /lib/security/pam_unix_auth.so
  >      auth       required     /lib/security/pam_nologin.so
  >      account    required     /lib/security/pam_unix_acct.so
  >      password   required     /lib/security/pam_unix_passwd.so
  >      session    required     /lib/security/pam_unix_session.so

  > `

  Для auth вам нужно использовать модуль pam_unix_auth.so, для account модуль pam_unix_acct.so, для password модуль pam_unix_passwd.so и для session модуль pam_unix_session.so.

Next Previous Contents