前提环境:
1、安装的必须的软件包
ypserv,yp-bind,yp-tool
关于包的说明:
ypserv:服务器端必须的软件包
yp-bind:客户端需要的包
yp-tool:与yp相关的命令的包
PS:NIS服务跟NFS服务有些共同之处,都需要启动portmap服务
检查机器是否已安装的包,若没有,就安装相关的包。基本上系统默认已安装的包有yp-bind,yp-tool这两个。
[root@cheng ~]# rpm -qa | grep yp-*
ypbind-1.19-12.el5
yp-tools-2.9-0.1
安装Master服务器
[root@master ~]# rpm -qa | grep yp-serv
[root@master ~]#
[root@master ~]# yum install -y ypserv
安装完ypserv后,系统将会多了一些配置文件:
[root@master ~]# rpm -ql ypserv
/etc/rc.d/init.d/yppasswdd #这个是客户端修改密码的服务
/etc/rc.d/init.d/ypserv #ypserv的主要服务
/etc/rc.d/init.d/ypxfrd #这个不知道是干嘛的
/etc/ypserv.conf #主要配置文件
配置文件:
/etc/ypserv.conf 这个是主要的配置文件
/etc/hosts 非常重要,每一台主机都需要记录才行
/etc/netgroup 设置信任的主机与域名,这个我个人认为可以实现特定的主机用特定的用户登录的功能。
/var/yp/Makefile 建立与数据库有关的操作设置文件
/etc/sysconfig/network 指定NIS的域名
服务器提供的主要服务:
/usr/sbin/ypserv NIS服务器主要的服务
/usr/sbin/rpc.ypxfrp 用于master/slave主机之间传输数据库的服务
/usr/sbin/rpc.ypasswdd 提供额外的NIS客户端的用户密码修改服务。
与数据库有关的命令方面:
/usr/sbin/yppush 将master的数据库推送到slave上。
/usr/lib/yp/ypinit 这个是用于重新生成数据库
/usr/lib/yp/ypxfr 传送数据库的命令。ypxfr_1perday,ypxfr_1perhour,ypxfr_2perday
按照鸟哥私房菜的指引,做以下实验:
1、三台PC,Master,salve,client
2、配置一个NIS的环境,实现用户家目录的自动挂载
3、实现更新域数据据,普通用户可以自己更改自己的密码
建立一个NIS域
[root@master ~]# nisdomainname test
[root@master ~]# echo “NISDOMAIN=test” >> /etc/sysconfig/network
[root@master ~]# echo “/bin/nisdomainname test” >> /etc/rc.d/rc.local
修改本地的hosts文件
[root@master ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.10.40 master.test
192.168.10.41 slave.test
192.168.10.42 client.test
添加NIS的域名
[root@master ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=master.test
NISDOMAIN=test
添加guest用户的一个脚本
[root@master ~]# cat useradd.sh
#!/bin/bash
#userd for add users
for (( i>1; i<100; i++ ))
do
useradd guest$i
echo 123456 | passwd –stdin guest$i
done
编辑NIS的配置文件,允许特定的网络访问NIS服务器
[root@master ~]# vi /etc/ypserv.conf
# 网段 NIS服务器域名 数据库名称 安全级别
192.168.10.0/255.255.255.0 : test : * : none
启动相关的服务
[root@master ~]# service portmap start #需要启动 portmap服务
[root@master ~]# service ypserv start #启动NIS的主要服务
[root@master ~]# service yppasswdd start # 启动该服务后,客户端可以自己更新密码了
验证服务:
[root@master ~]# rpcinfo -p localhost #出现以下内容表明启动成功
程序 版本 协议 端口
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 947 status
100024 1 tcp 950 status
100004 2 udp 773 ypserv
100004 1 udp 773 ypserv
100004 2 tcp 776 ypserv
100004 1 tcp 776 ypserv
100009 1 udp 785 yppasswdd
[root@master ~]# rpcinfo -u localhost ypserv
程序 100004 版本 1 就绪并等待
程序 100004 版本 2 就绪并等待
生成NIS数据库
[root@master ~]# /usr/lib/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. master.test 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.test
next host to add:
The current list of NIS servers looks like this:
master.test
Is this correct? [y/n: y] y
We need a few minutes to build the databases…
Building /var/yp/test/ypservers…
Running /var/yp/Makefile…
gmake[1]: Entering directory `/var/yp/test’
Updating passwd.byname…
Updating passwd.byuid…
Updating group.byname…
Updating group.bygid…
Updating hosts.byname…
Updating hosts.byaddr…
Updating rpc.byname…
Updating rpc.bynumber…
Updating services.byname…
Updating services.byservicename…
Updating netid.byname…
Updating protocols.bynumber…
Updating protocols.byname…
Updating mail.aliases…
gmake[1]: Leaving directory `/var/yp/test’
master.test has been set up as a NIS master server.
Now you can run ypinit -s master.test on all slave server.
----------------------------------------------
关于ypinit的选项
OPTIONS
-m If the local host is the NIS master.(只用于master)
-s Set up a slave server with the database from master_name (在master上生成一个slave的NIS服务器)
----------------------------------------------
建立完数据库后,需要将服务进行重启!
[root@master ~]# service ypserv restart
停止 YP 服务器的服务: [确定]
启动 YP 服务器的服务: [确定]
[root@master ~]# service yppasswdd restart
停止 YP 口令服务: [确定]
启动 YP 口令服务: [确定]
允许Master\Slave之间的同步
[root@master yp]# vi /var/yp/Makefile
NOPUSH=true
添加相应的slave服务器
[root@master yp]# cat /var/yp/ypservers
master.test
slave.test
[root@master yp]#
配置slave服务器
[root@slave ~]# echo “NISDOMAIN=test” >> /etc/sysconfig/network
[root@slave ~]# nisdomainname test
[root@slave ~]# echo “/bin/nisdomainname test” >> /etc/rc.d/rc.local
[root@slave ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.10.41 slave.test
192.168.10.10 master.test
192.168.10.42 client.test
完成以上工作后,执行同步数据库的操作
[root@slave ~]# /usr/lib/yp/ypinit -s master.test
We will need a few minutes to copy the data from master.test.
Transferring services.byname…
Trying ypxfrd … not running
Transferring rpc.bynumber…
Trying ypxfrd … not running
Transferring passwd.byname…
Trying ypxfrd … not running
Transferring services.byservicename…
Trying ypxfrd … not running
Transferring ypservers…
Trying ypxfrd … not running
Transferring netid.byname…
Trying ypxfrd … not running
Transferring protocols.bynumber…
Trying ypxfrd … not running
Transferring rpc.byname…
Trying ypxfrd … not running
Transferring hosts.byaddr…
Trying ypxfrd … not running
Transferring mail.aliases…
Trying ypxfrd … not running
Transferring passwd.byuid…
Trying ypxfrd … not running
Transferring hosts.byname…
Trying ypxfrd … not running
Transferring protocols.byname…
Trying ypxfrd … not running
Transferring group.byname…
Trying ypxfrd … not running
Transferring group.bygid…
Trying ypxfrd … not running
你会发现了这么多的信息,都提示没ypxfrd没有运行,因此可见要同步数据库还得要运行ypxfrd服务
在主服务器上启动ypxfrd这个服务
[root@master test]# /etc/init.d/ypxfrd start
启动 YP 映射图服务器: [确定]
重新同步数据库
[root@slave ~]# /usr/lib/yp/ypinit -s master.test
We will need a few minutes to copy the data from master.test.
Transferring services.byname…
Trying ypxfrd … success
Transferring rpc.bynumber…
Trying ypxfrd … success
Transferring passwd.byname…
Trying ypxfrd … success
Transferring services.byservicename…
Trying ypxfrd … success
Transferring ypservers…
Trying ypxfrd … success
Transferring netid.byname…
Trying ypxfrd … success
Transferring protocols.bynumber…
Trying ypxfrd … success
Transferring rpc.byname…
Trying ypxfrd … success
Transferring hosts.byaddr…
Trying ypxfrd … success
Transferring mail.aliases…
Trying ypxfrd … success
Transferring passwd.byuid…
Trying ypxfrd … success
Transferring hosts.byname…
Trying ypxfrd … success
Transferring protocols.byname…
Trying ypxfrd … success
Transferring group.byname…
Trying ypxfrd … success
Transferring group.bygid…
Trying ypxfrd … success
slave’s NIS data base has been set up.
If there were warnings, please figure out what went wrong, and fix it.
查看用户的密码文件
[root@slave ~]# ypcat -h slave.test passwd.byname
guest60:$1$DuqvMNPM$qHeWMGE36AeIFbiiVuJML/:560:560::/home/guest60:/bin/bash
guest88:$1$TnjZhKpr$Ju838YqoW8PQD4mkXiE/B/:588:588::/home/guest88:/bin/bash
………省略了其他大量的账户
guest45:$1$VCm8pPqP$rT7YbQOhokIi1Q7wzfmY3/:545:545::/home/guest45:/bin/bash
现在测试一下我们的客户端:
将客户端加入到nis的域里面,然后再测试 autofs的设置部分:
总结一下客户端需要设置的地方:
1、在网络项加入NIS域
/etc/sysconfig/network
添加NISDOMAIN=test
2、修改HOSTS文件
/etc/hosts
192.168.10.42 client.test
192.168.10.41 slave.test
192.168.10.40 master.test
3、增加开机自动加入NIS域
/etc/rc.d/rc.local
/bin/nisdomainname test
4、修改用户密码的认证顺序文件
[root@client ~]# vi /etc/nsswitch.conf
passwd: files nis
shadow: files nis
group: files nis
5、修改/etc/yp.conf客户端配置文件
[root@client ~]# cat /etc/yp.conf
domain test server master.test
domain test server slave.test
6、修改/etc/sysconfig/authconfig这个文件
[root@client ~]# vi /etc/sysconfig/authconfig
USENIS=yes
7、修改系统认证文件
[root@client ~]# vi /etc/pam.d/system-auth
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok nis
修改完成以上7项之后,我们需要重启两个服务
[root@client ~]# service portmap restart
停止 portmap: [确定]
启动 portmap: [确定]
[root@client ~]# service ypbind restart
关闭 NIS 服务: [失败]
设置 NIS 域名 test: [确定]
打开 allow_ypbind 的 SELinux 布尔值
关联到 NIS 域: [确定]
监听 NIS 域服务器。
[root@client ~]#
--------完成以上配置后,我们可以开始进行测试了----
[root@cheng ~]# ssh [email protected]
[email protected]′s password:
Could not chdir to home directory /home/guest1: No such file or directory
-bash-3.2$
-bash-3.2$
#成功登陆了,但是没有家目录,为什么呢?因为guest1的家目录在master.test上,肯定不会在client这台机器上,那么我们应该如让guest1这个用户可以使用这台机,并且能够获得完整的目录环境呢?
#答案是使用autofs实现NIS用户的家目录自动挂载。
围绕这个思路:
1、要将guest1的家目录共享出来
2、实现客户端的自动挂载
实现这个思路需要:NFS+autofs的支持
将master.test上的home目录给共享出来
[root@master ~]# cat /etc/exports
/home *(rw)
重启有关服务
[root@master ~]# service nfs restart
关闭 NFS mountd: [确定]
关闭 NFS 守护进程: [确定]
关闭 NFS quotas: [确定]
关闭 NFS 服务: [确定]
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS 守护进程: [确定]
启动 NFS mountd: [确定]
设置客户端机器上的自动挂载
编辑控制文件
[root@client ~]# vi /etc/auto.master
/home /etc/auto.misc
配置配置文件
[root@client ~]# vi /etc/auto.misc
* -fstype=nfs 192.168.10.40:/home/&
重启服务
[root@client ~]# service autofs restart
验证:
[root@client home]# ll
总计 0
[root@client home]# su – guest
[guest@client ~]$ pwd
/home/guest
[guest@client ~]$
从现在的用户切换到另外一个用户
[guest@client ~]$ su – guest89
口令:
[guest89@client ~]$ pwd
/home/guest89
[guest89@client ~]$
再回到主目录
[root@client home]# ls
guest guest89
本文出自 “潜入技术的海洋” 博客,请务必保留此出处http://myhat.blog.51cto.com/391263/450347