NIS:Network InformationService网络信息服务。用于对网络中的多台Linux系统的帐号和密码的集中管理和维护,也就是说可以用同一个帐号登录域中的Linux系统,不需要所登录的系统中存在该帐号,所有的帐号的管理都是由NIS服务器来完成的。
NIS主要提供了用户名、密码、用户的家目录、UID等信息的管理,但是并没有提供文件系统,因此还需要借助NFS,将用户的家目录共享出去。
NIS是由sun公司开发的,以前称为yp(yellow page黄页),由于注册商标的问题,改为了NIS。但是软件包的名称依然是yp开头的。NIS和NFS一样也是依赖于RPC的,因此在使用NIS之前需要先安装RPC软件。
在一个大型的网络里面,如果所有的Linux系统都向NIS服务器进行用户名和密码的查询请求的话,则NIS服务器的负载会很大,同时也存在单点故障,为了提供高可靠性和可用性,建议对NIS服务器采用Master和Slave的架构。master和slave都可以为客户端提供查询的工作,对于数据库的更新,可以是master主动的告知,也可以是slave主动的要求向master
更新。nis client如果有登录需求时,先查询本地的/etc/passwd和/etc/shadow档案,判断是否有相应的用户,如果有,则本地用户优先,如果没有则开始向NIS服务器查询,不管是master还是slave都可以提供客户端的查询,先响应者优先。
所需软件:
ypserv:NIS服务的主程序软件包
yp-tools:提供NIS客户端设置相关功能的软件包
ypbind:提供NIS客户端的查询指令功能的软件包
rpcbind:rpc的主程序,必须的软件包。
软件安装:
yum install -yypserv* yp-tools* ypbind* rpcbind*
[root@server1 ~]#rpm -qa | grep -E "ypserv|yp-tools|ypbind|rpcbind"
ypbind-1.20.4-29.el6.x86_64
ypserv-2.19-22.el6.x86_64
rpcbind-0.2.0-9.el6.x86_64
yp-tools-2.9-12.el6.x86_64
[root@server1 ~]#
/etc/ypserv.conf:NIS的主配置文件,用于规范客户端是否可以登录的权限问题。
/etc/hosts:记录了主机名和IP地址的对应关系。
/etc/sysconfig/network:定义NIS的域名。nisdomain
/var/yp/Makefile:建立数据库有关的文件。
相关的指令:
/etc/init.d/ypserv:NIS的主服务,用于NIS服务的启动、停止等
/etc/init.d/yppasswdd:用于让NIS客户端可以直接修改密码的服务。
/usr/lib64/yp/ypinit:建立数据库的指令,经常使用,32位系统位于/usr/lib/yp/ypinit。
/usr/bin/yppasswd:NIS客户端修改服务器上自己用户的密码的指令。
步骤如下:
1. 设置NIS域名和每次启动该服务时都启动在固定的端口,配置文件:/etc/sysconfig/network
增加如下信息:
NISDOMAIN=:设置NIS域名
YPSERV_ARGS=”-p <port>”:NIS服务每次启动在固定的port端口。
[root@server1 ~]#cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=server1
GATEWAY=172.17.100.1
NISDOMAIN=frame.com
YPSERV_ARGS="-p 1011"
[root@server1 ~]#
查看NIS域名的指令:ypdomainname、domainname、nisdomainname。需要先启动ypserv服务。
[root@server1 ~]#ypdomainname
frame.com
[root@server1 ~]#nisdomainname
frame.com
[root@server1 ~]#domainname
frame.com
[root@server1 ~]#
2. 编辑主配置文件:/etc/ypserv.conf
该配置文件的部分内容的含义如下:
dns:yes|no。当/etc/hosts文件查找不到相应的记录时,是否采用DNS查找。yes表示使用DNS,no表示不实用DNS。
files 数字:设置nis服务器在启动的时候,会读取多少个数据库文件到内存中。默认为30.
xfr_check_port:yes/no设置主从nis服务器间复制数据库是否采用1024以下的端口。
接下来就是限制客户端或slave nis服务器查询的权限,分成4部分,格式如下:
主机名/ip:NIS域名:可用数据库名称:安全限制
主机名/ip:可以是 network/netmask, 如192.168.1.0/255.255.255.0,也可以是192.168.这种格式表示的是192.168.0.0/255.255.0.0,还可以是单台主机,如192.168.1.1
NIS域名:指定nis域名。在同一个NIS域中,客户端可以从NIS服务器上查询用户名和密码,SlaveNIS服务器可以与主服务器同步数据库内容。
可用数据库名称:可用*代替所有的数据库
安全限制:主要有none、port、deny
none:没有任何安全限制,均可以连接nis服务器。
port:只允许使用小于1024以下的端口连接nis服务器。
deny:拒绝连接nis服务器。
常用设置如下:
127.0.0.0/255.255.25.0 : * : * : none
192.168.1.0/255.255.255.0 : * : * : none
* : * : * :deny
[root@server1 ~]#more /etc/ypserv.conf | grep -v"^$" | grep -v "^#"
dns: yes
files: 30
xfr_check_port: yes
127.0.0.0/255.255.0.0 : frame.com : * : none
172.17.100.0/255.255.255.0 : frame.com : * : none
* : * : * : deny
[root@server1 ~]#
3. 设置主机名和IP地址的对应关系:/etc/hosts
如果网络中不存在DNS的话,需要设置主机名和IP地址的对应关系。
[root@server1 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4localhost4.localdomain4
::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain6
172.17.100.253 server2
172.17.100.254 server1
[root@server1 ~]#
4. 设置yppasswdd服务启动在固定端口:/etc/sysconfig/yppasswdd
YPPASSWDD_ARGS="--port1012"
让yppasswdd服务启动在固定的1012端口。
5. 设置可以访问NIS服务器的网段:/var/yp/securenets
该文件不存在,需要手动的创建。
该文件的格式如下:
netmask network
[root@server1 ~]#cat /var/yp/securenets
255.255.255.0 172.17.100.0
[root@server1 ~]#
只允许172.17.100.0/24网段内的客户端访问NIS服务器。
6. 启动服务
[root@server1 ~]#/etc/init.d/ypserv restart
Stopping YP serverservices: [FAILED]
Starting YP serverservices: [ OK ]
[root@server1 ~]#/etc/init.d/yppasswdd restart
Stopping YP passwdservice: [FAILED]
Starting YP passwdservice: [ OK ]
[root@server1 ~]#
7. 查看服务监听的端口
[root@server1 ~]#netstat -tunlp | grep -E "ypserv|yppasswdd"
tcp 0 0 0.0.0.0:1011 0.0.0.0:* LISTEN 7571/ypserv
udp 0 0 0.0.0.0:1011 0.0.0.0:* 7571/ypserv
udp 0 0 0.0.0.0:1012 0.0.0.0:* 7591/rpc.yppasswdd
[root@server1 ~]#
8. 防火墙放行相应的端口
17 ACCEPT tcp -- 172.17.100.0/24 172.17.100.254 multiport dports 1011,1012
18 ACCEPT udp -- 172.17.100.0/24 172.17.100.254 multiport dports 1011:1012
9. 建立测试帐号
[root@server1 ~]#grep -E "nis1|nis2" /etc/passwd
nis1:x:1001:1001::/home/nis1:/bin/bash
nis2:x:1002:1002::/home/nis2:/bin/bash
[root@server1 ~]#
10. 建立数据库
将建立的帐号信息转换成数据库:/usr/lib64/yp/ypinit
A. /usr/lib64/yp/ypinit -m
[root@server1 ~]#/usr/lib64/yp/ypinit -m
At this point, wehave to construct a list of the hosts which will run NIS
servers. server1 is in the list of NIS serverhosts. Please continue to add
the names for theother hosts, one per line. When you aredone with the
list, type a<control D>.
next host to add: server1
next host to add:
next host to add:
The current list ofNIS servers looks like this:
server1
Is thiscorrect? [y/n: y] y
We need a fewminutes to build the databases...
Building/var/yp/frame.com/ypservers...
Running/var/yp/Makefile...
gmake[1]: Enteringdirectory `/var/yp/frame.com‘
Updatingpasswd.byname...
Updatingpasswd.byuid...
Updatinggroup.byname...
Updatinggroup.bygid...
Updatinghosts.byname...
Updatinghosts.byaddr...
Updatingrpc.byname...
Updatingrpc.bynumber...
Updatingservices.byname...
Updatingservices.byservicename...
Updatingnetid.byname...
Updatingprotocols.bynumber...
Updatingprotocols.byname...
Updatingmail.aliases...
gmake[1]: Leavingdirectory `/var/yp/frame.com‘
server1 has beenset up as a NIS master server.
Now you can runypinit -s server1 on all slave server.
[root@server1 ~]#
直接输入y,回车就可以了。如果出现错误,根据提示,缺少什么文件创建什么文件。然后在执行一次上述指令就可以了。
注意:如果你的用户名或密码信息有变动过的话,那么需要重新使用/usr/lib64/yp/ypinit –m指令创建数据库,并重新启动ypserv和yppasswd服务。
所需软件:ypbind和yp-tools
ypbind:提供与ypserv之间的通信
yp-tools:为客户端提供了一些查询的指令。
安装所需软件:
[root@server2 ~]#yum install -y ypbind* yp-tools*
启用NIS认证:
[root@server2 ~]#authconfig-tui
输入该指令后,将会显示如下信息:
选择Use NIS,并NEXT
输入NISDOMAIN和NIS服务器的地址,并OK
选择OK,并回车后,将会显示如下信息:
Starting rpcbind:[ OK ]
Starting NISservice: [ OK ]
Binding NISservice: .[ OK ]
[root@server2 ~]#
这里系统会自动启动一些服务。
查看使用该指令后,修改了哪些文件:
[root@server2 ~]#cat /etc/sysconfig/network
HOSTNAME=server2
NETWORKING=yes
GATEWAY=172.17.100.1
NISDOMAIN=frame.com
[root@server2 ~]#
增加了NISDOMAIN的信息。
[root@server2 ~]#cat /etc/yp.conf
domainframe.com server 172.17.100.254
[root@server2 ~]#
yp.conf为ypbind的配置文件,增加了domain和server内容。
cat /etc/nsswitch.conf,还增加了如下信息:
passwd: files nis
shadow: files nis
group: files nis
先查找本地文件是否有相应的帐号,如果没有,则查找NIS服务器。
不过还是建议用authconfig-tui指令去修改,不要手动的修改上述文件。
NIS客户端可以通过如下指令测试是否连接到了NIS服务器。
指令:yptest、ypwhich、ypcat
还可以用id指令来查看客户端没有而服务器端有的帐号。
[root@server2 ~]#id nis1
uid=1001(nis1)gid=1001(nis1) groups=1001(nis1)
[root@server2 ~]#id nis2
uid=1002(nis2)gid=1002(nis2) groups=1002(nis2)
[root@server2 ~]#grep -E "nis1|nis2" /etc/passwd
[root@server2 ~]#
yptest:yptest将会显示NIS服务器上存在而客户端不存在的帐号。
Test 9: yp_all
nis1nis1:!!:1001:1001::/home/nis1:/bin/bash
ftpuserftpuser:$6$MUAdz6bR$YXfeo.A20JVNozivBAFIRf3m29/jVsJDC5whU7bFqFBgof44ObnCayaKOdViXqzf7tywHi9zOaNETkhbpb7qP1:501:501::/ftp-directory:/sbin/nologin
frameframe:$6$fryQPKEC$7Pply7.wdhIiIespOAlOm5LCvhp1ymgInm8vxnlJQZRLsGetswcJv/P.EAX43HEX3RPA8CrTgn6.Zds6xpNn81:500:500::/home/frame:/bin/bash
nis2nis2:!!:1002:1002::/home/nis2:/bin/bash
1 tests failed
[root@server2 ~]#
客户端还可以使用的使用有:
yppasswd:与passwd的指令的功能相同。
ypchfn:与chfn的功能相同。
ypchsh:与chsh的功能相同。
客户端登录测试:
[root@server2 ~]#
[root@server2 ~]#su - nis1
su: warning: cannotchange directory to /home/nis1: No such file or directory
-bash-4.1$
由于找不到nis1用户的家目录信息,因此会出现-bash的信息。
服务器端设置:
[root@server1 ~]#more /etc/exports
/ftp-directory 172.17.100.0/24(rw,all_squash,anonuid=501,anongid=501)
/home/nis1 172.17.100.253/24(rw)
[root@server1 ~]#
客户端设置:
[root@server2 ~]# mkdir /home/nis1
[root@server2 ~]# mount -t nfs nfs.frame.com:/home/nis1 /home/nis1
[root@server2 ~]#su - nis1
[nis1@server2 ~]$id
uid=1001(nis1)gid=1001(nis1) groups=1001(nis1)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[nis1@server2 ~]$
NFS+autofs,自动挂载:
A. /etc/auto.master文件增加如下内容:
/- /etc/auto.nis
B. 创建/etc/auto.nis文件,并增加如下内容:
/home/nis1 -fstype=nfs nfs.frame.com:/home/nis1
C. 重启autofs服务
[root@server2 ~]#/etc/init.d/autofs stop
Stopping automount:[ OK ]
[root@server2 ~]#/etc/init.d/autofs start
Starting automount:[ OK ]
[root@server2 ~]#
测试:
[root@server2 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 6.3G 11G 38% /
tmpfs 244M 0 244M 0% /dev/shm
/dev/sda1 194M 32M 153M 18% /boot
[root@server2 ~]#su - nis1
[nis1@server2 ~]$df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 6.3G 11G 38% /
tmpfs 244M 0 244M 0% /dev/shm
/dev/sda1 194M 32M 153M 18% /boot
nfs.frame.com:/home/nis1
20G 7.5G 11G 41% /home/nis1
[nis1@server2 ~]$
OK……
主从服务器的架构需要多启动一个称为ypxfrd的服务。
修改/etc/sysconfig/network文件,设置ypxfrd服务启动的固定端口:
增加如下内容:
YPXFRD_ARGS="-p 1013"
如下所示:
[root@server1 ~]#cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=server1
GATEWAY=172.17.100.1
NISDOMAIN=frame.com
YPSERV_ARGS="-p1011"
YPXFRD_ARGS="-p 1013"
[root@server1 ~]#
修改/var/yp/ypservers文件,第一个为master NIS服务器,第二个为Slave NIS服务器:
[root@server1 ~]#cat /var/yp/ypservers
server1
server2
[root@server1 ~]#
修改防火墙的规则,放行ypxfrd所启动的固定端口:
17 ACCEPT tcp -- 172.17.100.0/24 172.17.100.254 multiport dports 1011:1013
18 ACCEPT udp -- 172.17.100.0/24 172.17.100.254 multiport dports 1011:1013
启动服务:
[root@server1 ~]#/etc/init.d/ypserv restart
Stopping YP serverservices: [ OK ]
Starting YP serverservices: [ OK ]
[root@server1 ~]#/etc/init.d/yppasswdd restart
Stopping YP passwdservice: [ OK ]
Starting YP passwdservice: [ OK ]
[root@server1 ~]#/etc/init.d/ypxfrd restart
Stopping YP mapserver: [FAILED]
Starting YP mapserver: [ OK ]
[root@server1~]#
安装所需软件:ypbind、ypserv、yp-tools、rpcbind
[root@server2 ~]#yum install -y ypserv* ypbind* yp-tools* rpcbind
设置NISDOMAIN,编辑/etc/sysconfig/network文件,增加如下内容:
YPSERV_ARGS="-p1011"
YPXFRD_ARGS="-p1013"
设置如下:
[root@server2 ~]# cat /etc/sysconfig/network
HOSTNAME=server2
NETWORKING=yes
GATEWAY=172.17.100.1
NISDOMAIN=frame.com
YPSERV_ARGS="-p 1011"
YPXFRD_ARGS="-p 1013"
[root@server2 ~]#
修改yppasswdd服务所启动的固定端口:
编辑配置文件/etc/sysconfig/yppasswdd,增加如下内容:
YPPASSWDD_ARGS="--port1012"
启动服务:
[root@server2 ~]#/etc/init.d/ypserv restart
Stopping YP serverservices: [FAILED]
Starting YP serverservices: [ OK ]
[root@server2 ~]#/etc/init.d/yppasswdd restart
Stopping YP passwdservice: [FAILED]
Starting YP passwdservice: [ OK ]
[root@server2 ~]#/etc/init.d/ypxfrd restart
Stopping YP mapserver: [FAILED]
Starting YP mapserver: [ OK ]
[root@server2 ~]#
同步数据库:
指令:/usr/lib64/yp/ypinit -s <NIS主服务器地址>
[root@server2 ~]#/usr/lib64/yp/ypinit -s 172.17.100.254
We will need a fewminutes to copy the data from 172.17.100.254.
Transferringprotocols.bynumber...
Trying ypxfrd ...success
Transferringnetid.byname...
Trying ypxfrd ...success
Transferringrpc.bynumber...
Trying ypxfrd ...success
Transferringrpc.byname...
Trying ypxfrd ...success
Transferringprotocols.byname...
Trying ypxfrd ...success
Transferringgroup.byname...
Trying ypxfrd ...success
Transferringhosts.byname...
Trying ypxfrd ...success
Transferringservices.byname...
Trying ypxfrd ...success
Transferringpasswd.byuid...
Trying ypxfrd ...success
Transferringypservers...
Trying ypxfrd ...success
Transferringhosts.byaddr...
Trying ypxfrd ...success
Transferringservices.byservicename...
Trying ypxfrd ...success
Transferringpasswd.byname...
Trying ypxfrd ...success
Transferringmail.aliases...
Trying ypxfrd ...success
Transferringgroup.bygid...
Trying ypxfrd ...success
server2‘s NIS database has been set up.
If there werewarnings, please figure out what went wrong, and fix it.
At this point, makesure that /etc/passwd and /etc/group have
been edited so thatwhen the NIS is activated, the data bases you
have just createdwill be used, instead of the /etc ASCII files.
[root@server2 ~]#
当出现success的字样时,则表示同步成功。
查看传输的数据:在/var/yp/<nis-domain>目录下
[root@server2 ~]#ll /var/yp/frame.com/
total 2900
-rw-------. 1 rootroot 12477 Mar 6 18:35 group.bygid
-rw-------. 1 rootroot 12483 Mar 6 18:35 group.byname
-rw-------. 1 rootroot 12642 Mar 6 18:35 hosts.byaddr
-rw-------. 1 rootroot 12835 Mar 6 18:35 hosts.byname
-rw-------. 1 rootroot 13171 Mar 6 18:35 mail.aliases
-rw-------. 1 rootroot 13492 Mar 6 18:35 netid.byname
-rw-------. 1 rootroot 12781 Mar 6 18:35 passwd.byname
-rw-------. 1 rootroot 12774 Mar 6 18:35 passwd.byuid
-rw-------. 1 rootroot 28950 Mar 6 18:35 protocols.byname
-rw-------. 1 rootroot 14660 Mar 6 18:35 protocols.bynumber
-rw-------. 1 rootroot 16381 Mar 6 18:35 rpc.byname
-rw-------. 1 rootroot 14233 Mar 6 18:35 rpc.bynumber
-rw-------. 1 rootroot 1134592 Mar 6 18:35 services.byname
-rw-------. 1 rootroot 1601575 Mar 6 18:35services.byservicename
-rw-------. 1 rootroot 12349 Mar 6 18:35 ypservers
[root@server2 ~]#
当Master NIS服务器上的数据库发生变化时,Slave NIS服务器的数据库就会不同步,可以用ypxfr进行数据库的同步。
ypxfr的用法:
/usr/lib64/yp/ypxfr -h <Master NIS服务器的主机名或IP> 数据库文件
如:
/usr/lib64/yp/ypxfr -h server1 passwd.byname
可以写一个计划任务,让系统自动的进行数据库的同步工作。
*/5 * * * * /usr/lib64/yp/ypxfr–h server1 passwd.byname
*/5 * * * * /usr/lib64/yp/ypxfr–h server1 passwd.byuid
每隔5分钟执行一次。
本文出自 “HeZhang” 博客,请务必保留此出处http://hezhang.blog.51cto.com/1347601/1369422
原文:http://hezhang.blog.51cto.com/1347601/1369422