7. 设置 NIS 客户端

7.1. ypbind 守护进程

在您成功编译软件后,现在可以安装它了。ypbind 守护进程的合适位置是 /usr/sbin 目录。有些人可能会告诉您,在装有 NYS 的系统上不需要 ypbind。这是错误的。ypwhich 和 ypcat 始终需要它。

当然,您必须以 root 用户身份执行此操作。其他二进制文件(ypwhich、ypcat、yppasswd、yppoll、ypmatch)应放在所有用户都可以访问的目录中,通常是 /usr/bin。

较新版本的 ypbind 有一个名为 /etc/yp.conf 的配置文件。您可以在那里硬编码 NIS 服务器 - 更多信息请参阅 ypbind(8) 的手册页。NYS 也需要此文件。一个例子
ypserver 10.10.0.1
ypserver 10.0.100.8
ypserver 10.3.1.1

如果系统可以在没有 NIS 的情况下解析主机名,您可以使用名称,否则您必须使用 IP 地址。ypbind 3.3 有一个错误,只会使用最后一个条目(示例中的 ypserver 10.3.1.1)。所有其他条目都将被忽略。ypbind-mt 可以正确处理这个问题,并使用第一个响应的条目。

在将 ypbind 合并到启动文件中之前,测试 ypbind 可能是个好主意。要测试 ypbind,请执行以下操作

此时,您应该能够使用 NIS 客户端程序,如 ypcat 等。例如,ypcat passwd.byname 将为您提供整个 NIS 密码数据库。

重要提示:如果您跳过了测试步骤,请确保您已设置域名并创建了目录

    /var/yp

此目录必须存在,ypbind 才能成功启动。

要检查域名是否设置正确,请使用 yp-tools 2.2 中的 /bin/ypdomainname。它使用更严格的 yp_get_default_domain() 函数。例如,它不允许 “(none)” 域名,这是 Linux 下的默认设置,并且会产生很多问题。

如果测试成功,您现在可能想要更改启动文件,以便 ypbind 在启动时启动,并且您的系统将充当 NIS 客户端。确保在启动 ypbind 之前设置域名。

好了,就是这样。重启机器并查看启动消息,以查看 ypbind 是否实际启动。

7.2. 使用传统 NIS 设置 NIS 客户端

对于主机查找,您必须在您的查找顺序行中设置(或添加)“nis”/etc/host.conf文件。请阅读手册页 "resolv+.8" 了解更多详细信息。

将以下行添加到/etc/passwd在您的 NIS 客户端上

+::::::

您还可以使用 + 和 - 字符来包含/排除或更改用户。如果您想排除用户 guest,只需将 -guest 添加到您的/etc/passwd文件。您想为用户 “linux” 使用不同的 shell (例如 ksh) 吗?没问题,只需将 “+linux::::::/bin/ksh”(不带引号)添加到您的/etc/passwd

您不想更改的字段必须留空。您也可以使用 Netgroups 进行用户控制。

例如,要仅允许 miquels、dth 和 ed 以及 sysadmin netgroup 的所有成员登录访问,但要使所有其他用户的帐户数据可用,请使用

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

请注意,在 Linux 中,您还可以覆盖密码字段,就像我们在本示例中所做的那样。我们还删除了登录名 “ftp”,因此不再为人所知,匿名 ftp 将无法工作。

netgroup 看起来像这样
sysadmins (-,software,) (-,kukuk,)

重要提示:netgroup 功能从 libc 4.5.26 开始实现。如果您使用的 libc 版本早于 4.5.26,如果您运行 “ypbind”,则 NIS 密码数据库中的每个用户都可以访问您的 linux 机器!

7.3. 使用 NYS 设置 NIS 客户端

所需的只是 NIS 配置文件 (/etc/yp.conf) 指向其信息的正确服务器。此外,名称服务交换机配置文件 (/etc/nsswitch.conf) 必须正确设置。

您应该安装 ypbind。libc 不需要它,但 NIS(YP) 工具需要它。

如果您希望使用包含/排除用户功能 (+/-guest/+@admins),则必须在 nsswitch.conf 中使用 “passwd: compat” 和 “group: compat”。请注意,没有 “shadow: compat”!在这种情况下,您必须使用 “shadow: files nis”。

NYS 源代码是 libc 5 源代码的一部分。运行 configure 时,第一次对 “Values correct” 问题回答 “NO”,然后对 “Build a NYS libc from nys” 回答 “YES”。

7.4. 使用 glibc 2.x 设置 NIS 客户端

glibc 使用 “传统 NIS”,因此您需要启动 ypbind。名称服务交换机配置文件 (/etc/nsswitch.conf) 必须正确设置。如果您为 passwd、shadow 或 group 使用 compat 模式,则必须在此文件的末尾添加 “+”,并且可以使用包含/排除用户功能。配置与 Solaris 2.x 下完全相同。

7.5. nsswitch.conf 文件

网络服务交换机文件 /etc/nsswitch.conf 决定在请求特定信息时执行查找的顺序,就像 /etc/host.conf 文件决定执行主机查找的方式一样。例如,行

    hosts: files nis dns

指定主机查找函数应首先在本地 /etc/hosts 文件中查找,然后进行 NIS 查找,最后通过域名服务 (/etc/resolv.conf 和 named),如果在此时未找到匹配项,则返回错误。每个用户都必须可以读取此文件!您可以在手册页 nsswitch.5 或 nsswitch.conf.5 中找到更多信息。

适用于 NIS 的良好 /etc/nsswitch.conf 文件是
#
# /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 文档。

7.6. 使用 NIS 的 Shadow 密码

通过 NIS 使用 Shadow 密码始终不是一个好主意。您会失去 shadow 提供的安全性,并且只有少数 Linux C 库支持它。避免通过 NIS 使用 shadow 密码的一个好方法是将本地系统用户放入 /etc/shadow 中。从 shadow 数据库中删除 NIS 用户条目,并将密码放回 passwd 中。这样,您可以为 root 登录使用 shadow,为 NIS 用户使用普通 passwd。这样做的好处是它可以在每个 NIS 客户端上工作。

7.6.1. Linux

唯一支持通过 NIS 使用 shadow 密码的 Linux libc 是 GNU C Library 2.x。Linux libc5 不支持它。启用 NYS 编译的 Linux libc5 有一些用于它的代码。但是,此代码在某些情况下严重损坏,并且不适用于所有正确的 shadow 条目。

7.6.2. Solaris

Solaris 不支持通过 NIS 使用 shadow 密码。

7.6.3. PAM

如果您使用 pam_unix.so 模块或安装额外的 pam_unix2.so 模块,Linux-PAM 0.75 及更高版本支持通过 NIS 使用 Shadow 密码。使用 pam_pwdb/libpwdb 的旧系统(例如 Red Hat Linux 5.x)需要更改 /etc/pam.d/* 条目。所有 pam_pwdb 规则都应通过 pam_unix_* 模块替换。

一个 /etc/pam.d/login 文件示例看起来像

#%PAM-1.0
auth     requisite      pam_unix2.so            nullok #set_secrpc
auth     required       pam_securetty.so
auth     required       pam_nologin.so
auth     required       pam_env.so
auth     required       pam_mail.so
account  required       pam_unix2.so
password required       pam_pwcheck.so          nullok
password required       pam_unix2.so            nullok use_first_pass use_authtok
session  required       pam_unix2.so            none # debug or trace
session  required       pam_limits.so