1.
Network Information Service(网络信息服务),通常还称为Yellow Pages(黄页),是一种集中管理系统通用访问文件(如/etc/passwd、/etc/group或/etc/hosts)的分布式数据库系统。master服务器存放这些文件,而客户端则通过网络访问其中的信息。
2.
NIS域和映射
NIS方式涉及域的概念,,所有使用NIS相关服务的主机都是域的一部分。
NIS所使用的域跟DNS的域没有任何关系,可以共存。
NIS域可以用来组织网络中的部分主机,在一个网络中尽管可以生成多个域,但是任何一台主机只能属于其中一个域。
一个NIS映射是由ASCII配置文件创建的数据库。NIS映射以数据库中的某些域作为索引,比如以用户名作为索引,NIS的映射文件名将为:passwd.byname。如果以UID为索引,映射文件名将是passwd.byuid。
作为生成映射的配置文件,基本有/etc/group、/etc/passwd、/etc/networks、/etc/protocols、/etc/services和邮件别名等。
在/var/yp目录的域名目录下,每个映射都存在两个文件。例如,如果我们的NIS域名为moko,则映射文件将被存在/var/yp/moko目录下,其中一个是.pag结尾,一个为.dir结尾。当/etc/passwd文件被使用ypmake命令转换为指向用户名的dbm格式的NIS映射后,将得到两个名为passwd.byname.pag和passwd.byname.dir的文件。
3.
三种NIS域主机类型
NIS主控服务器:保存并维护NIS映射,所有映射基于的文本文件保存在主控服务器中。主控服务器上的映射数据发生改变,都会生成一个或多个映射文件。这些更新的文件可以有两种方法传输到辅助服务器上,第一种是主控服务器将映射“推”到辅助服务器,第二种是辅助服务器从主控服务器获取映射,这两种情况都不会自动发生,必须手工去执行它。用自动任务是个好办法。
NIS辅助服务器:映射数据来源于主控服务器,保存了和主控服务器一样的映射。在辅助服务器上可通过ypxfr命令经常去更新映射。一般由CRON来执行这个命令。
NIS客户端:一个NIS客户端可以从NIS服务器上获取系统和用户信息,比如,在客户端机器登录的时候,服务器会检查用户的名称和口令。
配置NIS
设置NIS域名:
可以通过两种方式设置NIS域名:
- 使用domainname命令设置域名,例domainname moko
- 修改/etc/rc.config.d/namesvrs文件中的NIS_DOMAIN=moko
第二种能够让系统每次启动的过程中设置域名。
NIS启动文件:
NIS的服务器执行脚本/etc/rc.config.d/nis.server在运行级别2下启动。
客户端执行脚本时/etc/rc.config.d/nis.client。
这两个脚本都会使用/etc/rc.config.d/namesvrs文件中的相关变量,文件中的相关配置变量:
- NIS_MASTER_SERVER 值为1,表示此节点配置为NIS主控服务器,0则不是
- NIS_SLAVE_SERVER 值为1,表示此节点配置为NIS辅助服务器,0则不是
- NIS_CLIENT 值为1,表示此节点配置为NIS客户端,0则不是,服务器也必须是客户端
- NIS_DOMAIN 设置NIS域名
- MAX_NISCHECKS 显示了NIS客户做尝试连接的最多次数
- YPSERV_OPTIONS 指定命令ypserv的选项
- YPBIND_OPTIONS 指定命令ypbind的选项
- YPPASSWDD_OPTIONS 指定命令yppasswd的选项
- KEYSERV_OPTIONS 指定命令keyserv的选项
- YPUPDATED_OPTIONS 指定命令yupdated的选项
- YPXFRD_OPTIONS 指定命令ypxfrd命令的选项
ypserv进程时NIS服务器的守护进程,ypbind进程时NIS客户端的守护进程。
一台NIS服务器同时可以作为一个客户端,而一台服务器不能同时是主控服务器和辅助服务器。
典型的NIS服务器配置选项如下,其中,同时设置为主控和客户端,域名为moko:
NIS_MASTER_SERVER=1
NIS_SLAVE_SERVER=0
NIS_CLIENT=1
NIS_DOMAIN=moko
MAX_NISCHECKS=2
YPUPDATED_OPTIONS=""
YPXFRD_OPTIONS=""
NIS的守护进程:
- ypserv NIS服务器的守护进程,监听进入的请求查询NIS映射以响应客户端请求
- rpc.yppasswdd 仅在主控服务器上运行,当用户更改密码时调用,更新文件和映射并推向辅助
- ypxfrd NIS服务器的守护进程,用于主控和辅助之间的映射传输,在/usr/sbin目录下
- rpc.updated 仅在主控服务器上运行,提供安全的更新服务器NIS源文件的机制
- keyserv 所有机器上运行,保留所有登录用户的加密口令,在在/usr/sbin目录下
- ypbind 客户端进程,所有机器上运行,通过ypbing与ypserv进程进行通信
4.
配置NIS主控服务器:
(1)创建一个NIS域名,例如domainname moko
(2)更新所有相关的配置文本文件
(3)将/var/yp增加到PATH变量中
(4)编辑/etc/rc.config.d/namesvrs文件,它至少包含下列行:
NIS_MASTER_SERVER=1
NIS_CLIENT=1
NIS_DOMAIN=moko
(5)运行ypinit -m命令,将此主机配置为NIS主控服务器,该命令会创建域名相同的子目录并生成映射文件。
(6)完成上述过程后,可以重新启动或者运行下列命令:
/sbin/init.d/nis.server start
/sbin/init.d/nis.client start
这两个命令将启动NIS主控服务器上的服务器进程和客户端进程。
5.
配置NIS辅助服务器:
(1)创建一个NIS域名,例如domainname moko
(2)将/var/yp增加到PATH变量中
(3)编辑/etc/rc.config.d/namesvrs文件,它至少包含下列行:
NIS_SLAVE_SERVER=1
NIS_CLIENT=1
NIS_DOMAIN=moko
(4)运行ypinit -s moko来配置辅助服务器,moko为已经配好主控服务器的主机名。
(5)完成上述过程后,可以重新启动或者运行下列命令:
/sbin/init.d/nis.server start
/sbin/init.d/nis.client start
6.
配置NIS客户端:
(1)创建一个NIS域名,例如domainname moko
(2)编辑/etc/rc.config.d/namesvrs文件,它至少包含下列行:
NIS_CLIENT=1
NIS_DOMAIN=moko
(3)完成上述过程后,可以重新启动或者运行下列命令:
/sbin/init.d/nis.client start
7.
如同DNS域名解析一样,我们也可以使用/etc/nsswitch.conf文件来控制访问用户信息的方式和顺序。
例如当一个用户登录到一台主机,对用户名和密码检验可以通过两种方式,顺序如下:
passwd: files nis
改行表示对密码的检验先执行/etc/passwd文件检验,如果失效再使用NIS进行检验。
nsswitch.conf文件的配置详见:
http://moko39848381.blog.163.com/blog/static/139827331201032744851316/
8.
当配置了一个NIS服务器后,首先检查它的域名目录/var/yp/moko以验证相关的映射文件被创建在这个目录下。
如果有映射文件,使用ypcat命令查看部分映射的内容。
当你看到输出内容,可以检验客户端和服务器的配置都正确与否。
可以用同样的命令在网络中的其他客户端进行测试。
NIS实用工具:
- ypcat 显示NIS映射信息
- ypinit 建立并安装NIS配置文件
- ypmake 重建NIS映射表
- ypmatch 匹配并列出NIS映射表中的特定值
- ypset 将NIS客户端绑定到特定的NIS服务器上
- ypwhich 显示NIS服务器的主机名称
9.
在NIS主控服务器上更新映射:
使用/var/yp/ypmak命令可以更新主控服务器上的映射,它会读取ASCII配置文件并产生相应的NIS映射。
改变映射后还能将映射文件“退”向辅助服务器。
在NIS辅助服务器上更新映射:
所有的辅助服务器需通过ypxfr命令定期更新NIS映射,也可以通过主控服务器使用yppush命令来获取更新。
ypxfr passwd.byname #从主控服务器上拷贝passwd.byname文件
除了上述命令外,可以通过/var/yp目录下的相关脚本实现,通过CRON周期性执行脚本来获得更新。
在客户端改变用户密码:
可以通过passwd命令在客户端改变某个用户口令,改变时该命令会与NIS服务器上的rpc.yppasswdd守护进程取得联系,这个守护进程将检查旧的密码,然后更新口令映射的相关源文件及NIS映射。
在服务器上改变口令用yppasswd命令。
10.
访问控制:
限制对客户端的访问:
为了限制/etc/passwd文件对用户搜索,规定只有NIS数据库中被选择的用户才能被搜索,可以通过下面一行显示的方法来制定(在要控制访问的那台机器的nsswitch.conf文件中):
passwd: compat
这么设定后,如果想让NIS映射中的某些用户可以登录到这台主机的话,你需要将几个账号的信息添加在目的主机的/etc/passwd文件中,即建立规避记录,例如如果要让moko1和moko2可以访问某台机器,可以在那台机器上的/etc/passwd文件最后添加两行:
+moko1
+moko2
+号表示这是NIS映射中的用户。可以根据需要在不同的NIS客户端主机指定NIS映射中某些用户的访问能力。
对于/etc/group文件也是使用类似的方法。
限制对主控服务器的访问:
要想对访问主控服务器进行限制,那么在生成NIS映射的时候就不能用/etc/passwd文件来生成,否则/etc/passwd和生成的NIS映射所包含的用户是一致的,这就无法限制了。
为此,我们需要创建另一个口令文件。
如果用/etc/passwd.nis为源文件生成NIS映射,需要做下面的步骤:
(1)改变文件/etc/rc.config.d/namesvrs中的变量YPPASSWDD_OPTION的值,将/etc/passwd替换为/etc/passwd.nis。这么设定后,当以用户在NIS客户端修改用户口令时,rpc.yppasswd守护进程就回去修改/etc/passwd.nis,而不是修改/etc/passwd文件。
(2)编辑/var/yp/ypmake文件,将/etc/passwd替换为/etc/passwd.nis,这样的话可以由/etc/passwd.nis文件来生成NIS映射。
执行上面步骤后,你将重新生成NIS映射,并将NIS映射传递到辅助服务器中。
接着按照上面限制对客户端访问的方法即可实现限制对主控服务器的访问控制。
关于NIS节点的访问控制资料:http://zbzhang.spaces.live.com/Blog/cns!48F73E6F715FA202!180.entry
关于NIS的安全:http://moko39848381.blog.163.com/blog/static/139827331201032834027279/