|
|
|
|
| Linux网络管理员手册(10) 第十章 网络信息系统 NIS NYS |
|
| 作者:武汉SEO闵涛 文章来源:敏韬网 点击数2290 更新时间:2009/4/22 20:48:14 文章录入:mintao 责任编辑:mintao |
|
|
|
10.1显示了一个更完整的例子,它引入了nsswitch.conf的另一个特性:hosts条目中的[NOTFOUND=return]关键字通知NYS,如果在NIS或DNS数据库中没有找到所要的项就返回。也即,只有在向NIS和DNS服务器的呼叫由于某些其它原因失败时,NYS才将继续搜寻本地文件。因此,本地文件只在启动引导期间使用并且当NIS服务器关闭时起一个备份的作用。
# /etc/nsswitch.conf # hosts: nis dns [NOTFOUND=return] files networks: nis [NOTFOUND=return] files
services: files nis protocols: files nis rpc: files nis
图10.1 nsswitch.conf样本文件。
10.7 使用passwd和group Maps NIS的一个主要应用是在一个NIS域中的所有主机上同步用户以及帐目信息。关于这方面,你通常只保存了一个小的本地/etc/passwd文件,对于这个文件,从NIS maps获得的站点范围的信息被添加了进去。然而,只是简单地在nsswitch.conf中为这个服务启用NIS查找还不很够。 当引用NIS描述的口令信息时,你必须首先确信在你本地passwd文件中任何用户的数值用户id与NIS服务器的用户id匹配。同样对于其它目的你也会需要这样的,比如从你的网络中其它主机上加载NFS卷时。 如果/etc/passwd或/etc/group中的任何数值id与maps中的相偏离,你必须为属于那个用户的所有文件调整文件的所有权。首先你必须将passwd和group中的uid和gid改成一个新值;然后找出属于刚改变的用户的所有文件,最后改变这些文件的所有权。假设news曾有一个id为9,而okir有一个id为103,它们将被改成其它值;那么你可以发出以下的命令:
# 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文件执行这些命令,并且在改变任何文件的所有权之前收集所有文件的名字,这点很重要。为了更新文件的组所有权,你将使用一个类似的命令。 在做完这些工作之后,你系统上的数值uid和gid将与你的NIS域中所有其它主机上的相匹配。下一步将是在nsswitch.conf中增加配置行,它为用户和组信息启用NIS查找:
# /etc/nsswitch.conf – passwd and group treatment passwd: nis files group: nis files
这使得在一个用户试图登录时,login命令和所有其它类似命令首先查询NIS maps,如果这个查找失败时,再返回使用本地文件。一般来讲,你将从你的本地文件中删除所有的用户,而只留下root和象mail一样的通用帐目。这是因为某些至关重要的系统任务可能需要将uid映射到用户名上或者反之。例如,管理用的cron作业可能会执行su命令来临时变成news,或者UUCP子系统可能要邮寄一个状态报告。如果news和uucp在本地passwd文件中没有条目了,那么在NIS不能使用期间这些作业将糟糕地失败。 这里有两个大告戒:一方面,上面所描述的设置在这里只适应于没有使用影子(shadow)口令的登录状况,象那些包括在util-linux软件包中的。与NIS一起使用影子口令的复杂问题将在下面论及。另一方面,登录命令并不是仅有的访问passwd文件的命令—请看许多人几乎一直使用的ls命令。每当进行一次长列表时,ls将显示一个文件的用户和组的宿主的符号名;也即,对于它遇到的每个uid和gid,它就要查询NIS服务器一次。如果你的本地网络受到阻塞时将严重地拖延进行的工作,或者更糟糕的是,当NIS服务器不在同一个物理网络上时,数据报还必须通过路由器传输。 事情还没结束。想象以下如果一个用户想要更改她的口令时会发生什么情况。通常,她会执行passwd,它将读入新的口令并更新本地passwd文件。对于NIS来说,这是不可能的,因为这个文件已不再存在于本地了,但是每当用户想要改变他们的口令时就让他们登录进NIS也不是个选择。因此,NIS提供了一个对passwd的混入替换称为yppasswd,它用来在目前的NIS中做类似的工作。为了改变服务器主机上的口令,它通过RPC联系那个主机上的yppasswdd后台程序,并向它提供更新过的口令信息。通常,你通过象这样做在常规程序上安装yppasswd:
# cd /bin # mv passwd passwd.old # ln yppasswd passwd
与此同时你必须在服务器上安装rpc.yppasswdd并从rc.inet2中启动它。这将对你的用户有效地隐藏NIS所带来的任何扭曲。
10.8 使用支持影子(shadow)的NIS 至今还没有对使用影子登录程序组的站点的NIS支持。John F. Haugh,影子程序组的作者,最近往comp.sources.misc发布了一个受GNU库的GPL保护的影子库函数的一个版本。它对NIS已经有了一些支持,但还不完整,并且这些函数还没有加入到标准C库中。另一方面来讲,通过NIS之类公布来自于/etc/shadow中的信息是与shadow组件的目的相违背的。 尽管NYS口令查找函数不使用shadow.byname map或任何这类map,NYS还是支持透明地使用一个本地/etc/shadow文件的。当getpwnam的NYS实现被调用来查找与给定的登录名相关的信息时,nsswitch.conf中的passwd条目所指定的设施被检索。nis服务将简单地在NIS服务器的passwd.byname map中查找这个名字。而files服务将检查/etc/shadow是否存在,并且如果存在的话,就试着打开它。如果不存在的话,或者如果用户没有root特权的话,它就返回到只在/etc/passwd中查找用户信息的传统的处理方法中。然而,如果shadow文件存在,并且能被打开的话,NYS将从shadow中抽取用户的口令。getpwuid 函数也是这样实现的。在这种方式下,用NYS编译的执行文件将透明地处理本地影子组件的安装。
10.9 使用传统的NIS代码 如果你使用目前在标准C库中的客户代码的话,那么配置一个NIS客户就稍微有些不同。一方面,它使用一个ypbind后台程序(daemon)来广播查询运行着的服务器而不是从一个配置文件中取得(服务器)信息的。因此,你必须确信在启动期间开始运行ypbind。它必须在NIS域已被设置好并且RPC portmapper已启动后才被调用。此时,上面所示的调用ypcat进行对服务器测试才能工作。 最近,有许多有关NIS出错报告(bug reports),出错信息说“clntudp_create: RPC: portmapper failure – RPC: unable to receive”。这是由于对ypbind与库函数有关绑定信息的通信(沟通)方式的不兼容的改动。取得最新有关NIS工具的最新源程序并重新编译之可以解决这个问题。[5] 同样,传统的NIS确定是否要和如何将NIS信息与本地文件中的信息合并的方法与NYS中所使用的方法是有偏差的。例如,为了使用NIS口令maps,你必须在/etc/passwd map中包含下列行:
+:*:O:O:::
这标记出口令查找函数“插入”NIS maps的地方。往/etc/group中插入类似的一行(去掉最后两个冒号)会对group.* maps做出同样的事。为了使用NIS分发的hosts.* maps,只要改动host.conf文件中的order一行。例如,如果你要使用NIS、DNS以及/etc/hosts文件(以这个顺序),你必须将这行改成
order yp bind hosts
目前,传统的NIS实现不支持任何其它的maps。
注释 [1] 可以用swen@uni-paderborn.de与他联系。NIS客户程序以yp-linux.tar.gz的形式在matlab.unc.edu上的system/Network中有。 [2] 当前的版本(在写作本书时)是yps-0.21并且可以从ftp.lysator.liu.se的/pub/NYS目录中取得。 [3] 可以用pen@lysator.liu.se与他联系。 [4] DBM是一个简单的数据库管理库,它使用杂凑技术(hashing technigues)来加速查询操作。GNU计划有它的一个免费实现,称为gdbm,它已包括在大多数Linux发行版中。 [5] 可以从ftp.uni-paderborn.de的/pub/Linux/LOCAL目录中取得yp-linux源程序。
来源:Linux自由鸽
上一页 [1] [2] |
|
|
|
|
|