社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 681阅读
  • 0回复

NIS服务器(二)

楼层直达
级别: 管理员
发帖
27808
飞翔币
1567
威望
888
飞扬币
129967
信誉值
0

建立数据库 
  在完成了上面的所有步骤后,接下来我们得要开始将主机上面的帐号文件转成数据库文件。 转换的动作直接通过 /usr/lib/yp/ypinit 这个命令来处理。整个步骤如下:
# /usr/lib/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers.  master.vbirdnis 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 .
       next host to add:  master.vbirdnis  <==这个地方系统会主动捕捉到
       next host to add:                   <==按下 [ctrl]-d
The current list of NIS servers looks like this:
master.vbirdnis
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]: Entering directory `/var/yp/vbirdnis'
Updating passwd.byname...
....中间省略....
gmake[1]: Leaving directory `/var/yp/vbirdnis'
master.vbirdnis has been set up as a NIS master server.
Now you can run ypinit -s master.vbirdnis on all slave server.
  要注意出现的信息中,在告知你可以直接输入 [ctrl]-d 以结束的那个位置,你的主机名称会主动的被捕获到,注意!这个主机名称务必需要在 /etc/hosts 可以被找到 IP 的对应, 否则会出现问题。另外,在执行 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 /etc/aliases
# 解决方法很简单!缺少什么档案,就 touch 就是了!
# /usr/lib/yp/ypinit -m
# 然后再重新执行一次即可!
  如果是如下的错误,那可能是因为:
  你的 ypserv 没有顺利启动,请利用 rpcinfo 检查看看; 
  你的主机名称没有对应好,请检查 /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 这两个服务,告知数据库已经被更改了, 所以你可以这样做:
# /etc/init.d/ypserv restart
# /etc/init.d/yppasswdd restart
  注意:如果你的使用者密码有变动过,那么你就得要重新制作数据库,重新启动 ypserv 及 yppasswdd。
  与 slave server 及数据库有关的一些设置 (optional) 
  当我们执行了 ypinit -m 之后,所有的主机上面的帐号相关文件会被转成数据库文件, 这些数据库会被放置到 /var/yp/"nisdomainname" 当中,我们的 nisdomainname 是 vbirdnis ,所以被建立的数据库通通被放置到 /var/yp/vbirdnis/ 目录中。您可以自行去检查看看。
  事实上,我们的 ypinit 其实是通过 /var/yp/Makefile 来进行数据库的建立的, 所以,我们当然也就可以借由该文件内的功能来处理某些特定文件的更新。 举例来说,若你仅修改了一个使用者的帐号参数而已,所以仅有 /etc/passwd 有被变更过, 那么如何仅针对这个档案进行数据库的更新呢?你可以这样做:
# cd /var/yp
# make passwd
Updating passwd.byname...
Updating passwd.byuid...
  这样做就能够更新了,只不过更新后的数据库会被放置到 /var/yp 当中,而不是 /var/yp/vbirdnis 中, 或许你还得需要手动移动一下该文件。
  再者,如果你有 slave 服务器,总是需要进行 master/slave 的同步化吧? 那如何告知我们的 master 服务器将数据库提供给 slave 呢?这个时候就得要修改 /var/yp/Makefile 。 您可以自行进入该文件内查阅一些资料,不过,基本上你只要改一个地方就好了:
# vi /var/yp/Makefile
# 找到底下这一行:
NOPUSH=true
# 将他改成这样:
NOPUSH=false
  这个设定值可以将数据库给它『送 (push)』到其它的 slave 服务器上。接下来,你必需要告知 master 要送出去的数据库是给哪部服务器?所以,你还得要修改这里:
# vi /var/yp/ypservers
master.vbirdnis
slave.vbirdnis
# 增加上头这一行!
  你可以将所有的 slave 服务器都加到 /var/yp/ypservers 文件中,只要记得该服务器的 IP 必需要在 /etc/hosts 内可以找到对应才行。如果你要提供 master/slave 服务器的数据库文件传输时,那么还需要启动 ypxfrd 这个服务。这个服务可以让 slave 服务器主动连接上 ypxfrd 来更新数据库, 可以免除系统管理员自己手动更新。启动方式如下:
# /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