一、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 相同功能。