一、Nis服务器作用:
NIS服务的应用结构分为NIS服务器和NIS客户机两种角色,NIS服务器集中维护用户的帐号信息(数据库)供NIS客户机进行查询,用户登录任何一台NIS客户机都会从NIS服务器进行登录认证,可实现用户帐号的集中管理。
二、整个Nis的运作流程:
Nis Server(Master/Slave)
1.Nis Master先将帐号密码相关文件制作成数据库文件;
2.Nis Master可以主动告诉Nis Slave来更新;
3.Nis Slave亦可以主动前往Nis Master取得更新;
4.若有帐号密码变动时,需要重新制作数据库文件并重新同步Master/Slave。
Nis Client
1.NIS client 若有登入需求时,会先查询其本机的 /etc/passwd, /etc/shadow 等档案;
2.若在 NIS Client 本机找不到相关的账号数据,才开始向整个 NIS 网域的主机广播查询;
3.每部 NIS server (不论 master/slave) 都可以响应,基本上是『先响应者优先』。
三、Nis环境大体组件:
1.Nis Master Server:将文件建成数据库,并提供给Slave Server来更新;
2.Nis Slave Server:以Master Server的数据库作为本身的数据库来源;
3.Nis Client:向Master/Slave 请求登陆者的验证数据。
Nis服务器所提供信息如下:
服务器端文件名 | 档案内容 |
/etc/passwd | 提供用户账号、UID、GID、家目录所在、Shell 等等 |
/etc/group | 提供群组数据以及 GID 的对应,还有该群组的加入人员 |
/etc/hosts | 主机名与 IP 的对应,常用于 private IP 的主机名对应 |
/etc/services | 每一种服务 (daemons) 所对应的端口号 (port number) |
/etc/protocols | 基础的 TCP/IP 封包协定,如 TCP, UDP, ICMP 等 |
/etc/rpc | 每种 RPC 服务器所对应的程序号码 |
/var/yp/ypservers | NIS 服务器所提供的数据库 |
架设环境:
一台Master Server :Centos 5.9
一台Slave Server :Centos 5.9
一台Client :Centos 5.9 (所有客户端配置一样,所以这里用一台)
配置步骤:
1.1:所需软件
-
yp-tools :提供 NIS 相关的查寻指令功能
-
ypbind :提供 NIS Client 端的设定软件
-
ypserv :提供 NIS Server 端的设定软件
-
portmap :这是 RPC必须的软件!
可以用rpm -qa | grep "^yp"来检查是否有安装ypserv;一般来说 yp-tools, ypbind 都会主动的安装,此时建议用{yum install ypserv}来安装。
1.2:Nis 服务器相关配置文件
配置文件 | |
/etc/ypserv.conf | 这是最主要的 ypserv 软件所提供的配置文件,可以规范 NIS 客户端是否可登入的权限。 |
/etc/hosts | 由于 NIS server/client 会用到网络主机名与 IP 的对应,因此这个主机名对应档就显的相当重要!每一部主机名与 IP 都需要记录才行! |
/etc/netgroup | 提供组数据及GID的对应。 |
/etc/sysconfig/network | 可以在这个档案内指定 NIS 的网域 (nisdomainname)。 |
/var/yp/Makefile | 这就是与建立数据库有关的动作配置文件; |
主要服务方面 | |
/usr/sbin/ypserv | 就是 NIS 服务器的主要提供服务 |
/ust/sbin/rpc.ypxfrd | 用于Master/Slave主机之间的传输数据库的服务。 |
/usr/sbin/rpc.yppasswdd | 提供额外的 NIS 客户端之用户密码修改服务, 透过这个服务, NIS 客户端可以直接修改在 NIS 服务器上的密码。相关的使用程序则是 yppasswd 指令; |
数据库相关指令 | |
/usr/lib64/yp/ypinit | 建立数据库的指令,非常常用 (在 32 位的系统下,文件名则是 /usr/lib/yp/ypinit ); |
/usr/bin/yppasswd | 与 NIS 客户端有关,主要在让用户修改服务器上的密码。 |
/usr/sbin/yppush | master 主机将数据库直接送至 slave 的指令; |
/usr/lib/yp/ypxfr | 传送数据库的指令,在该目录下尚有 ypxfr_1perday, ypxfr_1perhour, ypxfr_2perday 等等。 |
实做案例:
NIS 的域名为:abc
整个内部的信任网域为: 192.168.100.0/24
NIS master server 的 IP为:192.168.100.254 ,主机名为:master.abcnis
NIS slave server的IP为:192.168.100.253,主机名为:slave.abcnis
NIS client 的 IP 为 192.168.100.10,主机名为:client01.abcnis
Master Nis Server的设定与启动
# yum -y install yp-tools* #安装提供NIS相关的查询命令组件
# yum -y install ypbind* #安装提供NISClient端的设置组件
# yum -y install ypserv* #安装提供NISServer端的设置组件
# yum -y install portmap* #安装RPC必须的组件
1.先设定Nis的域名(Nis Domain Name)
# nisdomainname abc #使用nisdomainname命令设置NIS域名
# nisdomainname #不添加参数的时候直接输出当前域名
abc
# vim /etc/rc.d/rc.local
添加:
/bin/nisdomainname abc #设定开机启动abc域名
# vim/etc/sysconfig/network
添加:
NISDOMAIN=abc #开机或者启动NIS相关服务时NIS域名就自己设定了
YPSERV_ARGS="-P 1011" #设定NIS每次都启动在固定的端口
Tips:其实 nisdomainname 与 ypdomainname 及 domainname 都是一模一样的指令!你只要记住一个指令名称即可。
不过,这个指令现在大概只用来检查设定是否正确,因为启动 NIS 服务器时,服务器去捉取的数据就是从 network 这个档案里面捉取的!所以只要改这个配置文件即可啊!
另外,由于未来想使用 iptables 直接管理 NIS 的使用,因此我们想要控制 NIS 启动在固定的端口上。此时, 就使用『YPSERV_ARGS="-p 1011"』这个设定值来固定端口在 1011 上!
2.主要配置文件 /etc/ypserv.conf
#vim /etc/ypserv.conf
Dns:no #DNS服务器是否开启;NIS 服务器大多使用于内部局域网络,只要有 /etc/hosts 即可,所以不用 DNS !
Files:30 #默认会有30个数据库被读入内存中
Slp:no
Slp_timeout:3600 #与SLP服务有关
Xfr_check_port:yes #与Master/Slave有关,用于同步更新的数据库比对所使用的端口,放置于 <1024内。
# 底下则是设定限制客户端或 slave server 查询的权限,利用冒号隔成四部分:
# [主机名/IP] : [NIS域名] : [可用数据库名称] : [安全限制]
127.0.0.0/255.255.255.0 : * :* : none
192.168.100.0/255.255.255.0 : * : * : none
* :* : * : deny
# 还有一个简单作法,你可以先将上面三行批注,然后加入底下这一行即可:(当然也可以依据自己的需求设定)
* : * : * : none
3.设定主机名与IP的对应(/etc/hosts)
#vim /etc/hosts
# 原本就有的 localhost 与 127.0.0.1 之类的设定都不要更动,只要新增数据:
192.168.100.254 master.abcnis
192.168.100.253 slave.abcnis
192.168.100.10 client01.abcnis
Tips:注意!如果你的主机名 (hostname) 与 NIS 的域名不一样,那么在这个档案当中还是需要将你的主机名给他设定进来! 否则在后面数据库的设定时,肯定会发生问题。
4.建立信任群组(/etc/netgroup)
touch /etc/netgroup
格式:
主机,用户账户,域名称 #每一行都有三个字段,分别以逗号『,』隔开;如果是空的话默认接受所有。
Tips:现在比较新的Distributions都可以略过这个档案的检查了,不过建议了解一下,只需建立即可。(本来是不存在的!) 5.启动观察所有相关服务
为了让 yppasswdd 启动在固定的端口,方便防火墙的管理, 因此,建议你可以设定一下 /etc/sysconfig/yppasswdd
# vim /etc/sysconfig/yppasswdd
YPPASSWDD_ARGS="--port 1012" <==找到这个设定值,修改一下内容成这样!
# /etc/init.d/portmapstart #启动RPC必须服务
# /etc/init.d/ypservstart #启动NIS服务器提供的主要服务
# /etc/init.d/yppasswddstart #启动client修改密码服务
# rpcinfo -p localhost #启动后rpcinfo查看
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 952 status
100024 1 tcp 955 status
100009 1 udp 828 yppasswdd
100004 2 udp 1012 ypserv
100004 1 udp 1012 ypserv
100004 2 tcp 1015 ypserv
100004 1 tcp 1015 ypserv
# rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
6.处理帐号并建立数据库
在完成了上面的所有步骤后,接下来我们得要开始将主机上面的账号档案转成数据库档案啦!
不过,因为担心与 NIS 客户端的账号有冲突,加上之前我们已经建立过一些账号了。所以,这里我们的新账号使用大于1000的UID来建立。
#useradd -u 1001 nisuser1
#useradd -u 1002 nisuser2
#echo password | passwd --stdin nisuser1 #给nisuser1设定密码
#echo password | passwd --stdin nisuser2 #给nisuser2设定密码
接下来,将建立的帐密数据转成数据库吧!
#/usr/lib/yp/ypinit –m #建立数据库
-
At this point, we have to construct a list of the hosts which will run NIS
-
servers. master.abcnis 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.abcnis <==系统根据主机名自动捉取
-
next host to add: <==这个地方按下 [crtl]-d
-
he current list of NIS servers looks like this:
-
master.abcnis
-
Is this correct? [y/n: y] y
-
We need a few minutes to build the databases...
-
Building /var/yp/abc/ypservers...
-
Running /var/yp/Makefile...
-
gmake[1]: Entering directory `/var/yp/abc'
-
Updating passwd.byname...
-
……………………………………………………
-
Updating protocols.byname...
-
Updating mail.aliases...
-
gmake[1]: Leaving directory `/var/yp/abc'
-
master.abcnis has been set up as a NIS master server.
-
Now you can run ypinit -s master.abcnis on all slave server.
要注意出现的信息当中,在告知你可以直接输入 [ctrl]-d 以结束的那个地方, 你的主机名会主动的被捉出来。
注意!这个主机名务必需要在 /etc/hosts 可以被找到 IP 的对应, 否则会出现问题。
另外,万一在执行 ypinit -m 时,出现如下的错误,那肯定就是有些数据没有被建立了!
-
gmake[1]: *** No rule to make target `/etc/aliases\', needed by `mail.aliases\'. Stop.
-
gmake[1]: Leaving directory `/var/yp/abcnis\
-
make: *** [target] Error 2
-
Error running Makefile.
-
Please try it by hand.
-
[root@www ~]# touch /etc/aliases # 解决方法很简单吶!缺少什么档案,就 touch 他就是了!
-
[root@www ~]# /usr/lib64/yp/ypinit -m # 然后再重新执行一次即可!
7.重启服务,以告知数据库已经被更改了。
# /etc/init.d/ypservrestart
# /etc/init.d/yppasswddrestart
Tips:如果你的用户密码有变动过,那么你就得要重新制作数据库,重新启动 ypserv 及 yppasswdd !!!
8.与Slave Nis Server有关的一些设定
当我们执行了 ypinit -m 之后,所有的主机上面的账号相关档案会被转成数据库档案, 这些数据库会被放置到 /var/yp/"nisdomainname" 当中,
我们的 nisdomainname 是 abcnis , 所以被建立的数据库通通被放置到 /var/yp/abcnis/ 目录中!您可以自行去检查看看。
若变更了使用者帐号密码参数,针对这个档案进行数据库更新:
# cd /var/yp/
# make passwd
开启Slave服务推送
#vim/var/yp/Makefile
更改NOPUSH=false
指定Slave服务主机
#vim /var/yp/ypservers
master.abcnis
slave.abcnis #告诉master要把数据给谁
启动 ypxfrd服务
# /etc/init.d/ypxfrd start #可以让 slave 服务器主动链接上 ypxfrd 来更新数据库, 可以免除系统管理原自己手动更新
此外,如果 master 机器想要直接将某些特定的数据库直接传给 slave 主机的话, 那么可以使用 yppush 这个指令。
例如:#yppush -h slave.abcnis passwd.*
Slave Nis Server的设定与启动
# yum -y install yp-tools* #安装提供NIS相关的查询命令组件
# yum -y install ypbind* #安装提供NISClient端的设置组件
# yum -y install ypserv* #安装提供NISServer端的设置组件
# yum -y install portmap* #安装RPC必须的组件
1.设定NIS域名
#nisdomainname abc #使用nisdomainname命令设置NIS域名
# vim /etc/rc.d/rc.local
添加:/bin/nisdomainname abc #设定开机启动sunnorth域名
# vim/etc/sysconfig/network
添加:NISDOMAIN=abc #开机或者启动NIS相关服务时NIS域名就自己设定了
2.配置主要配置文件 /etc/ypserv.conf
#vim /etc/ypserv.conf
添加:
127.0.0.0/255.255.255.0 : * : * : none
172.20.48.0/255.255.252.0 : * : * : none
* : * : * : deny
3.设定 /etc/hosts 和 /etc/netgroup
#touch /etc/netgroup
#vim /etc/hosts
192.168.100.254 master.abcnis
192.168.100.253 slave.abcnis
192.168.100.10 client01.abcnis
启动所有服务及建立数据库
# /etc/init.d/portmap start
# /etc/init.d/ypserv start
# /usr/lib/yp/ypinit -s master.abcnis #取得来源于数据库的文件
虽然使用上头的指令事实上会出现有错误的信息,就是那个『Trying ypxfrd ... not running』的信息, 但事实上数据库的转移还是成功的!不相信的话,你可以使用底下这个指令来测试一下数据库是否正确:
# ypcat -h localhost passwd.byname
如果有正确的输出账号/密码数据输出的话,就OK了。
4.设置数据同步时间(master端要启动ypxfrd)
# vim /etc/crontab
# 在最后加入以 ypxfr 传输数据的 script 喔!
*/5 * * * * /usr/lib64/yp/ypxfr –h master.abcnis passwd.byname
*/5 * * * * /usr/lib64/yp/ypxfr –h master.abcnis passwd.byuid
更改配置:
# vim /usr/lib/yp/ypxfr_1perday
# vim /usr/lib/yp/ypxfr_1perhour
# vim /usr/lib/yp/ypxfr_2perday
$YPBINDIR/ypxfr $map -h master.abcnis
Client端的设定
Client端所需软件:
# yum -y install ypbind* # ypbind 是与 ypserv 互相沟通的客户端联机软件
# yum -y install yp-tools* #yp-tools 是提供查询的软件
客户端相关文档: | |
/etc/sysconfig/network | NIS 的领域名 |
/etc/hosts | 至少需要有各个 NIS 服务器的 IP 与主机名对应; |
/etc/yp.conf | 这个则是 ypbind 的主要配置文件,里面主要设定 NIS 服务器所在 |
/etc/sysconfig/authconfig | 规范账号登入时的允许认证机制 |
/etc/pam.d/system-auth | 这个最容易忘记!因为账号通常由 PAM 模块所管理, 所以你必须要在 PAM 模块内加入 NIS 的支持才行! |
/etc/nsswitch.conf | 这个档案可以规范账号密码与相关信息的查询顺序,默认是先找 /etc/passwd 再找 NIS 数据库 |
客户端相关指令: | |
/usr/bin/yppasswd | 更改你在 NIS database (NIS Server 所制作的数据库) 的密码 |
/usr/bin/ypchsh | 同上,但是是更改 shell |
/usr/bin/ypchfn | 同上,但是是更改一些用户的讯息! |
Nis Client 的设定与启动
启动 NIS client 的设定就简单多了!最主要是加入 NIS domain 当中,然后再启动 ypbind 即可。
虽然你可以手动去修改所有的配置文件,然而近期以来的 Linux distributions 账号处理机制越来越复杂, 所以如果你想要手动修改所有配置文件,恐怕会疯掉的~
因此,这里建议你使用系统提供的工具来设定, 至于一些重要配置文件,最后有机会再去参考一下即可。
设定好NIS Domain 以及 /etc/hosts主机名对应
# nisdomainname abc
# vim /etc/rc.d/rc.local
添加:/bin/nisdomainname abc #设定开机启动sunnorth域名
# vim/etc/sysconfig/network
添加:NISDOMAIN=abc #开机或者启动NIS相关服务时NIS域名就自己设定了
#vim/etc/hosts #设置主机名称
添加:
192.168.100.254 master.abcnis
192.168.100.253 slave.abcnis
192.168.100.10 client01.abcnis
启动ypbind来连接至Nis Server
#setup #执行setup后以下图方式处理;
选择《Authentication Configuration》后,出现下图:
因为我们要用NIS作为登入者身份验证的机制,因此选择Use NIS;
最后再填写 NIS 网域 (Domain) 以及 NIS 服务器的 IP (Server),按下确定即可。
如果你真的想要手动处理的话, 那么你必须要手动的修改底下这些档案:
-
/etc/sysconfig/network (加入 NISDOMAIN 项目)
-
/etc/nsswitch.conf (修改许多主机验证功能的顺序)
-
/etc/sysconfig/authconfig (CentOS 的认证机制)
-
/etc/pam.d/system-auth (许多登入所需要的 PAM 认证过程)
-
/etc/yp.conf (亦即是 ypbind 的配置文件)
NIS Client端的检验:yptest , ypwhich , ypcat
如何确定 NIS client 已经连上 NIS server 呢?基本上,只要刚刚使用 setup 去设定时,最后的步骤并没有被卡住, 那应该就是顺利成功啦!该步骤会自动启动portmap 与 ypbind 两个服务。
1.利用yptest检验数据库测试:
直接在NIS Client输入yptest 即可检查相关的测试数据;
-
[root@clientlinux ~]# yptest
-
Test 1: domainname
-
Configured domainname is \"abc\"
-
Test 2: ypbind
-
Used NIS server: master.abcnis
-
Test 3: yp_match
-
WARNING: No such key in map (Map passwd.byname, key nobody)
-
....(中间省略)....
-
Test 6: yp_master
-
master.abcnis
-
....(中间省略)....
-
Test 8: yp_maplist
-
passwd.byname
-
protocols.byname
-
hosts.byaddr
-
hosts.byname
-
....(中间省略)....
-
Test 9: yp_all
-
nisuser1 nisuser1:$1$U9Gccb60$K5lDQ.mGBw9x4oNEkM0Lz/:1001:1001::/home/nisuser1:/bin/bash
-
....(中间省略)....
-
1 tests failed
从这个测试当中我们可以发现一些错误,就是在 Test 3 出现的那个警告信息啦。还好,那只是说没有该数据库而已~ 该错误是可以忽略的。
重点在第 9 个步骤 yp_all 必须要有列出你 NIS server 上头的所有帐户信息,如果有出现账号相关数据的话,那么应该就算验证成功了!
2.利用ypwhich检验数据库数量:
单纯使用 ypwhich 的时候显示的是『NIS Client 的 domain』名称,而当加入 -x 这个参数时, 则是显示『NIS Client 与 Server 之间沟通的数据库有哪些?』
3.利用ypcat读取数据库内容:
#ypcat [-h nisserver] [数据库名称] 选项与参数:
-h nisserver :如果有设定的话,指向某一部特定的 NIS 服务器,如果没有指定的话,就以 ypbind 之设定为主;
数据库名称:亦即在 /var/yp/vbirdnis/ 内的档名啊!例如 passwd.byname
# 读出 passwd.byname 的数据库内容
[root@clientlinux ~]# ypcat passwd.byname
使用者参数修改: yppasswd, ypchfn, ypchsh
-
yppasswd :与 passwd 指令相同功能;
-
ypchfn :与 chfn 相同功能;
-
ypchsh :与 chsh 相同功能。