13.8. 使用 passwd 和 group 映射

NIS 的主要应用之一是在 NIS 域中所有主机上同步用户和帐户信息。因此,您通常只保留一个小的本地/etc/passwd文件,NIS 映射中的站点范围信息会附加到该文件。然而,仅仅在以下文件中为此服务启用 NIS 查找是不够的nsswitch.conf远远不够。

当依赖 NIS 分发的密码信息时,您首先必须确保本地文件中任何用户的数字用户 IDpasswd文件与 NIS 服务器对用户 ID 的理解相匹配。用户 ID 的一致性对于其他目的也很重要,例如从网络中其他主机挂载 NFS 卷。

如果以下文件中的任何数字 ID/etc/passwd/etc/group与映射中的 ID 不同,您必须调整属于该用户的所有文件的文件所有权。首先,您应该更改以下文件中的所有 uid 和 gidpasswdgroup为新值,然后找到所有属于刚刚更改的用户的的文件并更改其所有权。假设 news 以前的用户 ID 为 9,而 okir 的用户 ID 为 103,它们被更改为其他值;然后您可以以 root 用户身份发出以下命令
# find / -uid   9 -print >/tmp/uid.9
# find / -uid 103 -print >/tmp/uid.103
# cat /tmp/uid.9   | xargs chown news
# cat /tmp/uid.103 | xargs chown okir

重要的是,您需要使用新的passwd文件安装后执行这些命令,并在更改任何文件的所有权之前收集所有文件名。要更新文件的组所有权,请使用类似的方法,但使用 gid 而不是 uid,以及 chgrp 而不是 chown。

完成此操作后,系统上的数字 uid 和 gid 将与 NIS 域中所有其他主机上的 uid 和 gid 一致。下一步是将配置行添加到nsswitch.conf以启用用户和组信息的 NIS 查找
# /etc/nsswitch.conf - passwd and group treatment
passwd: nis files
group:  nis files

这会影响 login 命令及其所有相关命令查找用户信息的位置。当用户尝试登录时,login 首先查询 NIS 映射,如果查找失败,则回退到本地文件。通常,您将从本地文件中删除几乎所有用户,并且只在其中保留 root 和通用帐户(如 mail)的条目。这是因为一些重要的系统任务可能必须将 uid 映射到用户名,反之亦然。例如,管理 cron 作业可能会执行su命令以临时成为 news,或者 UUCP 子系统可能会邮寄状态报告。如果 newsuucp 在本地passwd文件中没有条目,这些作业将在 NIS 服务中断期间惨败。

最后,如果您使用的是旧的 NIS 实现(由passwdgroupNYS 或 glibc 实现中的文件的 compat 模式支持),则必须将笨拙的特殊条目插入其中。这些条目表示 NIS 派生的记录将插入到信息数据库中的位置。条目可以添加到任何位置,但通常只是添加到末尾。要为以下文件添加的条目是/etc/passwd文件是
+::::::
以及对于/etc/groups文件
+:::

对于 glibc 2.x 和 NYS,您都可以通过创建登录名前面带有“+”的条目来覆盖从 NIS 服务器接收的用户记录中的参数,并通过创建登录名前面带有“ -”的条目来排除指定的用户。例如,以下条目
+stuart::::::/bin/jacl
-jedd::::::
将覆盖 NIS 服务器为用户 stuart 提供的 shell,并将禁止用户 jedd 在此计算机上登录。任何留空的字段都使用 NIS 服务器提供的信息。

这里有两个重要的注意事项。首先,到目前为止描述的设置仅适用于不使用影子密码的登录套件。在下一节中将讨论将影子密码与 NIS 一起使用的复杂性。其次,登录命令不是唯一访问passwd文件的命令 — 请查看 ls 命令,大多数人几乎 постоянно 使用它。每当编译长列表时,ls 都会显示文件的用户和组所有者的符号名称;也就是说,对于它遇到的每个 uid 和 gid,它都必须查询 NIS 服务器。NIS 查询的执行时间比在本地文件中进行等效查找的时间稍长。您可能会发现共享您的passwdgroup信息使用 NIS 会导致某些频繁使用此信息的程序的性能显着下降。

然而,这还不是全部。想象一下,如果用户想要更改她的密码会发生什么。通常,她会调用 passwd,它会读取新密码并更新本地passwd文件。这对于 NIS 来说是不可能的,因为该文件在本地不再可用,但是让用户每次想要更改密码时都登录到 NIS 服务器也不是一个选择。因此,NIS 提供了一个 passwd 的直接替代品,称为 yppasswd,它处理 NIS 下的密码更改。要在服务器主机上更改密码,它通过 RPC 联系该主机上的 yppasswdd 守护程序,并向其提供更新的密码信息。通常,您可以通过执行类似以下操作来在普通程序之上安装 yppasswd
# cd /bin
# mv passwd passwd.old
# ln yppasswd passwd

同时,您必须在服务器上安装 rpc.yppasswdd 并从网络脚本启动它。这将有效地对您的用户隐藏 NIS 的任何曲折。