鸟哥的 Linux 私房菜 -- NIS 服务器

since2012/04/23

最近更新日期:2011年07月28日

大标题的图示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 就知道了! ^_^ 鸟哥的图示

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

利用 setup 进入 authconfig 认证项目
图 14.3-1、利用 setup 进入 authconfig 认证项目

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

进入 authconfig 之后,选择 NIS 项目
图 14.3-2、进入 authconfig 之后,选择 NIS 项目

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

填写 NIS 领域以及 NIS 服务器的 IP 即可
图 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 ,所以当然不会被记录,也就出现这一个警告。不过,这个错误是可忽略的啦! 鸟哥的图示

  • 利用 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.

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


http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室

AltStyle によって変換されたページ (->オリジナル) /