🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 14.3 NIS Client 端的设定 ## 14.3 NIS Client 端的设定 我们知道网络联机是双向的,所以 NIS server 提供数据库档案,NIS client 当然也需要提供一些联机的软件啰!这个联机的软件就是 ypbind 啦!此外,如同[图 14.1-1](#fig14.1-1) 的介绍,在 NIS client 端有登入需求时,NIS client 基本上还是先搜寻自己的 /etc/passwd, /etc/group 等数据后才再去找 NIS server 的数据库啊!所以 NIS client 最好能够将本身的账号密码删除到仅剩下系统账号,亦即 UID, GID 均小于 500 以下的账号即可, 如此一来既可让系统执行无误,也能够让登入者的信息完全来自 NIS server ,比较单纯啦! **Tips:** 事实上,你想要让 NIS 服务器写入的各项账号数据都在 NIS server 的 /var/yp/Makefile 那个档案设定的! 你可以进入该档案搜寻一下 UID 就知道了! ^\_^ ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) - - - - - - ### 14.3.1 NIS client 所需软件与软件结构 NIS client 端所需要的软件仅有: - ypbind - yp-tools yp-tools 是提供查询的软件,至于 ypbind 则是与 ypserv 互相沟通的客户端联机软件啦! 另外,在 CentOS 当中我们还有很多配置文件是与认证有关的,包含 ypbind 的配置文件时, 在设定 NIS client 你可能需要动到底下的档案: - /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 数据库; 另外, NIS 还提供了几个有趣的程序给 NIS 客户端来进行账号相关参数的修改,例如密码、shell 等等, 主要有底下这几个指令: - /usr/bin/yppasswd :更改你在 NIS database (NIS Server 所制作的数据库) 的密码 - /usr/bin/ypchsh :同上,但是是更改 shell - /usr/bin/ypchfn :同上,但是是更改一些用户的讯息! OK!那么底下就让我们开始来设定 NIS 客户端吧!^\_^ - - - - - - ### 14.3.2 NIS client 的设定与启动 启动 NIS client 的设定就简单多了!最主要是加入 NIS domain 当中,然后再启动 ypbind 即可。 虽然你可以手动去修改所有的配置文件,然而近期以来的 Linux distributions 账号处理机制越来越复杂, 所以如果你想要手动修改所有配置文件,恐怕会疯掉的~因此,这里建议你使用系统提供的工具来设定, 至于一些重要配置文件,最后有机会再去参考一下即可。 那么 CentOS 6.x 提供了什么好用的管理工具呢?很简单,就利用 setup 这个指令即可!输入 setup 就会出现如下的图示, 然后依序这么处理就好了呦! ![](https://box.kancloud.cn/2016-05-13_5735da727638f.gif) 图 14.3-1、利用 setup 进入 authconfig 认证项目 记得在出现上图 14.3-1 后,选择认证设定,如果是出现英文的话,那么你就得要选择『Authentication configuration』的项目,之后就会进入下面的画面: ![](https://box.kancloud.cn/2016-05-13_5735da7286e0c.gif) 图 14.3-2、进入 authconfig 之后,选择 NIS 项目 因为我们要用 NIS 作为登入者身份验证的机制,因此就得要选择 NIS 项目,如果是英文的话,得要选择『Use NIS』项目即可。 ![](https://box.kancloud.cn/2016-05-13_5735da72abcbd.gif) 图 14.3-3、填写 NIS 领域以及 NIS 服务器的 IP 即可 最后再填写 NIS 网域 (Domain) 以及 NIS 服务器的 IP (Server),按下确定即可。如果系统很快的就跳回图 14.3-1 的画面, 代表你的设定理论上是没有问题的。如果一直卡在如下的画面中: ``` 正在激活 rpcbind: [ 确定 ] 正在关闭 NIS 服务: [ 确定 ] 正在启动 NIS 服务: [ 确定 ] 正在绑定 NIS 服务:....... <==这里一直卡住,没办法结束 ``` 上述的数据就是出问题啦!那代表你的 NIS client 没有办法连接上 NIS server,最常发生的就是服务器的防火墙忘记放行,或者是你客户端输入服务器 IP 时,打错数字了~ 那也是很常发生的错误啦!这时请自行去修改一番吧!那么这个 setup 到底做了什么修改呢?我们也来看看几个被改掉的重要配置文件吧: ``` [root@clientlinux ~]# cat /etc/sysconfig/network HOSTNAME=clientlinux.centos.vbird NETWORKING=yes GATEWAY=192.168.100.254 NISDOMAIN=vbirdnis <==这个玩意儿会主动的被建立起来 [root@clientlinux ~]# cat /etc/yp.conf ....(前面省略).... domain vbirdnis server 192.168.100.254 <==主动建立这玩意儿~ [root@clientlinux ~]# vim /etc/nsswitch.conf passwd: files nis shadow: files nis group: files nis hosts: files nis dns # 上面几个项目是比较重要的,包括身份参数、密码、群组名、主机名与 IP 对应数据等。 # 你会看到,每个项目后面都会接着 nis ,所以 nis 有被支持啰! ``` 因为更动到的档案实在太多了,所以鸟哥还是建议使用 setup 来调整即可。但是,如果你真的想要手动处理的话, 那么你必须要手动的修改底下这些档案: - /etc/sysconfig/network (加入 NISDOMAIN 项目) - /etc/nsswitch.conf (修改许多主机验证功能的顺序) - /etc/sysconfig/authconfig (CentOS 的认证机制) - /etc/pam.d/system-auth (许多登入所需要的 PAM 认证过程) - /etc/yp.conf (亦即是 ypbind 的配置文件) - - \* ### 14.3.3 NIS client 端的检验: yptest, ypwhich, ypcat 如何确定 NIS client 已经连上 NIS server 呢?基本上,只要刚刚使用 setup 去设定时,最后的步骤并没有被卡住, 那应该就是顺利成功啦!该步骤会自动启动 rpcbind 与 ypbind 两个服务呦!那如何确认数据传送是正确的? 简单的要命啊!你可以利用 id 这个指令直接检查 NIS server 有的,但是 NIS client 没有的账号,如果有出现该账号的相关 UID/GID 信息时,那表示数据传输也是正确的。 除此之外,我们还可以透过 NIS 提供的相关检验功能来检查喔!底下分别来瞧一瞧: - 利用 yptest 检验数据库之测试: 直接在 NIS client 输入 yptest 即可检查相关的测试数据,如下所示: ``` [root@clientlinux ~]# 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 6: yp_master www.centos.vbird ....(中间省略).... 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 上头的所有帐户信息,如果有出现账号相关数据的话,那么应该就算验证成功了! **Tips:** 比较有问题的是第三步骤,他会出现在 passwd.byname 当中找不到 nobody 的字样。这是因为早期的 nobody 之 UID 都设定在 65534 ,但 CentOS 则将 nobody 设定为系统账号的 99 ,所以当然不会被记录,也就出现这一个警告。不过,这个错误是可忽略的啦! ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) - 利用 ypwhich 检验数据库数量 单纯使用 ypwhich 的时候显示的是『NIS Client 的 domain』名称,而当加入 -x 这个参数时, 则是显示『NIS Client 与 Server 之间沟通的数据库有哪些?』你可以这样测试哩! ``` [root@clientlinux ~]# ypwhich -x Use "hosts" for map "hosts.byname" Use "group" for map "group.byname" Use "passwd" for map "passwd.byname" ....(以下省略).... ``` 由上面我们可以很清楚的就看到相关的档案啦!这些数据库档案则是放置在我的 NIS Server 的 /var/yp/vbirdnis/\* 里面啰! - 利用 ypcat 读取数据库内容 除了 yptest 之外,你还可以直接利用 ypcat 读取数据库的内容喔!一般作法是这样: ``` [root@clientlinux ~]# ypcat [-h nisserver] [数据库名称] 选项与参数: -h nisserver :如果有设定的话,指向某一部特定的 NIS 服务器, 如果没有指定的话,就以 ypbind 之设定为主; 数据库名称:亦即在 /var/yp/vbirdnis/ 内的档名啊!例如 passwd.byname # 读出 passwd.byname 的数据库内容 [root@clientlinux ~]# ypcat passwd.byname ``` 这三个指令在进行 NIS Client 端的检验时,是相当有用的喔!不要忽略了他的存在啊!尤其是刚架设好 NIS Client 时,一定要使用 yptest 去检查看看有没有设定错误喔!根据屏幕显示的讯息去一个一个校正错误才行啊! - - - - - - ### 14.3.4 使用者参数修改: 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\* 的数据库, 简单吧!一下子就同步化了。不过,如果要教育使用者使用 yppasswd 的话,他可能不太能适应, 不要紧,你可以透过修改 alias 或者是置换掉 /usr/bin/passwd 这支程序即可!那现在让我们回到 NIS 服务器端看看真的有更动到数据库吗? ``` [root@www ~]# ll /var/yp/vbirdnis/ -rw-------. 1 root root 13836 Jul 28 13:10 netid.byname -rw-------. 1 root root 14562 Jul 28 13:29 passwd.byname -rw-------. 1 root root 14490 Jul 28 13:29 passwd.byuid -rw-------. 1 root root 28950 Jul 28 13:10 protocols.byname # 仔细看,就是那个密码档案被更动过~时间已经不一样了!再看看登录档吧! [root@www ~]# tail /var/log/messages Jul 28 13:29:14 www rpc.yppasswdd[1707]: update nisuser1 (uid=1001) from host 192.168.100.10 successful. ``` 最终从登录档里面,我们也能够得到相关的记录!这样就非常完美啦! ^\_^ - - - - - -