Linux NIS 服务器详解(2)
# /etc/init.d/ypxfrd start
做到这里,您的 NIS Master 服务器已经配置完成。接下来,您就可以准备处理 slave 服务器,或是直接处理 NIS client 端,此外,如果您的 master 机器想要直接将某些特定的数据库直接传给 slave 主机的话, 那么可以使用 yppush 这个命令。例如下列范例:
# yppush -h slave.vbirdnis passwd.*
如果 master/slave 的数据库不匹配的话,那么该 passwd.byname 及 passwd.byuid 就会同步更新。 也就是说,您得先要制作数据库,然后再利用 yppush 来处理数据库的同步, 亦即是:
先以 useradd username 或 passwd username 等制作出 master 上面的实体用户;
再以 make 或者直接以 /usr/lib/yp/ypinit -m 来制作出最新的数据库;
利用 yppush 这个命令功能来进行数据库的传输。
如此一来,您就不需要进行 slave 上面的其他数据库处理,方便又简单。
3.5 NIS slave 的设定与启动 (optional)
参考图一的 NIS 运作流程当中,我们知道由于 NIS 服务器预设还是会先搜索自己的 /etc/passwd, /etc/shadow 等信息,因此你最好先将 NIS slave 的帐号与密码资料作个简单的修订,让他保留在比较干净的帐号资料,例如仅有系统帐号 (UID 小于 500 内的系统帐号) 就是一个不错的环境。这样可以避免 UID 重复出现的问题 (在 /etc/passwd 及 NIS 的环境中都出现相同的 UID ,但其相关参数却并相同时,可能有困扰)。
NIS slave 的设置要比 NIS master 简单很多,事实上,很多设置都一样。你甚至可以复制 NIS master 的很多配置文件。在你处理完 NIS slave 服务器的帐号密码相关文件后,接下来你可以这样设定:
设定域名
同样的, NIS slave 也需要设定相同的域名,设定方式可以参考前一小节的介绍,我们这里很快的介绍一遍:
1. 直接建立域名称
# nisdomainname vbirdnis
2. 开机立即启动此域名称
# vi /etc/rc.d/rc.local
# 加入下面这一行:
/bin/nisdomainname vbirdnis
3. 预设在启动 ypserv 时,设定 NIS 域名
# vi /etc/sysconfig/network
# 加入底下这一行:
NISDOMAIN=vbirdnis
主要配置文件 /etc/ypserv.conf
这个配置文件也是很简单的,可以与前面的 NIS master 相同即可。在这个例子中,我是直接在该文件加入这三行。
# vi /etc/ypserv.conf
127.0.0.0/255.255.255.0 : * : * : none
192.168.1.0/255.255.255.0 : * : * : none
* : * : * : deny
/etc/hosts 及 /etc/netgroup
这两个文件不陌生吧?直接设置就行。
# touch /etc/netgroup
# vi /etc/hosts
192.168.1.2 master.vbirdnis
192.168.1.10 slave.vbirdnis
192.168.1.100 client.vbirdnis
启动所有服务及建立数据库
还记得吧?我们需要 portmap 与 ypserv ,至于 yppasswdd 这个功能主要是在修改主控服务器 (master) 上面的帐号密码,而 slave 只是在取得 master 的数据库而已,本身并不具备修改数据库的能力的, 所以 slave 当然就不需要 yppasswdd ,所以你可以这样设定:
# /etc/init.d/portmap start
# /etc/init.d/ypserv start
那如何取得来自 master 服务器的数据库文件呢?还是一样得要通过 /usr/lib/yp/ypinit 这个程序, 只是它的命令下达会变成这样:
# /usr/lib/yp/ypinit -s master.vbirdnis
参数:
-s :后面接预计取得的 master 主机名称!
We will need a few minutes to copy the data from master.vbirdnis.
Transferring hosts.byname...
Trying ypxfrd ... not running
Transferring services.byname...
Trying ypxfrd ... not running
....中间省略....
虽然使用上面的命令事实上会出现有错误的信息,就是『Trying ypxfrd ... not running』的信息, 但事实上数据库的转移还是成功的!你可以使用下面这个命令来测试一下数据库是否正确:
# ypcat -h localhost passwd.byname
如果有正确的输出帐号/密码资料的话,那就是 OK 的!如此一来,您的 NIS slave 就启动 OK 啦! 不过,由于您的 master 服务器可能随时都会有帐号/密码的改变,所以你其实是可以使用 ypxfrd 这个服务来帮助数据库在 master/slave 间转移。如果你有在 master 服务器启动 ypxfrd ,那么你可以在 slave 的计划任务上这样处理:
# vi /etc/crontab
# 在最后加入以 ypxfr 传输资料的 script
20 * * * * root /usr/lib/yp/ypxfr_1perhour
40 6 * * * root /usr/lib/yp/ypxfr_2perday
55 6,18 * * * root /usr/lib/yp/ypxfr_2perday
# 事实上,这三个程序只是利用 /usr/lib/yp/ypxfr 来进行数据库的更新,
不过实际进行时,似乎有点小问题,或许需要修改一下上述三个档案, 我们以 /usr/lib/yp/ypxfr_1perhour 为例来说明一下好了:
# vi /usr/lib/yp/ypxfr_1perhour
# 找到这一行:
$YPBINDIR/ypxfr $map
# 将他改成这样:
$YPBINDIR/ypxfr $map -h master.vbirdnis
Tips:
事实上,如果 master 服务器有启动 ypxfrd ,那么下达 ypinit -s master.vbirdnis 时, 就不会有错误信息。
如此一来,系统将会针对不同的数据库来与 master 服务器进行比对,若发现 master 的资料较新时,则会进行更新。当然,您也可以直接通过系统管理员执行 ypinit -s master.vbirdnis 来处理。此外,直接利用 master 机器上的 yppush 也是个不错的思考方向!
启动 ypbind ,让 slave 也可以查询帐号/密码
如果你的 slave 并没有启动 ypbind 的话,那么 slave 将无法以 master 所提供的帐号来登入。所以接下来,你必须要启动 ypbind 这个查询的功能,好让我们的 slave 服务器也可以针对我们自己的 NIS 域 (vbirdnis) 进行查询。 至于 ypbind 的启动方式则请参考下一小节的 NIS client 设置方式。
至此为止,你就已经具有一台 NIS master 及多部 NIS slave 的服务器。接下来就来看看 NIS client。
3.6 防火墙设置
又来到了防火墙的规划了,要注意的是,我们的 NIS 与 NFS 都是使用 RPC Server 的,所以,都可以直接限制 111 这个 port 即可。能够直接以 iptables 管理 111 这个 port ,例如仅允许 192.168.1.0/24 这个网段进来的话,可以在你的防火墙规则上面加上:
/sbin/iptables -A -s 192.168.1.0/24 --dport 111 -j ACCEPT
/sbin/iptables -A --dport 111 -j DROP
4、NIS Client 端的设定
我们知道网络连接是双向的,所以 NIS server 提供数据库文件,NIS client 当然也需要提供一些连接的软件。这个连接的软件就是ypbind。此外,如同图一的介绍,在 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 就知道了。
4.1 NIS client 所需软件与软件结构
NIS client 端所需要的软件仅有:
ypbind
yp-tools
即可,yp-tools 提供查询的软件,至于 ypbind 则是与 ypserv 互相沟通的客户端连接软件。 另外,在 RHEL4 当中我们还有很多配置文件是与认证有关的,包含 ypbind 的配置文件时, 在设定 NIS client 你可能需要修改下面的文件:
/etc/sysconfig/network :里面主要设定了 NIS 域名称,让 ypbind 启动时可以设定好;
/etc/hosts :至少需要有各个 NIS 服务器的 IP 与主机名对应;
/etc/yp.conf :这个则是 ypbind 的主要配置文件,里面主要规范 NIS server ;
/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 客户端。
4.2 NIS client 的设定与启动
启动 NIS client 的设置就简单很多!最主要是加入 NIS domain 中,然后再启动 ypbind 即可。 整个设定过程是:
设定好 NIS domain 以及 /etc/hosts 主机名对应
设定 NIS domain 就利用 nisdomainname 来处理即可:
1. 直接建立域名称
# nisdomainname vbirdnis
2. 开机立即启动此域名
# vi /etc/rc.d/rc.local
# 加入下面这一行:
/bin/nisdomainname vbirdnis
3. 预设在启动 ypbind 时,设定 NIS 域名
# vi /etc/sysconfig/network
# 加入下面这一行:
NISDOMAIN=vbirdnis
然后则是主机名称与 IP 的对应配置文件,非常重要!
# vi /etc/hosts
192.168.1.2 master.vbirdnis
192.168.1.10 slave.vbirdnis
192.168.1.100 client.vbirdnis
这样就OK!继续下一步。
启动 ypbind 来连结至 NIS server
要启动 ypbind 必须要设定很多的配置文件,实在很麻烦~不过不要紧, RHEL4 提供给我们一个工具『authconfig』,通过这个工具我们可以很快的将 ypbind 设定起来。你只要在终端机环境下执行 authconfig 命令就能够设定了。设定的方式如下所示:
图二、authconfig 的使用说明
系统原本就会有 MD5 及 Shadow 的加密编码,您只要选择上图的 NIS 项目,然后按下 Next 便进入到如下所示画面:
图三、authconfig 的使用说明(续)
在你输入了正确的NIS 域名称 (Domain) 以及正确的主机名称 (就是主控主机) ,并且按下 OK 后,你的 RHEL4 就会自动的帮你启动 portmap 以及 ypbind 这两个程序, 同时还会自动的使用 chkconfig 的功能帮您在开机时自动启动 portmap 及 ypbind 。这样你就启动了 ypbind !很简单吧!
如果你真的想要手动处理的话,那么你必须要手动的修改下面这些文件:
/etc/nsswitch.conf (修改许多主机验证功能的顺序)
/etc/sysconfig/authconfig (RHEL4 的认证机制)
/etc/pam.d/system-auth (许多登入所需要的 PAM 认证过程)
/etc/yp.conf (即是 ypbind 的配置文件)
事实上, authconfig 命令也是在处理这些文件。 我们就来谈一谈这个小细节。
1. /etc/nsswitch.conf
# vi /etc/nsswitch.conf
# 这个文件的内容有相当多,不过如果你只想要进行登入验证,可以这样:
passwd: files nis
shadow: files nis
group: files nis
hosts: files nis dns
# 只要加入 nis 即可!这几个设置的意义是:
# 1. passwd: 就是使用者相关信息查找,分别为 /etc/passwd, nis
# 2. shadow: 就是使用者密码的查找, /etc/shadow, nis
# 3. group: 就是使用者的群组信息查找, /etc/group, nis
# 4. hosts: 就是主机名称与IP对应的查找,/etc/hosts, nis 及 /etc/resolv.conf
2. /etc/sysconfig/authconfig
# vi /etc/sysconfig/authconfig
USENIS=no
# 这个文件的内容很好修改!只要将上面 NIS 部分改成 yes 即可:
USENIS=yes
3. /etc/pam.d/system-auth
# vi /etc/pam.d/system-auth
# 这个部分也很重要!且容易忘记!修改 PAM 的配置文件找到如下一行:
password sufficient /lib/security/$ISA/pam_unix.so nullok
use_authtok md5 shadow
# 上面可是同一行,将它改成:
password sufficient /lib/security/$ISA/pam_unix.so nullok
use_authtok md5 shadow nis
4. /etc/yp.conf
# vi /etc/yp.conf
# 这个是 ypbind 的主要配置文件,主要语法是:
# domain [NIS域名] server [主机名称]
# 或者是通过广播,适合用于大网域有多部 NIS 服务器时:
# domain [NIS域名] broadcast
domain vbirdnis broadcast
这样设置完成后,再启动 ypbind 即可:
# /etc/init.d/portmap start
# /etc/init.d/ypbind start
你可以手动处理,也可以直接使用 authconfig。 这里建议您可以直接使用 authconfig 比较容易些。
另外,那些手动处理的文件当中, /etc/nsswitch.conf 是很重要的,因为它规范了 Linux 本机要使用某些服务时,例如帐号/密码的资料、 主机名称的对应资料、port number 对应服务名称的资料等等,这些资料的搜索顺序!更多的资料请自行进入该文件内查阅。
至于其他两个配置文件, /etc/sysconfig/authconfig, /etc/pam.d/system-auth 则是与使用者帐号的验证有关, 这是 RHEL (Red Hat 系统) 所惯用的配置文件,如果没有修改设置的话,那么顺利启动 ypbind 也是无法登入的。 这样说,可以了解吧!
4.3 NIS client 端的检验: yptest, ypwhich, ypcat
如何确定 NIS client 已经连上 NIS server 呢?你可以利用 id 这个指令直接检查 NIS server 有的,但是 NIS client 没有的帐号,如果有出现该帐号的相关 UID/GID 信息时,那表示有连接上。 除此之外,我们还可以通过 NIS 提供的相关检验功能来检查。下面分别来看一下:
利用 yptest 检验数据库之测试:
直接输入 yptest 即可检查相关的测试资料,如下所示:
# yptest
Test 1: domainname
Configured domainname is "vbirdnis"
Test 2: ypbind
Used NIS server: master.vbirdnis
Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody)
....中间省略....
Test 8: yp_maplist
hosts.byname
group.byname
passwd.byuid
group.bygid
passwd.byname
hosts.byaddr
....中间省略....
Test 9: yp_all
....中间省略....
1 tests failed
从这个测试中我们可以发现一些错误,重点在第九个步骤 yp_all 必须要有列出您 NIS server 上面的所有帐号信息,如果有出现帐号相关信息的话,那么应该就算验证成功了!比较有问题的是第三步骤, 他会出现在 passwd.byname 当中找不到 nobody 的字样。这是因为早期的 nobody 之 UID 都设定在 65534 ,但 RHEL4 则将 nobody 设定为系统帐号的 99 ,所以不会被记录, 也就出现这一个警告。不过,这个错误是可忽略的。
利用 ypwhich 检验数据库数量
单纯使用 ypwhich 的时候显示的是『NIS Client 的 domain』名称,而当加入 -x 这个参数时, 则是显示『NIS Client 与 Server 之间沟通的数据库有哪些?』你可以这样测试:
# 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 读取数据库的内容,一般作法是:
# ypcat [-h nisserver] [数据库名称]
参数:
-h nisserver :如果有设定的话,指向某一部特定的 NIS 服务器,
如果没有指定的话,就以 ypbind 之设定为主;
数据库名称:亦即在 /var/yp/vbirdnis/ 内的文件名。例如 passwd.byname
范例:读出 passwd.byname 的数据库内容
# ypcat passwd.byname
这三个命令在进行 NIS Client 端的检验时,是相当有用的。尤其是刚架设好 NIS Client 时,一定要使用 yptest 去检查看看有没有设置错误。根据屏幕显示的信息去一个一个修改错误才行。
4.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 那台主机, 并且是以 nistest 这个使用者登入的,记住,这个使用者相关资料仅在 NIS server 上。 接下来,这个使用者可以下达 yppasswd ,如下所示:
$ yppasswd
Changing NIS account information for nistest on master.vbirdnis.
Please enter old password: <==这里输入旧密码
Changing NIS password for nistest on master.vbirdnis.
Please enter new password: <==这里输入新密码
Please retype new password: <==再输入一遍
The NIS password has been changed on master.vbirdnis.
顶(0)
踩(0)
- 最新评论