14.2 NIS Server 端的设定

NIS 服务器端主要在于提供数据库给客户端作为验证之用,虽然 NIS 服务器类型有 Master 与 Slave , 不过鸟哥这里介绍的并不是大型企业环境,因此仅介绍 NIS master 的设定而已啦~那就来设定看看啰!


14.2.1 所需要的软件

由于 NIS 服务器需要使用 RPC 协议,且 NIS 服务器同时也可以当成客户端,因此它需要的软件就有底下这几个:

  • yp-tools :提供 NIS 相关的查寻指令功能
  • ypbind :提供 NIS Client 端的设定软件
  • ypserv :提供 NIS Server 端的设定软件
  • rpcbind :就是 RPC 一定需要的数据啊!

如果你是使用 Red Hat 的系统,例如我们的 CentOS 6.x 的话,那你可以利用『 rpm -qa | grep '^yp' 』 来检查是否有安装上述的软件。一般来说 yp-tools, ypbind 都会主动的安装,不过 ypserv 可能就不会安装了。 此时建议你直接使用『 yum install ypserv 』来安装吧!立刻就装好了。底下立刻来设定啰!


14.2.2 NIS 服务器相关的配置文件

在 NIS 服务器上最重要的就是 ypserv 这个软件了,但是,由于 NIS 设定时还会使用到其他网络参数设定数据, 因此在配置文件方面需要有底下这些数据喔:

  • /etc/ypserv.conf:这是最主要的 ypserv 软件所提供的配置文件,可以规范 NIS 客户端是否可登入的权限。
  • /etc/hosts:由于 NIS server/client 会用到网络主机名与 IP 的对应,因此这个主机名对应档就显的相当重要!每一部主机名与 IP 都需要记录才行!
  • /etc/sysconfig/network:可以在这个档案内指定 NIS 的网域 (nisdomainname)。
  • /var/yp/Makefile:前面不是说账号数据要转成数据库文件吗? 这就是与建立数据库有关的动作配置文件;

至于 NIS 服务器提供的主要服务方面有底下两个:

  • /usr/sbin/ypserv:就是 NIS 服务器的主要提供服务;
  • /usr/sbin/rpc.yppasswdd:提供额外的 NIS 客户端之用户密码修改服务, 透过这个服务, NIS 客户端可以直接修改在 NIS 服务器上的密码。相关的使用程序则是 yppasswd 指令;

与账号密码的数据库有关的指令方面有底下几个:

  • /usr/lib64/yp/ypinit:建立数据库的指令,非常常用 (在 32 位的系统下,文件名则是 /usr/lib/yp/ypinit 喔!);
  • /usr/bin/yppasswd:与 NIS 客户端有关,主要在让用户修改服务器上的密码。

14.2.3 一个实作案例

如果你有观察过图 14.1-1 的话,你会发现到我们的 NIS 需要设定 Master/Slave 及 client 等, 不过我们这里仅介绍 NIS master server 与 NIS client 两个组件而已,如果你有需要额外的 slave 的话, 再请查阅 NIS 官网的介绍啰。底下鸟哥先拟一个简单的案例,做完案例我们再来谈谈实际可能会使用于丛集计算机的案例吧!

  • NIS 的域名为 vbirdnis
  • 整个内部的信任网域为 192.168.100.0/24
  • NIS master server 的 IP 为 192.168.100.254 ,主机名为 www.centos.vbird
  • NIS client 的 IP 为 192.168.100.10,主机名为 clientlinux.centos.vbird

底下我们就一个一个来设定吧!


14.2.4 NIS server 的设定与启动

NIS 服务器的设定真是很简单,首先,你必须要在 NIS 服务器上面搞定你的账号与密码相关数据, 这包括 /etc/passwd, /etc/shadow, /etc/hosts, /etc/group .... 等等,都得要先搞定才行! 详细的账号相关资料请参考基础篇的第十四章账号管理。 等到搞定之后你就可以继续 NIS 服务器的设定了:

  • 1. 先设定 NIS 的域名 (NIS domain name)

NIS 是会分领域名 (domain name) 来分辨不同的账号密码数据的,因此你必须要在服务器与客户端都指定相同的 NIS 领域名才行。设定这个 NIS 领域名的动作很简单,就直接编辑 /etc/sysconfig/network 即可!如下所示:

[root@www ~]# vim /etc/sysconfig/network
# 不要更改其他既有数据,只要加入底下这几行即可:
NISDOMAIN=vbirdnis      <==设定 NIS 领域名
YPSERV_ARGS="-p 1011"   <==设定 NIS 每次都启动在固定的埠口

当然,你也可以使用手动的方式暂时设定好你的 NIS 领域名,透过的方法就是 nisdomainname 这个指令。 (其实 nisdomainname 与 ypdomainname 及 domainname 都是一模一样的指令啦!你只要记住一个指令名称即可。请自行 man domainname 吧!)不过,这个指令现在大概只用来检查设定是否正确,因为启动 NIS 服务器时,服务器去捉取的数据就是从 network 这个档案里面捉取的!所以只要改这个配置文件即可啊!

另外,由于未来想使用 iptables 直接管理 NIS 的使用,因此我们想要控制 NIS 启动在固定的埠口上。此时, 就使用『YPSERV_ARGS="-p 1011"』这个设定值来固定埠口在 1011 吧!

  • 2. 主要配置文件 /etc/ypserv.conf

这个配置文件就是 NIS 服务器最主要的配置文件啦!内容其实很简单,你可以保留默认值即可。不过,也可以作一些更动啦!

[root@www ~]# vim /etc/ypserv.conf
dns: no
# NIS 服务器大多使用于内部局域网络,只要有 /etc/hosts 即可,不用 DNS 啦

files: 30
# 预设会有 30 个数据库被读入内存当中,其实我们的账号档案并不多,30 个够用了。

xfr_check_port: yes
# 与 master/slave 有关,将同步更新的数据库比对所使用的端口,放置于 <1024 内。

# 底下则是设定限制客户端或 slave server 查询的权限,利用冒号隔成四部分:
# **[主机名/IP] : [NIS域名] : [可用数据库名称] : [安全限制]**
# [主机名/IP]   :可以使用 network/netmask 如 192.168.100.0/255.255.255.0 
# [NIS域名]   :例如本案例中的 vbirdnis
# [可用数据库名称]:就是由 NIS 制作出来的数据库名称;
# [安全限制]      :包括没有限制 (none)、仅能使用 <1024 (port) 及拒绝 (deny)
# 一般来说,你可以依照我们的网域来设定成为底下的模样:
127.0.0.0/255.255.255.0     : * : * : none
192.168.100.0/255.255.255.0 : * : * : none
*                           : * : * : deny
# 星号 (*) 代表任何数据都接受的意思。上面三行的意思是,开放 lo 内部接口、
# 开放内部 LAN 网域,且杜绝所有其他来源的 NIS 要求的意思。

# 还有一个简单作法,你可以先将上面三行批注,然后加入底下这一行即可:
*                         : * : * : none

由于鸟哥习惯在内部网域并不设定比较严格的限制,因此通常鸟哥都是选择使用『 : : * : none 』那个设定值! 然后透过 iptables 来管控可使用的来源就是了。当然,你可以依据你的需求来设定啦!

  • 3. 设定主机名与 IP 的对应 (/etc/hosts)

在 /etc/ypserv.conf 的设定当中我们谈到 NIS 大部分是给局域网络内的主机使用的,所以当然就不需要 DNS 的设定了。不过,由于 NIS 使用到很多的主机名,但是网络联机透过的是 IP 啊!所以你一定要设定好 /etc/hosts 里面的主机名与 IP 的对应,否则会无法成功联机 NIS !这个很重要,绝大部分的朋友无法达成 NIS server/client 的联机都是这里出问题而已。 依据本案例的设定值,你应该这样做:

[root@www ~]# vim /etc/hosts
# 原本就有的 localhost 与 127.0.0.1 之类的设定都不要更动,只要新增数据:
<u>192.168.100.254   www.centos.vbird</u>
192.168.100.10    clientlinux.centos.vbird

[root@www ~]# hostname
www.centos.vbird
# 再做个确认,确定输出的主机名与本机 IP 确实有写入 /etc/hosts 喔!

注意!如果你的主机名 (hostname) 与 NIS 的主机名不一样,那么在这个档案当中还是需要将你的主机名给他设定进来! 否则在后面数据库的设定时,肯定会发生问题。当然啦,你也可以直接在 /etc/sysconfig/network 当中直接重新设定主机名,然后重新启动,或者是利用 hostname 这个指令重新设定你的主机名也可以。

  • 4. 启动与观察所有相关的服务

接下来当然是先启动所有相关的服务啰,这包括 RPC, ypserv 以及 yppasswdd 啰!不过,如果你的 RPC 本来就已经启动的话,那就不要重新启动 rpcbind 了!此外,为了也让 yppasswdd 启动在固定的埠口,方便防火墙的管理, 因此,我们也建议你可以设定一下 /etc/sysconfig/yppasswdd 喔!

[root@www ~]# vim /etc/sysconfig/yppasswdd
YPPASSWDD_ARGS="--port  1012"    <==找到这个设定值,修改一下内容成这样!

[root@www ~]# /etc/init.d/ypserv start
[root@www ~]# /etc/init.d/yppasswdd start
[root@www ~]# chkconfig ypserv on
[root@www ~]# chkconfig yppasswdd on

注意,主要的 NIS 服务是 ypserv ,不过,如果要提供 NIS 客户端的密码修改功能的话, 最好还是得要启动 yppasswdd 这个服务才好。在启动完毕后,我们可以利用 rpcinfo 来检查看看:

[root@www ~]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100004    2   udp   1011  ypserv
    100004    1   udp   1011  ypserv
    100004    2   tcp   1011  ypserv
    100004    1   tcp   1011  ypserv
    100009    1   udp   1012  yppasswdd
# 其他不相干的 RPC 鸟哥将它拿掉了,与 NIS 有关的至少要有上面这几个!要仔细看,
# 看看埠口是否为我们规定的 1011, 1012 ,若不是的话,得要修改一下配置文件。

[root@www ~]# rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting

很多时候,很多朋友在设定完 NIS 后又回去设定 NFS 了,结果看了前一章的介绍,竟然又重新启动 rpcbind , 这将导致 ypserv 的注册数据被注销掉。因此,使用上述的动作来检查看看服务有没有在等待中, 要看到如上的『就绪并等待服务』才会是正常的呦!

  • 5. 处理账号并建立数据库

在完成了上面的所有步骤后,接下来我们得要开始将主机上面的账号档案转成数据库档案啦! 不过,因为担心与 NIS 客户端的账号有冲突,加上之前我们已经建立过一些账号了。所以,这里我们建立三个新账号, 分别是 nisuser1, nisuser2, nisuser3 。不过账号主要是依据 UID 来判断的啊!因此,我们使用大于 1000 的 UID 来建立这三个账号喔!

[root@www ~]# useradd -u 1001 nisuser1
[root@www ~]# useradd -u 1002 nisuser2
[root@www ~]# useradd -u 1003 nisuser3
[root@www ~]# echo password | passwd --stdin nisuser1
[root@www ~]# echo password | passwd --stdin nisuser2
[root@www ~]# echo password | passwd --stdin nisuser3

接下来,将建立的帐密数据转成数据库吧!转换的动作直接透过 /usr/lib64/yp/ypinit 这个指令来处理即可!整个步骤是这样做的:

[root@www ~]# /usr/lib64/yp/ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers.  www.centos.vbird 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 <control D>.
        next host to add:  www.centos.vbird  <==系统根据主机名自动捉取
        next host to add:                    <==这个地方按下 [crtl]-d
The current list of NIS servers looks like this:

www.centos.vbird

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...
Updating passwd.byuid...
....(中间省略)....
gmake[1]: Leaving directory `/var/yp/vbirdnis'

www.centos.vbird has been set up as a NIS master server.

Now you can run ypinit -s www.centos.vbird 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.

[root@www ~]# touch /etc/aliases
# 解决方法很简单吶!缺少什么档案,就 touch 他就是了!

[root@www ~]# /usr/lib64/yp/ypinit -m
# 然后再重新执行一次即可!

如果是如下的错误,那可能是因为:

  • 你的 ypserv 服务没有顺利启动,请利用 rpcinfo 检查看看;
  • 你的主机名与 IP 没有对应好,请检查 /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 喔! 注意注意啊!整个 NIS 服务器这样就给搞定了,有没有很简单啊!


14.2.5 防火墙设置

又来到了防火墙的规划了!要注意的是,我们的 NIS 与 NFS 都是使用 RPC Server 的,所以啰,除了上述谈到的固定埠口之外, 你还得要开放 port 111 才行。假设你已经看过前一章,而且是使用鸟哥的 iptables.rule 脚本来处理你的防火墙, 那么你可以修改该档案的内容,新增几条规则去:

[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -p tcp -s 192.168.100.0/24 --dport 1011 -j ACCEPT
iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 -m multiport \
         --dport 1011,1012 -j ACCEPT

[root@www ~]# /usr/local/virus/iptables/iptables.rule
# 千万记得要重新建置防火墙规则啊!