一、所需要的软件

  1. yp-tools :提供 NIS 相关的查寻指令功能
  2. ypbind :提供 NIS Client 端的设定软件
  3. ypserv :提供 NIS Server 端的设定软件
  4. rpcbind :就是 RPC 一定需要的数据啊!

注:yp-tools, ypbind 都会主动安装,所以server端只需要安装 ypserv ,而客户端只需要安装ypbind。

查询是否安装 NIS Server

[root@www ~]# rpm -qa ypserv
ypserv-2.31-12.el7.x86_64

二、服务器配置

环境说明:

  • NIS 的域名设置为 vbirdnis
  • NIS master server 的 IP 为 192.168.91.157,主机名为 www.centos.vbird
  • NIS client 的 IP 为 192.168.91.159,主机名为 clientlinux.centos.vbird

1、安装 NIS 服务

[root@www ~]# yum -y install ypserv

2、设定 NIS 的域名 (NIS domain name)

[root@www ~]# vim /etc/sysconfig/network
 # 不要更改其他既有数据,只要加入底下这几行即可:
 NISDOMAIN=vbirdnis <==设定 NIS 领域名
 YPSERV_ARGS="-p 1011" <==设定 NIS 每次都启动在固定的埠口

3、修改主配置文件

[root@www ~]# vi /etc/ypserv.conf
# 添加如下内容
 *                        : *       : *                : none     <==没有网络限制,如果想做限制,可以在这里做,也可以通过防火墙做限制

注:上述配置说明:

#[主机名/IP] : [NIS 域名] : [可用数据库名称] : [安全限制]
# [主机名/IP] :可以使用 network/netmask 如192.168.100.0/255.255.255.0
 # [NIS 域名] :例如本案例中的 vbirdnis
 # [可用数据库名称]:就是由 NIS 制作出来的数据库名称;
 # [安全限制] :包括没有限制 (none)、仅能使用 <1024 (port) 及拒绝 (deny)
 # 一般来说,你可以依照我们的网域来设定成为底下的模样:
 127.0.0.0/255.255.255.0 : * : * : none
 192.168.100.0/255.255.255.0 : * : * : none
 * : * : * : deny
 # 星号 (*) 代表任何数据都接受的意思。上面三行的意思是,开放 lo 内部接口、开放内部 LAN 网域,且杜绝所有其他来源的 NIS 要求的意思。

4、设置主机名

[root@www ~]# hostnamectl set-hostname www.centos.vbird
[root@www ~]# hostname
www.centos.vbird

5、设定主机名与 IP 的对应 (/etc/hosts)

[root@www ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.91.157	www.centos.vbird
192.168.91.159	clientlinux.centos.vbird

6、为了方便管理,把yppasswdd 启动在固定的端口。

[root@www ~]# vim /etc/sysconfig/yppasswdd
 YPPASSWDD_ARGS="--port 1012" <==找到这个设定值,修改一下内容成这样!

7、启动 NIS 服务

[root@www ~]# systemctl start ypserv
[root@www ~]# systemctl start yppasswdd

8、如果重新启动 rpcbind , 这将导致 ypserv 的注册数据被注销掉。因此,使用如下的动作来检查看看服务有没有在等待中, 要看到如下的『就绪并等待服务』才会是正常的

[root@www ~]# rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting

9、创建的账号

 [root@www ~]# useradd -u 1001 nisuser1
 [root@www ~]# useradd -u 1002 nisuser2
 [root@www ~]# useradd -u 1003 nisuser3
 [root@www ~]# echo password | passwd --stdin nisuser1
 [root@www ~]# echo password | passwd --stdin nisuser2
 [root@www ~]# echo password | passwd --stdin nisuser3

10、建立账号为数据库

[root@www ~]# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers.  www.centos.vbird 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:  www.centos.vbird
	next host to add:                     <==按下 ctrl + d
The current list of NIS servers looks like this:

www.centos.vbird

Is this correct?  [y/n: y]  y
We need a few minutes to build the databases...
Building /var/yp/vbirdnis/ypservers...
Running /var/yp/Makefile...
gmake[1]: 进入目录“/var/yp/vbirdnis”
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]: 离开目录“/var/yp/vbirdnis”

www.centos.vbird has been set up as a NIS master server.

Now you can run ypinit -s www.centos.vbird on all slave server.

三、客户端配置

客户端为了方便,使用setup命令安装,如果没有setup命令,后面有如何安装setup命令

[root@localhost ~]# setup

1、选择验证配置
在这里插入图片描述
2、选择使用NIS
在这里插入图片描述
3、配置好之前的域名和NIS服务器的地址
在这里插入图片描述
4、客户端验证

[root@localhost ~]# id nisuser1
uid=1001(nisuser1) gid=1001(jiaofan) 组=1001(jiaofan)
[root@localhost ~]# id nisuser2
uid=1002(nisuser2) gid=1002(nisuser2) 组=1002(nisuser2)
[root@localhost ~]# su - nisuser3
su: 警告:无法更改到 /home/nisuser3 目录: 没有那个文件或目录
-bash-4.2$ 

注:这里说没有家目录,因为客户端确实没有创建家目录,可以结合nfs网络文件服务,把服务端的家目录挂在过来。

如果没有setup命令,如何安装。

1.安装最快镜像插件
yum -y install yum-plugin-fastestmirror

2.安装setuptool
yum -y install setuptool

3.安装系统服务管理
yum -y install ntsysv

4.安装防火墙设置、网络设置
yum -y install iptables

5.安装防火墙设置
yum -y install system-config-securitylevel-tui

6.安装网络设置
yum -y install system-config-network-tui

四、 NIS client 端的检查命令: yptest, ypwhich, ypcat

1、利用 yptest 检验数据库之测试:

[root@localhost ~]# yptest
Test 1: domainname
Configured domainname is "vbirdnis"

Test 2: ypbind
Used NIS server: www.centos.vbird

Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody)

Test 4: yp_first
nisuser1 nisuser1:$6$K0frD0qB9hRudFQ2$gIhQ3qcEzlwr6l1Clz7hAYDVC4ERnH5YGPRKAQGhPNlwmSLgQJKntLq0qEWLt2FrIUzjl76KUk4i10n7Iogrg.:1001:1001::/home/nisuser1:/bin/bash

Test 5: yp_next
nisuser2 nisuser2:$6$ZZqpknoy$iX2olpYKuOGoQGmuFLx4GlNsKiB8XZyPPdeMGPiua4TSFnKhqNFLNnceUQgtlsjjYCmawlFedn5FuvtgQ7rZ1.:1002:1002::/home/nisuser2:/bin/bash
nisuser3 nisuser3:$6$WPxJVOF.$Tfv0OjlWsJHYTEkti7I8YZLiQSq23ZT68Fg7CVOv1NTOtHscImvN7DWD7mL.ZpycDIUpDu3EyXCynGUVPGnLC0:1003:1003::/home/nisuser3:/bin/bash

Test 6: yp_master
www.centos.vbird

Test 7: yp_order
1644212690

Test 8: yp_maplist
mail.aliases
protocols.byname
protocols.bynumber
netid.byname
services.byservicename
services.byname
rpc.bynumber
rpc.byname
hosts.byaddr
hosts.byname
group.bygid
group.byname
passwd.byuid
passwd.byname
ypservers

Test 9: yp_all
nisuser1 nisuser1:$6$K0frD0qB9hRudFQ2$gIhQ3qcEzlwr6l1Clz7hAYDVC4ERnH5YGPRKAQGhPNlwmSLgQJKntLq0qEWLt2FrIUzjl76KUk4i10n7Iogrg.:1001:1001::/home/nisuser1:/bin/bash
nisuser2 nisuser2:$6$ZZqpknoy$iX2olpYKuOGoQGmuFLx4GlNsKiB8XZyPPdeMGPiua4TSFnKhqNFLNnceUQgtlsjjYCmawlFedn5FuvtgQ7rZ1.:1002:1002::/home/nisuser2:/bin/bash
nisuser3 nisuser3:$6$WPxJVOF.$Tfv0OjlWsJHYTEkti7I8YZLiQSq23ZT68Fg7CVOv1NTOtHscImvN7DWD7mL.ZpycDIUpDu3EyXCynGUVPGnLC0:1003:1003::/home/nisuser3:/bin/bash
1 tests failed

注:Test 3 出现的那个警告信息,那只是说没有该数据库而已~ 该错误是可以忽略的。重点在第 9 个步骤 yp_all 必须要有列出你 NIS server 上头的所有帐户信息,如果有出现账号相关数据的话,那么应该就算验证成功了!

2、利用 ypwhich 检验数据库数量

单纯使用 ypwhich 的时候显示的是『NIS Client 的 domain』名称,而当加入 -x 这个参数时, 则是显示『NIS Client 与 Server 之间沟通的数据库有哪些?』你可以这样测试

[root@localhost ~]# ypwhich -x
Use "ethers"	for map "ethers.byname"
Use "aliases"	for map "mail.aliases"
Use "services"	for map "services.byname"
Use "protocols"	for map "protocols.bynumber"
Use "hosts"	for map "hosts.byname"
Use "networks"	for map "networks.byaddr"
Use "group"	for map "group.byname"
Use "passwd"	for map "passwd.byname"
[root@localhost ~]# 

由上面我们可以很清楚的就看到相关的档案啦!这些数据库档案则是放置在我的 NIS
Server 的 /var/yp/vbirdnis/* 里面。

3、利用 ypcat 读取数据库内容

除了 yptest 之外,你还可以直接利用 ypcat 读取数据库的内容喔!一般作法是这样:

[root@clientlinux ~]# ypcat [-h nisserver] [数据库名称]
 选项与参数:
 -h nisserver :如果有设定的话,指向某一部特定的 NIS 服务器,
 如果没有指定的话,就以 ypbind 之设定为主;
 数据库名称:亦即在 /var/yp/vbirdnis/ 内的档名啊!例如 passwd.byname
 
 # 读出 passwd.byname 的数据库内容
 [root@clientlinux ~]# ypcat passwd.byname

五、使用者参数修改: yppasswd, ypchfn, ypchsh

到这里NIS server/ client的账号已经同步了,但是,使用者如何在NIS client 修改他自己的登入参数,例如密码、shell 等等?因为 NIS client 是藉由数据库来取得用户的账号密码,那如何在 NIS 客户端处理账号密码的订正?

这也是为何我们需要在 NIS server 启动 yppasswdd 这支服务的主要用意! 因为 yppasswdd 可以接收 NIS client 端传来的密码修改,藉此而处理 NIS server 的 /etc/passwd, /etc/shadow , 然后 yppasswdd 还能够重建密码数据库,让 NIS server 同步更新数据库

那该如何下达指令呢?很简单啊!透过 yppasswd, ypchsh, ypchfn 来处理即可。
这三个指令的对应是:

  • yppasswd :与 passwd 指令相同功能;
  • ypchfn :与 chfn 相同功能;
  • ypchsh :与 chsh 相同功能。

这里仅说明一下 yppasswd 而已。假设你已经登入 NIS client 那部主机, 并且是以 nisuser1 这个使用者登入的,记住,这个用户相关数据仅在 NIS server 上。 接下来,这个使用者可以下达 yppasswd ,如下所示:

[root@clientlinux ~]# grep nisuser /etc/passwd <==不会出现任何讯息,因
为无此账号
 [root@clientlinux ~]# su - nisuser1 <==直接切换身份看看!
 su: warning: cannot change directory to /home/nisuser1: No such file 
or directory
 -bash-4.1$ id
 uid=1001(nisuser1) gid=1001(nisuser1) groups=1001(nisuser1)
 # 因为我们 client.centos.vbird 仅有帐户信息,并没有用户家目录,
 # 所以就会出现如上的警告,因此才需要用 id 验证,并且需要加挂 NFS 嘛!
 # 仔细看,现在的身份确实是 nisuser1 喔!确实有连上 NIS server 啦!
 
 -bash-4.1$ yppasswd
 Changing NIS account information for nisuser1 on www.centos.vbird.
 Please enter old password: <==这里输入旧密码
 Changing NIS password for nisuser1 on www.centos.vbird.
 Please enter new password: <==这里输入新密码
 Please retype new password: <==再输入一遍
 
 The NIS password has been changed on www.centos.vbird.
 
 -bash-4.1$ exit

这样就更新了 NIS server 上头的 /etc/shadow 以及/var/yp/vbirdnis/passwd.by* 的数据库。

服务端查看是否有改动

[root@www ~]#  ll /var/yp/vbirdnis/
总用量 3152
-rw-------. 1 root root 135680 2月   7 15:22 group.bygid
-rw-------. 1 root root 135680 2月   7 15:22 group.byname
-rw-------. 1 root root 136192 2月   7 15:22 hosts.byaddr
-rw-------. 1 root root 136448 2月   7 15:22 hosts.byname
-rw-------. 1 root root 136960 2月   7 15:22 mail.aliases
-rw-------. 1 root root 136704 2月   7 15:22 netid.byname
-rw-------. 1 root root 136448 2月   7 15:23 passwd.byname
-rw-------. 1 root root 136448 2月   7 15:23 passwd.byuid
-rw-------. 1 root root 142336 2月   7 15:22 protocols.byname
-rw-------. 1 root root 139008 2月   7 15:22 protocols.bynumber
-rw-------. 1 root root 140288 2月   7 15:22 rpc.byname
-rw-------. 1 root root 137984 2月   7 15:22 rpc.bynumber
-rw-------. 1 root root 547840 2月   7 15:22 services.byname
-rw-------. 1 root root 857856 2月   7 15:22 services.byservicename
-rw-------. 1 root root 135680 2月   7 15:22 ypservers
[root@www ~]# tail /var/log/messages
Feb  7 15:23:05 www rpc.yppasswdd[2443]: update nisuser1 (uid=1001) from host 192.168.91.159 successful.
[root@www ~]# 

六、报错

在建立账号为数据库执行/usr/lib64/yp/ypinit -m的错误一:

gmake[1]: *** No rule to make target `/etc/aliases', needed by `mail.aliases'. Stop.
 gmake[1]: Leaving directory `/var/yp/vbirdnis'
 make: *** [target] Error 2
 Error running Makefile.
 Please try it by hand.

错误一解决办法:缺少什么档案,就 touch 他就是了!

 [root@www ~]# touch /etc/aliases

错误二:

如果是如下的错误,那可能是因为:
 你的 ypserv 服务没有顺利启动,请利用 rpcinfo 检查看看;
 你的主机名与 IP 没有对应好,请检查 /etc/hosts

gmake[1]: Entering directory `/var/yp/vbirdnis'
 Updating passwd.byname...
 failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating passwd.byuid...
 failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating group.byname...
 ....(底下省略)....

要注意啊,如果你的用户密码有变动过,那么你就得要重新制作数据库,重新启动
ypserv 及 yppasswdd

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐