1. 准备工作2. NIS 的由来与功能
2.1 NIS 的主要功能
2.2 NIS 的运作流程
3. NIS server 端的设定
3.1 所需要的软件
3.2 NIS 的软件结构
3.3 一个实作案例
3.4 NIS master 的设定与启动
3.5 NIS slave 的设定与启动 (optional)
3.6 防火墙设置
4. NIS client 端的设定
4.1 NIS client 所需软件与软件结构
4.2 NIS client 的设定与启动
4.3 NIS client 端的检验: yptest, ypwhich, ypcat
4.4 使用者参数修改: yppasswd, ypchfn, ypchsh
5. NIS 与 NFS 的设定与群集电脑运用
6. 命令对应资料
7. 重点回顾
8. 参考资料
1、准备工作
NIS 最大的用途在于提供客户端的使用者相关参数查询,举例来说,使用者的帐号、密码、UID、家目录、shell 等等的,都可以通过 NIS 服务器来查询的。但 NIS 所能提供的也就是这样了,他并没有办法提供使用者家目录的空间, 因此,一般在高效能运算电脑当中,如果想要让所有的机器都拥有相同的帐号密码,通常使用 NIS 提供身份验证,配合 NFS 提供所需要的磁盘空间。 开始前,你最好知道:
了解网络基础,防火墙与关闭 SELinux 模块等等。
一定要认识 NFS 服务器;
需要了解 RPC;
需要了解使用者帐号相关知识
建立 NIS 数据库会使用到 make/Makefile 功能
2、NIS 的由来与功能
在一个大型的网络当中,如果有多部 Linux 主机,万一要每部主机都需要设定相同的帐号与密码时,还真是麻烦。 此时,如果能够有一部主控服务器 (master server) 来管理网络中所有主机的帐号, 当其他的主机有使用者登入的需求时,才到这部主控服务器上面要求相关的帐号、密码等使用者资料, 如此一来,如果想要增加、修改、删除使用者资料,只要到这部主控服务器上面处理即可, 这样就能够降低重复设定使用者帐号的步骤。
这样的功能有很多的服务器软件可以达成,这里我们要介绍的则是 Network Information Services (NIS server) 这个服务器软件。
下面就先来谈一谈 NIS 的相关功能。
2.1 NIS 的主要功能
通常我们都会建议,一部 Linux 主机的功能越简单越好,也就是说,一部 Linux 就专门进行一项服务。这样有许多的好处,这包含功能简单所以系统资源得以完整运用, 并且在发生入侵或者是系统产生状况的时候,也比较容易追查问题所在。因此,一个公司内部常常会有好几部 Linux 主机,有的专门负责 WWW 、有的专门负责 Mail 、有的专门负责 SAMBA 等等的服务。
不过,这样虽然有分散风险、容易追踪问题的好处,但是,由于是同一个公司内的多部主机,所以事实上所有的 Linux 主机的帐号与密码都是一样的!那如果公司里面有 100 人的话, 我们就需要针对这么多部的主机去设定帐号密码。而且,如果未来还有新进员工, 那么就设定密码就会使系统管理员抓狂。
这个时候,让我们换一个角度来思考:如果我设计了一部专门管理帐号与密码的主机,而其他的 Linux 主机当有客户端要登入的时候,就必须要到这部管理密码的主机来查寻使用者的帐号与密码, 如此一来,我要管理所有的 Linux 主机的帐号与密码,只要到那部主要主机上面去进行设定即可! 这就是 Network Information Service, NIS 主机的主要功能。
事实上,Network Information Service 最早应该是称为 Sun Yellow Pages (简称 yp),也就是 Sun 这家公司出的一个名为 Yellow Pages 的服务器软件,请注意, NIS 与 YP 是一模一样的。这个 Yellow Pages 名字取的真是好!怎么说呢?知道黄页 (Yellow Pages) 是什么吗?就是我们家里的电话簿, 今天如果你要查寻一家厂商的电话号码,通常就是直接去查黄页上面的记录来取得电话号码。而这个 NIS 也一样,当使用者要登入时, Linux 系统就会到 NIS 主机上面去找寻这个使用的帐号与密码信息来加以比对, 以提供使用者登入的验证。
那么 NIS 主机提供了哪些信息?还记得帐号与密码放置在哪里吗?NIS 就是提供这些资料。 主要有下面这些基本的资料提供给有登入需求的主机:
/etc/passwd
提供使用者帐号、UID、GID、家目录所在、Shell 等等
/etc/group
提供群组资料以及 GID 的对应,还有该群组的加入人员
/etc/hosts
主机名称与IP的对应,常用于 private IP 的主机名称对应
/etc/services
每一种服务 (daemons) 所对应的端口 (port number)
/etc/protocols
基础的TCP/IP协议,如 TCP, UDP, ICMP等
/etc/netgroup
网络群组的定义与使用 (NIS 可能会需要)
/etc/rpc
每种 RPC 服务器所对应的程序号码
/var/yp/ypservers
NIS 服务器所提供的资料文件
至少可以提供上述这些功能,当然,你也可以自行定义需要哪些资料文件。
2.2 NIS 的运作流程
由于 NIS 服务器主要是提供使用者登入的信息给客户端主机来查询用,所以,NIS 服务器所提供的资料当然就需要用到传输与读写比较快速的 "数据库" 文件系统, 而不是传统的纯文字资料。为了要达到这个目的,所以 NIS 服务器就必须要将前一小节提到的那些文件制作成为数据库文件, 然后使用网络通讯协议让客户端主机来查询。至于所使用的通讯协定与 NFS 相同,都使用远程过程调用 (RPC)。
此外,如果在一个大型的网络里面,所有的 Linux 主机都向同一部 NIS 服务器要求使用者信息时, 这部 NIS 服务器的负载 (loading) 可能会过大。甚至如果考虑到资料使用的风险, 要是这单一的一部 NIS 服务器死机时,那其他的 Linux 主机都不能让users 登入。 所以,在较为大型的企业环境当中, NIS 服务器可以使用 master/slave (主控/次要服务器) 架构。
Master NIS 服务器提供系统管理者制作的数据库, slave 则取得来自 master 的数据库资料,并借以提供其他客户端的查询。 客户端可以向整个网络要求使用者资料的回应,master 与 slave 皆可回答, 由于 slave 的资料来自于 master ,所以使用者帐号资料本身是同步的。 如此一方面可以分散 NIS 服务器的负载, 而且也可以避免因 NIS 服务器死机而导致的无法登入的风险。
图一、NIS 的运作流程
整个 NIS 的运作就如同上图,首先必须要有 NIS server 的存在,之后才会有 NIS Client 的存在。 那么当使用者有登入的需求时,整个 NIS 的运作程序是:
关于 NIS Server (master/slave) 的运作程序:
1 NIS Master 先将本身的帐号密码相关信息制作成为数据库文件;
2 NIS Master 可以主动的告知 NIS slave server 来更新;
3 NIS slave 亦可主动的前往 NIS master server 取得更新后的数据库文件;
4 若有帐号密码的变动时,需要重新制作 database 与重新同步化 master/slave。
关于当 NIS Client 有任何登入查询的请求时:
NIS client 若有登入请求时,会先查询其本机的 /etc/passwd, /etc/shadow 等文件;
若在 NIS Client 本机找不到相关的帐号资料,才开始向整个 NIS 网络的主机广播查询;
每部 NIS server (不论 master/slave) 都可以回应,基本上是『先回应者优先』。
从上面的流程当中,你会发现 NIS client 还是会先针对本机的帐号资料进行查询, 查不到才到 NIS server 上寻找。因此,如果你的 NIS client 本身就有很多一般使用者的帐号时, 那跟 NIS server 所提供的帐号就可能产生一定程度的差异。 所以,一般来说,在这样的环境下,NIS client 或 NIS slave server 会主动去掉本机本身的一般使用者帐号,仅会保留系统所需要的 root 及系统所需帐号而已。 如此一来,一般使用者才都会经由 NIS master server 所控制。
根据上面图一的说明,我们的 NIS 环境大致上需要设定的基本有:
NIS Master server :将文件建置成数据库,并提供 slave server 来更新;
NIS Slave server :以 Master server 的数据库作为本身的数据库来源;
NIS client :向 master/server 要求登入者的验证资料。
3、NIS Server 端的设定
NIS 服务器端主要在于提供数据库给客户端作为验证之用,并且服务器端因为数据库的来源又可分为 master/slave 两大类。下面我们将会介绍这两种服务器的安装方式。
3.1 所需要的软件
由于 NIS 服务器需要使用 RPC 协定,且 NIS 服务器同时也可以当成客户端, 因此它需要的软件就有下面几个:
yp-tools :提供 NIS 相关的查找命令功能
ypbind :提供 NIS Client 端的设置软件
ypserv :提供 NIS Server 端的设置软件
portmap :RPC 需要的
如果你是使用 Red Hat 的系统,例如我们的 RHEL4 的话,那你可以利用『 rpm -qa | grep yp 』 来检查是否有安装上述的软件。一般来说 yp-tools, ypbind 都会主动的安装,不过 ypserv 可能不会安装。 此时你可以使用『 rpm -ivh ypserv* 』来安装。
3.2 NIS 的软件结构
在 NIS 服务器上最重要的就是 ypserv 这个软件了,而 ypserv 主要则是提供了下面这些重要资料:
配置文件方面:
/etc/ypserv.conf:这是最主要的配置文件, 可以规范 NIS 客户端是否可登入的权限。
/etc/hosts:非常重要!每一部主机都需要记录才行。
/etc/netgroup:设定信任的主机与网域;
/var/yp/Makefile:与建立数据库有关的配置文件;
/etc/sysconfig/network:可以在这个文件内指定 NIS 的域名 (nisdomainname)。
服务器提供的主要服务方面:
/usr/sbin/ypserv:就是 NIS 服务器提供的主要服务;
/usr/sbin/rpc.ypxfrd:用来作为 master/slave 主机之间传输数据库的服务;
/usr/sbin/rpc.yppasswdd:提供额外的 NIS 客户端之使用者密码修改服务, 通过这个服务, NIS 客户端可以直接修改在 NIS 服务器上的密码。相关的使用程序则是 yppasswd 命令;
与数据库有关的指令方面:
/usr/sbin/yppush:master 主机将数据库直接送至 slave 的命令;
/usr/lib/yp/ypinit:建立数据库的命令;
/usr/lib/yp/ypxfr:传送数据库的命令,在该目录下尚有 ypxfr_1perday, ypxfr_1perhour, ypxfr_2perday 等等。
3.3 一个实作案例
如果您有观察过图一的话,你会发现到我们的 NIS 需要设置 Master/Slave 及 client 等, 这里提供一个案例,里面就包括这三个软件。如果你的网络是比较小的环境, 那下面提供的 NIS slave server 你可以略过,在这里的假设是这样的:
NIS 的域名为 vbirdnis
整个内部的信任网段为 192.168.1.0/24
NIS master server 的 IP 为 192.168.1.2 ,主机名称为 master.vbirdnis
NIS slave server 的 IP 为 192.168.1.10,主机名称为 slave.vbirdnis
NIS client 的 IP 为 192.168.1.100,主机名称为 client.vbirdnis
3.4 NIS master 的设置与启动
NIS 的设置很简单,首先,你必须要在 NIS master 这部服务器上面搞定你的帐号与密码相关资料, 这包括 /etc/passwd, /etc/shadow, /etc/hosts, /etc/group .... 等等,都得要先搞定才行! 等到搞定之后你就可以继续 NIS 服务器的设定了:
设定 NIS 的域名 (NIS domain name)
因为所有的 NIS server/client 都需要设定 NIS 域名称。设置的方式很简单, 直接以 nisdomainname 这个命令来设置即可。(其实 nisdomainname 与 ypdomainname 及 domainname 都是一模一样的命令。你只要记住一个命令名称即可。请自行 man domainname )
# nisdomainname [NIS 域名称]
参数:
若没有加上域名称,则会显示出目前的 NIS 域;
# nisdomainname vbirdnis
# nisdomainname
vbirdnis <==瞧!已经设定了 NIS 域名。
如果确定每次开机时都需要启动这个 NIS 域名的话,直接写到 /etc/rc.d/rc.local :
# vi /etc/rc.d/rc.local
# 加入下面这一行:
/bin/nisdomainname vbirdnis
若是想要在启动 NIS 时就自动设定好 NIS 域名,可以利用 /etc/sysconfig/network 这个文件,写成如下所示的:
# vi /etc/sysconfig/network
# 加入下面这一行:
NISDOMAIN=vbirdnis
如此一来,你的服务器就会在开机时,或者是在启动 NIS 相关服务时,就能够自行设定好 NIS 域名。
主要配置文件 /etc/ypserv.conf
这个配置文件就是 NIS 服务器最主要的配置文件。内容其实很简单,你可以保留预设值即可。
# vi /etc/ypserv.conf
dns: no
# NIS 服务器的使用时机绝大部分都是在局域网络内而已,所以不需要 DNS 系统
# 只要 /etc/hosts 设定正确即可。
files: 30
# 预设会有 30 个数据库被读入记忆体当中,因为我们的帐号档案其实不多, 30 个已经足够使用了!
slp: no
slp_timeout: 3600
# 这两个与 SLP 服务有关,因为我们仅使用单纯的 NIS ,所以不需要启动。
xfr_check_port: yes
# 这个与 master/slave 有关,将同步更新的数据库比对所使用的端口,
# 放置于小于 1024 的端口内。
# 下面则是设定限制客户端或 slave server 查询的权限,利用冒号隔成四部分,分别为:
# [主机名称/IP] : [NIS域] : [可用数据库名称] : [安全限制]
# [主机名称/IP] :可以使用 network/netmask 如:192.168.1.0/255.255.255.0
# [NIS域名] :例如本案例中的 vbirdnis
# [可用数据库名称]:就是由 NIS 制作出来的数据库名称;
# [安全限制] :包括没有限制 (none)、仅能使用 <1024 (port) 及拒绝 (deny)
# 一般来说,你可以依照我们的网段来设定成为下面的模样:
127.0.0.0/255.255.255.0 : * : * : none
192.168.1.0/255.255.255.0 : * : * : none
* : * : * : deny
# 星号 (*) 代表任何资料都接受的意思。上面三行的意思是,开放 lo 内部介面、
# 开放内部 LAN 网域,且杜绝所有其他来源的 NIS 请求。
# 如果上面这三行权限相关的设定无法让你的 NIS 顺利的生效时,
# 你可以先将上面三行注解,然后加入底下这一行:
* : * : * : none
# 这样应该就能够让 NIS 顺利的连接。
设置主机名称 (/etc/hosts) 与建立信任群组 (/etc/netgroup)
在 /etc/ypserv.conf 的设置当中我们谈到 NIS 大部分是给局域网络内的主机使用的, 所以当然就不需要 DNS 的设置了。不过,由于 NIS 使用到很多的主机名称, 所以你一定要设置好 /etc/hosts 对应,否则会无法成功连接 NIS !这个很重要,绝大部分的朋友无法达成 NIS server/client 的连接都是这里出问题而已。 依据本案例的设置值,你应该这样做:
# vi /etc/hosts
192.168.1.2 master.vbirdnis
192.168.1.10 slave.vbirdnis
192.168.1.100 client.vbirdnis
注意:如果你的主机名称与 NIS 的主机名称不同,那么在这个文件当中还是需要将你的主机名称给设置进来! 否则在后面数据库的设定时,肯定会发生问题。当然,你也可以直接在 /etc/sysconfig/network 当中直接重新设定主机名称,然后重新开机,或者是利用 hostname 这个命令重新设置你的主机名称也可以。
除了这个设置之外,有时你可能需要设置 /etc/netgroup ,虽然比较新的 distributions 都可以略过这个档案的检查了,不过建议您还是可以了解一下。这个 /etc/netgroup 文件可以记录在我们网域里面被信任的群,这个文件的内容当中,每一行都有三列,分别以逗号『,』隔开,意义为:
,,
主机,使用者帐号,域名
事实上,如果这个文件是『空白』的,那么代表着『全部的主机、帐号与域名称都接受』的意思,因为我们已经在 /etc/ypserv.conf 里头设置好了关于安全的项目,所以这个文件只要建立即可(缺省是不存在的):
# touch /etc/netgroup
启动所有相关的服务
这包括 RPC, ypserv 以及 yppasswdd。不过,如果你的 RPC 本来就已经启动的话,那就不要重新启动 portmap。
# /etc/init.d/portmap start
# /etc/init.d/ypserv start
# /etc/init.d/yppasswdd start
注意,主要的 NIS 服务是 ypserv ,不过,如果要提供 NIS 客户端的密码修改功能的话, 最好还得要启动 yppasswdd 这个服务。在启动完毕后,我们可以利用 rpcinfo 来检查看看:
# rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100004 2 udp 942 ypserv
100004 1 udp 942 ypserv
100004 2 tcp 945 ypserv
100004 1 tcp 945 ypserv
100009 1 udp 950 yppasswdd
# rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
要出现上述的画面才表示正确的启动了 ypserv。 若需要开机立即启动 ypserv ,请使用 chkconfig 来处理。
阅读(1444) | 评论(0) | 转发(0) |