NIS服务器的搭建
一、NIS服务器概述
NIS(网络信息服务)也称YP(Yellow Pages)协议,是一个提供目录服务的RPC(远程过程调用)应用服务。该服务器提供信息查询的工作,如用户账号、密码、UID、默认目录、shell等。
二、NIS软件相关结构
一般NIS服务器大都采用ypservyptools这个软件,客户端采用yp-toolsypbind等软件进行管理。这个软件的相关结构如下
1.       配置文件方面:
/etc/ypserv.conf:
/etc/host
/etc/netgroup
/var/yp/Makefile
/etc/syconfig/netword
2.       服务器提供的服务分别以ypservrpc.ypxfrdyppasswdd分别提供主服务、主从服务器之间的数据库传输、客户端用户密码修改服务。
3.       数据库有关的命令:yppush是主服务器把数据直接传送到从服务器,ypinit是主服务器生成数据库文件,ypxfr传送数据库命令。
三、实例设计
实验的环境:虚拟机下CentOS5
要设计拓扑结构图如下:
通过NIS服务,我可以从网管工作台使用一致的账户和口令登录到应用服务器,对服务器进行管理。
1.       服务端设置
1)设置服务器的域名
设置域名为junlew,可以使用两种方法:修改/etc/sysconfig/network,在该文件中加入一行nisdomainname=junlew ;或者使用nisdomainname junlew ,这个命令是暂时修改,重启后将丢失,因此我们可以把这个命令写入到/etc/rc.d/rc.local文件中,让他开机自动执行此命令。
2)设置配置文件/etc/ypserv.conf
关于此文件配置的相关说明可以使用man ypserv.conf命令进行查看。重要的参数如下:
*                          : junlew       : shadow.byname         : port
192.168.1.0255.255.255.0    : *           : passwd.adjunct.byname   : port
#主机名称/主机IP                  NIS网段名称 :可用数据库名称      :安全限制
可以按照实际需求进行配置。
3)设计主机名称和信任群组
修改/etc/hosts文件添加,用vi /etc/hosts
192.168.1.188           Master.junlew
192.168.1.88            Slave.junlew
192.168.1.106           Client.junlew
另外需要建立一个文件touch /etc/netgroup,此文件为信任群组。只需建立就可。若不建立可能会出现问题。
4)启动服务
/etc/init.d/portmap start    #启动RPC服务
/etc/init.d/ypserv start
/etc/init.d/yppasswdd start
5)建立数据库(/usr/lib/yp/ypinit -m
[root@Master yp]# /usr/lib/yp/ypinit -m
 
At this point, we have to construct a list of the hosts which will run NIS
servers.  Master.junlew is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
        next host to add:  Master.junlew
        next host to add: 
The current list of NIS servers looks like this:
 
Master.junlew
 
Is this correct?  [y/n: y]  y
We need a few minutes to build the databases...
Building /var/yp/junlew/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/junlew'
Updating passwd.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating passwd.byuid...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating group.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating group.bygid...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating hosts.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating hosts.byaddr...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating rpc.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating rpc.bynumber...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating services.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating services.byservicename...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating netid.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating protocols.bynumber...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating protocols.byname...
failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating mail.aliases...
failed to send 'clear' to local ypserv: RPC: Program not registeredgmake[1]: Leaving directory `/var/yp/junlew'
 
Master.junlew has been set up as a NIS master server.
 
Now you can run ypinit -s Master.junlew on all slave server.
这是在主NIS服务进行的!!
注:当用户账号或者口令发生改变是必须要重新制作数据库,并重启相关的服务,才能生效。
6)从服务器和数据库同步设置
主从服务器的设置同步,修改/var/yp/Makefile找到NOPUSH=true修改为NOPUSH=false,然后在/var/yp/ypserver添加一行Slave.junlew,此文件将指定数据库将被推送到的从服务器主机名,因此在/etc/hosts文件中ip和主机名一定要对应。通过以上的设置主服务器一基本配置完成。
从服务器的设置和主服务器的设置步骤基本相同。不用设置第六步,不过在第四步建立数据库是不一样的。他是从主服务器获得数据库文件,不用重新制作数据库文件。使用以下命令获得数据库:/usr/lib/yp/ypinit –s Master.junlew 这是手动获得数据库文件。由于账号信息可能在不变化,这样每次改变账号信息都要进行手动的获得,显得很麻烦。解决方法是:在主服务器启动ypxfrd服务,在从服务器里设置计划脚本,定时进行更新。具体的脚本在/usr/lib/yp目录下提供了几个软件自带脚本。可以按照自己的要求修改脚本,并把脚本放入计划任务中(修改/etc/crontab文件)。最后一点是在从服务器上必须启动ypbind服务。负责从服务器无法提供服务。
2.       客户端的设置
所需要的软件:ypbindyp-toolsportmap
1)设置nisdomainname/etc/hosts
2)客户端通过ypbindNIS服务器认证。首先启动ypbind,然后设置认证,可以通过authconfig-tui命令进行设置。
第二种方法,可以修改一下文件:
a.修改/etc/nsswitch.conf中以下几项。nis为新增加的。
passwd:     files nis
shadow:     files nis
group:      files nis
hosts:      files dns nis
b.修改/etc/sysconfig/authconfig文件
USENIS=no 改为 USENIS=yes
c.修改/etc/pam.d/system-auth文件,这个行后面添加了nis
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow nis
d.修改/etc/yp.conf文件,在其中加入一条
Domain junlew Server Master.junlew (分为四部分Domain NIS Server 主机名称)
修改完成后要重新启动相关的服务。
3.       客户端的检验
使用yptestypwhichypcat进行检验,关于命令的相关参数,可以用man命令查到。
在我做实验的过程中用yptest检验的时候发现错误。Can't communicate with ypbind ,通过检验发现NIS客户端的iptables处于状态,并阻止与NIS的通信。为了方便我用service iptables stop关掉防火墙。再次检验通过。
4.       在客户端登陆其他linux服务:
[root@Slave ~]# su -l netman
su: warning: cannot change directory to /home/netman: No such file or directory
-bash-3.00$
发现可以成功登陆,到此实验成功完成。
在最后的用NIS登陆的用户提示符为什么是-bash-3.00$那是因为该用户的环境变量没有读出到本地机器,所以我们可以采用之前写NFSNIS结合实现这个功能。在以后我会做下这个实验。