1. NIS的由来与功能

NISNetwork InformationService网络信息服务。用于对网络中的多台Linux系统的帐号和密码的集中管理和维护,也就是说可以用同一个帐号登录域中的Linux系统,不需要所登录的系统中存在该帐号,所有的帐号的管理都是由NIS服务器来完成的。

NIS主要提供了用户名、密码、用户的家目录、UID等信息的管理,但是并没有提供文件系统,因此还需要借助NFS,将用户的家目录共享出去。

NIS是由sun公司开发的,以前称为ypyellow page黄页),由于注册商标的问题,改为了NIS。但是软件包的名称依然是yp开头的。NISNFS一样也是依赖于RPC的,因此在使用NIS之前需要先安装RPC软件。

在一个大型的网络里面,如果所有的Linux系统都向NIS服务器进行用户名和密码的查询请求的话,则NIS服务器的负载会很大,同时也存在单点故障,为了提供高可靠性和可用性,建议对NIS服务器采用MasterSlave的架构。masterslave都可以为客户端提供查询的工作,对于数据库的更新,可以是master主动的告知,也可以是slave主动的要求向master

更新。nis client如果有登录需求时,先查询本地的/etc/passwd/etc/shadow档案,判断是否有相应的用户,如果有,则本地用户优先,如果没有则开始向NIS服务器查询,不管是master还是slave都可以提供客户端的查询,先响应者优先。

2. NIS的配置

2.1 软件安装

所需软件:

ypservNIS服务的主程序软件包

yp-tools:提供NIS客户端设置相关功能的软件包

ypbind:提供NIS客户端的查询指令功能的软件包

rpcbindrpc的主程序,必须的软件包。

软件安装:

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 ~]#

2.2 配置文件

/etc/ypserv.confNIS的主配置文件,用于规范客户端是否可以登录的权限问题。

/etc/hosts:记录了主机名和IP地址的对应关系。

/etc/sysconfig/network:定义NIS的域名。nisdomain

/var/yp/Makefile:建立数据库有关的文件。

相关的指令:

/etc/init.d/ypservNIS的主服务,用于NIS服务的启动、停止等

/etc/init.d/yppasswdd:用于让NIS客户端可以直接修改密码的服务。

/usr/lib64/yp/ypinit:建立数据库的指令,经常使用,32位系统位于/usr/lib/yp/ypinit

/usr/bin/yppasswdNIS客户端修改服务器上自己用户的密码的指令。

2.3 NIS的配置

2.3.1 服务器端的设置

步骤如下:

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域名的指令:ypdomainnamedomainnamenisdomainname。需要先启动ypserv服务。

[root@server1 ~]#ypdomainname

frame.com

[root@server1 ~]#nisdomainname

frame.com

[root@server1 ~]#domainname

frame.com

[root@server1 ~]#


2. 编辑主配置文件:/etc/ypserv.conf

该配置文件的部分内容的含义如下:

dnsyes|no。当/etc/hosts文件查找不到相应的记录时,是否采用DNS查找。yes表示使用DNSno表示不实用DNS

files 数字:设置nis服务器在启动的时候,会读取多少个数据库文件到内存中。默认为30.

xfr_check_port:yes/no设置主从nis服务器间复制数据库是否采用1024以下的端口。

接下来就是限制客户端或slave nis服务器查询的权限,分成4部分,格式如下:

主机名/ipNIS域名:可用数据库名称:安全限制

主机名/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服务器可以与主服务器同步数据库内容。

可用数据库名称:可用*代替所有的数据库

安全限制:主要有noneportdeny

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指令创建数据库,并重新启动ypservyppasswd服务。

2.3.2 NIS客户端的设置

所需软件:ypbindyp-tools

ypbind:提供与ypserv之间的通信

yp-tools:为客户端提供了一些查询的指令。

安装所需软件:

[root@server2 ~]#yum install -y ypbind* yp-tools*

启用NIS认证:

[root@server2 ~]#authconfig-tui

输入该指令后,将会显示如下信息:

wKiom1MYU1KRcVstAAHL6CB_LoM932.jpg

选择Use NIS,并NEXT

wKiom1MYU2WQoz2mAAGyGs0R6OQ671.jpg

wKioL1MYU1GSWLwHAACuuWZmPyM401.jpg

输入NISDOMAINNIS服务器的地址,并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.confypbind的配置文件,增加了domainserver内容。

cat /etc/nsswitch.conf,还增加了如下信息:

passwd:     files nis

shadow:     files nis

group:      files nis

先查找本地文件是否有相应的帐号,如果没有,则查找NIS服务器。

不过还是建议用authconfig-tui指令去修改,不要手动的修改上述文件。

2.3.3 NIS客户端的测试

NIS客户端可以通过如下指令测试是否连接到了NIS服务器。

指令:yptestypwhichypcat

还可以用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 ~]#


yptestyptest将会显示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的信息。

2.3.4 NFS共享家目录

服务器端设置:

[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……


3. NIS主从架构

3.1 NIS主服务器的设置

主从服务器的架构需要多启动一个称为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~]#  


3.2 NIS服务器的设置

安装所需软件:ypbindypservyp-toolsrpcbind

[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分钟执行一次。