• 14.3 NIS Client 端的设定
    • 14.3.1 NIS client 所需软件与软件结构
    • 14.3.2 NIS client 的设定与启动
    • 14.3.3 NIS client 端的检验: yptest, ypwhich, ypcat
    • 14.3.4 使用者参数修改: yppasswd, ypchfn, ypchsh

    14.3 NIS Client 端的设定

    我们知道网络联机是双向的,所以 NIS server 提供数据库档案,NIS client 当然也需要提供一些联机的软件啰!这个联机的软件就是 ypbind 啦!此外,如同图 14.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 就知道了! ^_^

    18.3. 14.3 NIS Client 端的设定  - 图1


    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 就会出现如下的图示, 然后依序这么处理就好了呦!

    18.3. 14.3 NIS Client 端的设定  - 图2图 14.3-1、利用 setup 进入 authconfig 认证项目

    记得在出现上图 14.3-1 后,选择认证设定,如果是出现英文的话,那么你就得要选择『Authentication configuration』的项目,之后就会进入下面的画面:

    18.3. 14.3 NIS Client 端的设定  - 图3图 14.3-2、进入 authconfig 之后,选择 NIS 项目

    因为我们要用 NIS 作为登入者身份验证的机制,因此就得要选择 NIS 项目,如果是英文的话,得要选择『Use NIS』项目即可。

    18.3. 14.3 NIS Client 端的设定  - 图4图 14.3-3、填写 NIS 领域以及 NIS 服务器的 IP 即可

    最后再填写 NIS 网域 (Domain) 以及 NIS 服务器的 IP (Server),按下确定即可。如果系统很快的就跳回图 14.3-1 的画面, 代表你的设定理论上是没有问题的。如果一直卡在如下的画面中:

    1. 正在激活 rpcbind [ 确定 ]
    2. 正在关闭 NIS 服务: [ 确定 ]
    3. 正在启动 NIS 服务: [ 确定 ]
    4. 正在绑定 NIS 服务:....... <==这里一直卡住,没办法结束

    上述的数据就是出问题啦!那代表你的 NIS client 没有办法连接上 NIS server,最常发生的就是服务器的防火墙忘记放行,或者是你客户端输入服务器 IP 时,打错数字了~ 那也是很常发生的错误啦!这时请自行去修改一番吧!那么这个 setup 到底做了什么修改呢?我们也来看看几个被改掉的重要配置文件吧:

    1. [root@clientlinux ~]# cat /etc/sysconfig/network
    2. HOSTNAME=clientlinux.centos.vbird
    3. NETWORKING=yes
    4. GATEWAY=192.168.100.254
    5. NISDOMAIN=vbirdnis <==这个玩意儿会主动的被建立起来
    6. [root@clientlinux ~]# cat /etc/yp.conf
    7. ....(前面省略)....
    8. domain vbirdnis server 192.168.100.254 <==主动建立这玩意儿~
    9. [root@clientlinux ~]# vim /etc/nsswitch.conf
    10. passwd: files nis
    11. shadow: files nis
    12. group: files nis
    13. hosts: files nis dns
    14. # 上面几个项目是比较重要的,包括身份参数、密码、群组名、主机名与 IP 对应数据等。
    15. # 你会看到,每个项目后面都会接着 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 即可检查相关的测试数据,如下所示:
    1. [root@clientlinux ~]# yptest
    2. Test 1: domainname
    3. Configured domainname is "vbirdnis"
    4. Test 2: ypbind
    5. Used NIS server: www.centos.vbird
    6. Test 3: yp_match
    7. WARNING: No such key in map (Map passwd.byname, key nobody)
    8. ....(中间省略)....
    9. Test 6: yp_master
    10. www.centos.vbird
    11. ....(中间省略)....
    12. Test 8: yp_maplist
    13. passwd.byname
    14. protocols.byname
    15. hosts.byaddr
    16. hosts.byname
    17. ....(中间省略)....
    18. Test 9: yp_all
    19. nisuser1 nisuser1:$1$U9Gccb60$K5lDQ.mGBw9x4oNEkM0Lz/:1001:1001::/home/nisuser1:/bin/bash
    20. ....(中间省略)....
    21. 1 tests failed

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

    Tips: 比较有问题的是第三步骤,他会出现在 passwd.byname 当中找不到 nobody 的字样。这是因为早期的 nobody 之 UID 都设定在 65534 ,但 CentOS 则将 nobody 设定为系统账号的 99 ,所以当然不会被记录,也就出现这一个警告。不过,这个错误是可忽略的啦!

    18.3. 14.3 NIS Client 端的设定  - 图5

    • 利用 ypwhich 检验数据库数量
      单纯使用 ypwhich 的时候显示的是『NIS Client 的 domain』名称,而当加入 -x 这个参数时, 则是显示『NIS Client 与 Server 之间沟通的数据库有哪些?』你可以这样测试哩!
    1. [root@clientlinux ~]# ypwhich -x
    2. Use "hosts" for map "hosts.byname"
    3. Use "group" for map "group.byname"
    4. Use "passwd" for map "passwd.byname"
    5. ....(以下省略)....

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

    • 利用 ypcat 读取数据库内容
      除了 yptest 之外,你还可以直接利用 ypcat 读取数据库的内容喔!一般作法是这样:
    1. [root@clientlinux ~]# ypcat [-h nisserver] [数据库名称]
    2. 选项与参数:
    3. -h nisserver :如果有设定的话,指向某一部特定的 NIS 服务器,
    4. 如果没有指定的话,就以 ypbind 之设定为主;
    5. 数据库名称:亦即在 /var/yp/vbirdnis/ 内的档名啊!例如 passwd.byname
    6. # 读出 passwd.byname 的数据库内容
    7. [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 ,如下所示:
    1. [root@clientlinux ~]# grep nisuser /etc/passwd <==不会出现任何讯息,因为无此账号
    2. [root@clientlinux ~]# su - nisuser1 <==直接切换身份看看!
    3. su: warning: cannot change directory to /home/nisuser1: No such file or directory
    4. -bash-4.1$ id
    5. uid=1001(nisuser1) gid=1001(nisuser1) groups=1001(nisuser1)
    6. # 因为我们 client.centos.vbird 仅有帐户信息,并没有用户家目录,
    7. # 所以就会出现如上的警告,因此才需要用 id 验证,并且需要加挂 NFS 嘛!
    8. # 仔细看,现在的身份确实是 nisuser1 喔!确实有连上 NIS server 啦!
    9. -bash-4.1$ yppasswd
    10. Changing NIS account information for nisuser1 on www.centos.vbird.
    11. Please enter old password: <==这里输入旧密码
    12. Changing NIS password for nisuser1 on www.centos.vbird.
    13. Please enter new password: <==这里输入新密码
    14. Please retype new password: <==再输入一遍
    15. The NIS password has been changed on www.centos.vbird.
    16. -bash-4.1$ exit

    嘿嘿!如何,这样就更新了 NIS server 上头的 /etc/shadow 以及 /var/yp/vbirdnis/passwd.by* 的数据库, 简单吧!一下子就同步化了。不过,如果要教育使用者使用 yppasswd 的话,他可能不太能适应, 不要紧,你可以透过修改 alias 或者是置换掉 /usr/bin/passwd 这支程序即可!那现在让我们回到 NIS 服务器端看看真的有更动到数据库吗?

    1. [root@www ~]# ll /var/yp/vbirdnis/
    2. -rw-------. 1 root root 13836 Jul 28 13:10 netid.byname
    3. -rw-------. 1 root root 14562 Jul 28 13:29 passwd.byname
    4. -rw-------. 1 root root 14490 Jul 28 13:29 passwd.byuid
    5. -rw-------. 1 root root 28950 Jul 28 13:10 protocols.byname
    6. # 仔细看,就是那个密码档案被更动过~时间已经不一样了!再看看登录档吧!
    7. [root@www ~]# tail /var/log/messages
    8. Jul 28 13:29:14 www rpc.yppasswdd[1707]: update nisuser1 (uid=1001) from host
    9. 192.168.100.10 successful.

    最终从登录档里面,我们也能够得到相关的记录!这样就非常完美啦! ^_^


    原文: https://wizardforcel.gitbooks.io/vbird-linux-server-3e/content/101.html