主从NIS服务器架设加上 NFS 和autofs  想想nis 服务器在现实中的作用(对于权限而言)
 NIS服务器简介
NIS(Network Information Service)是一个为网络中所有的机器提供网络信息的系统,包括用户名、密码、主目录、组信息等。 如果某个用户的用户名以及密码保存在了 NIS 密码数据库中,NIS 允许此用户在网络当中的任何一台运行有NIS 客户程序的机器上登陆。这使得整个网络看起来象一个独立系统, 在所有的主机上有着相同的帐号。类似于windows的域环境。
什么是 NFS (Network FileSystem)
NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 这家公司所发展出来的。 他最大的功能就是可以透过网络,让不同的机器、不同的作业系统、可以彼此分享个别的档案 (share files)。所以,您也可以简单的将他看做是一个档案服务器 (file server) 呢!这个 NFS 服务器可以 让您的 PC 来将网络远端的 NFS 主机分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远端主机的目录就好像是自己的一个磁碟分割槽一样 (partition)!使用上面相当的便利!
环境:centos 或 RHCL     
192.168.59.130     master.localdomain   NIS主服务器
192.168.59.133     slave.localdomain    NIS从服务器
192.168.59.134     client.localdomain    NIS客户端
三台机器都在hosts文件中添加以下三行 # cat /etc/hosts
添加解析(因为没有DNS服务器)
192.168.59.133     slave.localdomain       slave
192.168.59.130     master.localdomain      master
192.168.59.134     client.localdomain      client
三台机器的iptables 和selinux 都是关闭状态!!!!!!!!!记住这个很重要
 
一.   NIS主服务器配置
1、安装涉及的服务有
 nis服务有     ypsevrv yppasswdd ypbind(从服务器和客户机测试用)ypxfrd(同步数据)
 nfs服务有      portmap nfs
 autofs服务有    autofs
安装nis所需程序包
        ypserv   ---------NIS服务器的主程序包(主从服务器都有)
        portmap ---------管理RPC链接、启动必须的软件包(NFS)
        yp-tools  ---------提供NIS客户端设定功能的软件包
        ypbind   ---------提供NIS客户端查询指令功能的软件包!
 
2、创建用于登录的系统用户
[root@localhost conf]# useradd nistest1
[root@localhost conf]# passwd nistest1
 
3、设置NIS域
方1、[root@master ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=master
NISDOMAIN=hao
(永久性的,但是需要重启机器)
方2、nisdomainname hao 使用nisdomainname也可以,不过是临时的,启动后就失效了
所以添加到启动时要执行的脚本里如echo “nisdomainname hao” >> /etc/rc.local 就可以实现永久性的配置了
4、设置NIS主配置文件/etc/ypserv.conf
设定重点字段选项即可:(添加红色字符就可以了)
1、dns:0     用于设置是否使用DNS系统,默认为no 我们设定本地解析即可
2、files:30 预设是将30个数据库资料读入告诉缓存中,保持默认即可
3、slp:no    如果需要SLP服务则设为yes 默认即可
   slp_timeout:3600 SLP超时设定
4、xfr_check_port:yes 用于主从结构的环境 设yes表示主从同步数据时使用小于1024的端口
5、找到Host:domain:map:security的行(特别重点部分)
添加下面两行
*                           : *       : *                : none
*                           : *       : *                : deny
上面四列分别说明:
        (1)host     用于指定客户端 可以是ip 也可以是网段
        (2)domain   用于设置NIS域名,特别注意这个跟DNS的域名是不一样的
        (3)map      用于设置可用的数据库名称 默认*代表所有
        (4)security 安全设置参数有
                none 没限制 可以连NIS服务器
                port 只允许小于1-24以下的端口连接NIS服务器
                deny 拒绝链接NIS服务器
 
设定后需要重启服务:
 [root@master ~]# service ypserv restart
Stopping YP server services:                                [ OK ]
Starting YP server services:                                 [ OK ]
[root@master ~]# service yppasswdd restart
Stopping YP passwd service:                                [ OK ]
Starting YP passwd service:                                 [ OK ]
 
6 、建立数据库: 主要是生成一些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. localhost 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>. ----此处Ctrl+d即可
        next host to add: localhost
        next host to add: 
The current list of NIS servers looks like this:
 
localhost
 
Is this correct? [y/n: y] y ---此处y确认
We need a few minutes to build the databases...
Building /var/yp/hao/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/f5ha.com'
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/hao
 
localhost has been set up as a NIS master server.
 
Now you can run ypinit -s localhost on all slave server.
 
可以到对应的目录确认是否生成数据库
[root@master yp]# cd /var/yp/hao/
[root@master~]# ls -l
total 2196
-rw------- 1 root root    12437 May 31 14:06 group.bygid
-rw------- 1 root root    12445 May 31 14:06 group.byname
-rw------- 1 root root    12674 May 31 14:06 hosts.byaddr
-rw------- 1 root root    12925 May 31 14:06 hosts.byname
-rw------- 1 root root    13174 May 31 14:06 mail.aliases
-rw------- 1 root root    13519 May 31 14:06 netid.byname
-rw------- 1 root root    12536 May 31 14:06 passwd.byname
-rw------- 1 root root    12528 May 31 14:06 passwd.byuid
-rw------- 1 root root    29211 May 31 14:06 protocols.byname
-rw------- 1 root root    14573 May 31 14:06 protocols.bynumber
-rw------- 1 root root    16384 May 31 14:06 rpc.byname
-rw------- 1 root root    14236 May 31 14:06 rpc.bynumber
-rw------- 1 root root 766110 May 31 14:06 services.byname
-rw------- 1 root root 1470490 May 31 14:06 services.byservicename
-rw------- 1 root root    12355 May 31 14:06 ypservers
由上可以见数据库已生成啦 至此主服务器已配置完成
 
5、为了使主从NIS服务器完成数据同步 主NIS需要启动ypxfrd服务
[root@master ~]# service ypxfrd restart
Stopping YP map server:                                     [ OK ]
Starting YP map server:                                      [ OK ]
 
6、设置开机启动项
[root@master ~]# chkconfig --list | grep yp
ypbind           0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
yppasswdd        0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
ypserv           0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
ypxfrd           0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
二、NIS从服务器的配置
按照NIS主服务器的配置步骤配置下来
2、设定NIS域 设定主机名 本地解析 开机启动等
[root@slave ~]# cat /etc/sysconfig/network
NETWORKING_IPV6=no
HOSTNAME=slave
NETWORKING=yes
NISDOMAIN=hao
 [root@slave yum.repos.d]# nisdomainname
hao
[root@master ~]# chkconfig --list | grep yp
ypbind           0:关闭  1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
yppasswdd        0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
ypserv            0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
ypxfrd            0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
2、设置NIS主配置文件/etc/ypserv.conf
添加两行
*                           : *       : *                : none
*                           : *       : *                : deny
 
启动相应的服务:ypserv yppasswdd ypbind
三、设定主从NIS传输同步数据库
1、切回 NIS服务器
 (1)修改/var/yp/Makefile 文件 将NOPUSH=true选项改成NOPUSH=false
 (2)修改/var/yp/ypservers文件 指定要push到的从NIS服务器
    [root@master ~]# cat /var/yp/ypservers  
master.localdomain
slave.localdomain
 2、重启相关服务 ypserv yppasswdd
 
3.切换到 NIS服务器
可以先测试一下环境看看两台机器的nis是否已经可以通信了。重启ypbind服务
[root@slave ~]# service ypbind restart
Shutting down NIS services:                                 [ OK ]
Turning on allow_ypbind SELinux boolean
Binding to the NIS domain:                                  [ OK ]
Listening for an NIS domain server..
 出现上面提示表示就说明nis服务是连通的,nis服务基本上就没什么问题了
 
用指令获取主NIS服务器的maps资料 /usr/lib/ypinit –m 主服务器的地址
[root@slave ~]# /usr/lib/yp/ypinit -s master.localdomain
We will need a few minutes to copy the data from master.localdomain
Transferring protocols.byname...
Trying ypxfrd ... success
Transferring rpc.byname...
Trying ypxfrd ... success
Transferring group.byname...
Trying ypxfrd ... success
 
Transferring hosts.byaddr...
Trying ypxfrd ... success
Transferring passwd.byname...
Trying ypxfrd ... success
Transferring rpc.bynumber...
Trying ypxfrd ... success
Transferring mail.aliases...
Trying ypxfrd ... success
Transferring group.bygid...
Trying ypxfrd ... success
Transferring passwd.byuid...
Trying ypxfrd ... success
Transferring protocols.bynumber...
Trying ypxfrd ... success
Transferring netid.byname...
Trying ypxfrd ... success
Transferring services.byname...
Trying ypxfrd ... success
Transferring ypservers...
Trying ypxfrd ... success
Transferring hosts.byname...
Trying ypxfrd ... success
Transferring services.byservicename...
Trying ypxfrd ... success
slave.localdomain's NIS data base has been set up.
If there were warnings, please figure out what went wrong, and fix it.
At this point, make sure that /etc/passwd and /etc/group have
been edited so that when the NIS is activated, the data bases you
have just created will be used, instead of the /etc ASCII files.
[root@slave ~]# ls -l /var/yp/    **下面出来hao目录和主nis上的应该一样                         
total 40
drwxr-xr-x 2 root root 4096 Jun 22 11:10 binding
-rw-r--r-- 1 root root 16670 Jun 19 20:37 Makefile
-rw-r--r-- 1 root root    185 Jan 27 2010 nicknames
drwxr-xr-x 2 root root 4096 Jun 23 00:04 hao
 
4.当主NIS服务器使用ypinit -m更新数据库后 从NIS服务器上的数据就会不一致
 可以在 NIS上使用ypxfr指令同步数据库信息以保证数据为最新
 格式是:ypxfr -h NIS主服务器 数据库文件
如果主NIS没更新 更新时通常是如下显示:
[root@slave ~]# /usr/lib/yp/ypxfr -h master.localdomain passwd.byname
Map on Master "master.localdomain" is not newer
ypxfr: Master's version not newer
[root@slave ~]# /usr/lib/yp/ypxfr -h master.localdomain passwd.byuid
Map on Master "master.localdomain" is not newer
ypxfr: Master's version not newer
 
如果主NIS有更新 更新时通常是如下显示:
[root@slave ~]# /usr/lib/yp/ypxfr -h master.f5ha.com passwd.byname
Trying ypxfrd ... success
[root@slave ~]# /usr/lib/yp/ypxfr -h master.f5ha.com passwd.byuid
Trying ypxfrd ... success
 
四. 客户端验证
方法一:
1.切换到客户机 配置NIS客户端
确认已安装ypbind和yp-tools这2个软件包
2将客户机加入NIS域hao
[root@client ~]# cat /etc/sysconfig/network
NETWORKING_IPV6=no
HOSTNAME=client.localdomain
NETWORKING=yes
NISDOMAIN=hao
[root@client ~]# nisdomainname
hao
4 、配置/etc/yp.conf 需要添加主从NIS 的域
注意格式:domain nis 域名称 server 主NIS; 从NIS
[root@client ~]# cat /etc/yp.conf  
如果是只去从nis上验证的话,最后一行为 domain hao server 192.168.59.133
如果是主从 domain hao server master.localdomain;slave.localdomain
 
配置/etc/nsswitch.conf文件 修改密码验证方式
NIS客户端在查找用户名和密码时先从本地开始查找,比如先查询/etc/passwd和/etc/shadow文件等,如果没有查询到用户名和密码则发送广播到NIS服务器从而进行查询。默认情况下客户端如果没有查询到用户名和密码是不会发送广播到NIS服务器的,所以我们需要
改/etc/nsswitch.conf文件
[root@client ~]# cat /etc/nsswitch.conf
 
passwd:      files nis
shadow:      files nis
group:       files nis
hosts:       files nis   
 
bootparams: nisplus [NOTFOUND=return] files
 
ethers:      files
netmasks:    files
networks:    files
protocols: files
rpc:         files
services:    files
 
netgroup:    files nis
publickey: nisplus
automount: files nis
aliases:     files nisplus
 
重启ypbind服务
[root@client ~]# service ypbind restart
Shutting down NIS services:                                 [ OK ]
Turning on allow_ypbind SELinux boolean
Binding to the NIS domain:                                  [ OK ]
Listening for an NIS domain server..
 出现上面提示表示和nis服务器是连通的,nis服务基本上就没什么问题了
 
配置客户端/etc/sysconfig/authconfig设定USENIS=yes 启动时登录到NIS域                                                           
 [root@client ~]# cat /etc/sysconfig/authconfig   
USEWINBINDAUTH=no
USEKERBEROS=no
USESYSNETAUTH=no
USEPAMACCESS=no
USEMKHOMEDIR=no
FORCESMARTCARD=no
USESMBAUTH=no
USESMARTCARD=no
USELDAPAUTH=no
USEDB=no
USEWINBIND=no
USESHADOW=yes
PASSWDALGORITHM=md5
USEHESIOD=no
USELDAP=no
USELOCAUTHORIZE=no
USEPASSWDQC=no
USECRACKLIB=yes
USENIS=yes
  方法二
在3 或5 模式下
[root@clien ~]#setup  或auth(tab键补全)
步骤1

 

步骤2

步骤3
 

登录测试:
login as: nistest2
nistest2@192.168.59.134's password:
No directory /home/nistest2
Logging in with home = “/”.
-bash-3.2$
 
可以登录成功,但是没有家目录,后面讲到NFS可以解决此问题。
验证一:测试主从nis的作用。
现在要做的是将主NIS手工模拟故障,或关机或停止服务等。
看从NIS是否可以接替工作
1.       将主NIS网络停掉
 [root@master ~]# service network stop
Shutting down interface eth0:                   [ OK ]
2.客户端再次登录 (发现还是可以正常登录的 证明从NIS已经可以接替主NIS正常工作)
login as: nistest2
nistest2@192.168.59.134's password:
No directory /home/nistest2
Logging in with home = “/”.
-bash-3.2$
 
验证二: 测试添加新的用户
在主nis上建立用户stu10,master上需要重新执行下面的操作
1、用指令 更新主 NIS 服务器的数据库 /usr/lib/ypinit –m
 [root@slave ~]# /usr/lib/yp/ypinit –m
主nis(master)更新完成后。测试一下用户(分别从主从上去验证看结果)
或者 刷新帐号库
[root@master ~]# cd /var/yp/
[root@master yp]# make
gmake[1]: Entering directory `/var/yp/hao'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
gmake[1]: Leaving directory `/var/yp/hao'
 
2、从nis(slave)需要去和主nis同步数据执行下面的命令就可以了
可以在 NIS 上使用ypxfr 指令同步数据库信息以保证数据为最新
(主从NIS 服务器数据同步 主NIS 需要启动ypxfrd 服务)
 格式是:ypxfr -h NIS主服务器 数据库文件
如果主NIS没更新 更新时通常是如下显示:
[root@slave ~]# /usr/lib/yp/ypxfr -h master.localdomain passwd.byname
Map on Master "master.localdomain" is not newer
ypxfr: Master's version not newer
[root@slave ~]# /usr/lib/yp/ypxfr -h master.localdomain passwd.byuid
Map on Master "master.f5ha.com" is not newer
ypxfr: Master's version not newer
 
如果主NIS有更新 更新时通常是如下显示:
[root@slave ~]# /usr/lib/yp/ypxfr -h master.f5ha.com passwd.byname
Trying ypxfrd ... success
[root@slave ~]# /usr/lib/yp/ypxfr -h master.f5ha.com passwd.byuid
Trying ypxfrd ... success
这样的话主从的数据就一样了。新添加的用户登录就没问题了
 
NFS 和autofs 挂载来解决家目录
1在master服务器端(主nis)配置,先编辑共享清单
 [root@master ~]# vim /etc/exports
/home 192.168.59.0/24(rw,sync)  ##59网段的都可以访问,具有读写的权限
下面说一下括号中权限的问题
rw∶read-write,可读写的权限;
ro∶read- only,唯读的权限;
sync∶资料同步写入到记忆体与硬盘当中;
async∶资料会先暂存于记忆体当中,而非直接写入硬盘!
no_root_squash∶ 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目极不安全,不建议使用!
root_squash∶在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody(nfsnobody) 那个系统帐号的身份;
all_squash∶ 不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是 nobody(nfsnobody) !
anonuid∶anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody(nfsnobody),但是您可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于您的 /etc/passwd 当中!
anongid∶ 同 anonuid ,但是变成 group ID 就是了!
2、利用nfs共享,下面启动nfs
[root@master ~]# service nfs start
Starting NFS daemon:                                       [ OK ]
Starting NFS mountd:                                       [ OK ]
[root@master ~]# service portmap start
启动 portmap:                         [确定]
[root@master ~]# chkconfig nfs on
3导出共享清单
[root@master ~]# exportfs -rv
exporting 192.168.59.0/24:/home
[root@master ~]#showmount –e 192.168.59.130
Export list for 192.168.59.130:
/home 192.168.59.0/24
证明主nis master上的被共享的家目录成功了
方法一:在客户端手动挂载
4、在客户端进行挂载
[root@client ~]# showmount -e 192.168.59.130
Export list for 192.168.59.130:
/home 192.168.59.0/24
证明可以使用nfs进行联通了,下面开始挂载分为开机和临时挂载
[root@client ~]#vi /etc/fstab
/dev/VolGroup00/LogVol00 /                        ext3    defaults        1 1
LABEL=/boot              /boot                   ext3    defaults        1 2
tmpfs                    /dev/shm                tmpfs   defaults        0 0
devpts                   /dev/pts                devpts gid=5,mode=620 0 0
sysfs                    /sys                    sysfs   defaults        0 0
proc                     /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                     swap    defaults        0 0
192.168.59.130:/home     /home                             nfs    defaults        0 0
把192.168.59.130:/home(mastet共享过来的)挂载到本机client的home下
上面是永久性的,可以使用命令达到临时的挂载
mount 192.168.59.130:/home /home
5在客户端用服务器端帐号库中的nistest2登录
登录成功!且不提示没有家目录。
这样做有个弊端,就是如果服务器下有很多客户端,当所有的客户端都把服务器的家目录挂载到本地家目录,那么服务器和客户端会发很多数据包维持连接,这样会消耗很多服务器的资源,为了提高服务器的高可用性,在客户端上采用自动挂载,相应时间内没有有效操作,会自动断开与服务器的连接
方法二:在客户端自动挂载
1卸载刚才挂载的home
[root@client ~]# umount /home
这点要注意如果服务器端帐号库中帐号在登录中,必须先退出,才能卸载
2自动挂载是一个名为autofs的服务,下面编辑其配置文件
[root@client ~]# vim /etc/auto.master
其中第九行是样例文件,
按照第九行添加一行
/home     /etc/auto.nis --timeout=60     **挂载到目录是home(客户端的访问点)auto.nis是自己建立的配置文件
3、下面要创建auto.nis文件
[root@client ~]# cp -p /etc/auto.misc /etc/auto.nis
[root@lclient~]# vim /etc/auto.nis
添加下面一句  
 *               -ro,soft,intr           192.168.2.101:/home/&
*表示监控所有的 –ro自读 soft允许报错 intr允许中断 &代表登录的帐号
4、启动服务autofs
[root@lclient~]# service autofs start
查看home中的文件是不是增加了,如果是就表明autofs服务没有问题了
5、登录验证
可以重新在master上添加用户。
 
留给大家一个思考问题既然nis服务提供的是账户管理那账户一定涉及权限问题,即在不同的机器上使用相同的账户,对不同的机器上的文件或服务的操作权限怎么去设定,分别从以下几个方面考虑:
1、 把文件放到家目录里,
2、 把用户加入到一个共同的组里(和windows server 的机制差不多)对文件进行组权限的分配
3、 在本机(比如是nis 的客户端,这个客户端上有apache 服务)上对其他用户(chmod o+rwx )的权限等
4、 NFS和AUTOFS也有一定权限限制
 
我们办公环境要用到的nis服务器是因为我们公司内网有个服务器局域网这些服务器上都运行着不同的服务,运行着不同的运算,需要有nis服务在各个服务上进行不同的认证
 
 
以上各个服务要注意iptables和selinux的各个限制。做这个服务的时候一定要有耐心,静下来就会做得很顺利。弄懂原理、理清思路最重要