利用ypserv搭建NIS服务器
NIS(Network Information Service)网络信息系统,是对主机账号等系统信息提供集中管理的网络服务。为什么要使用NIS服务?
在一个具有多台LINUX服务器的应用系统中,用户账号的维护是一个比较麻烦的管理工作,主要表现在以下几个方面:
*每台Linux服务器都可能有上百个用户账号;
*由于所有的服务器是为同一个组织(公司)提供服务,因此在每台服务器上都维护着同样的用户账号;
*为了系统中的用户使用方便,用户在每台服务器中都拥有同样的用户名和登录口令;
*对于系统管理员,需要在每台服务器中为用户建立同样的用户账号和初始口令;
*对于系统中的用户,每次修改用户的口令时,都需要登录到系统中的每台服务器,分别对服务器中账号设置口令;
综上所述,使用传统的基于主机文件的账号管理方式,无论对系统管理员还是对系统中的用户都不是很方便,而使用NIS服务能够较好地解决用户账号集中管理的问题。
NIS服务最早是由Sun公司提出的,因此也被称做Sun Yellow Pages,简称YP。Yellow Pages最常见的实例就是电话黄页,即用于查询电话号码和用户名的电话簿,供用户集中查询电话用户的信息。NIS服务之所以最早时也被称为YP,正是由于NIS能够对UNIX系统中的用户账号等信息提供集中和管理。
NIS服务器的应用结构分为NIS服务器和NIS客户机两种角色:
*NIS服务器集中维护用户的账号信息(数据库)供NIS客户机查询。
*当NIS客户机需要进行用户登录信息的认证时,就向NIS服务器发出查询请求,当用户提供的登录信息与NIS服务器中的数据库信息相符时,用户就可以正常登录NIS客户机。
*当系统中的一台NIS服务器为多台NIS客户机提供服务时,用户登录系统中的任何一台NIS客户机都会从NIS服务器进行登录认证,这样就实现了用户账号的集中管理。
NIS服务器为NIS客户机提供的信息不仅限于用户账号信息,在NIS服务器的数据库中包括以下几类信息:
*用户账号信息,包括用户名,登录口令和用户宿主目录等信息,用于取代Linux主机中的passwd文件和shadow文件中的作用。
*组账号信息,包括组账号等,用于取代Linux主机中group文件的作用。
*IP地址与主机名称对应记录的信息,用于取代Linux主机中hosts文件的作用。
为了方便NIS客户机的查询,以上这些信息在NIS服务器中被保存在不同名称的数据库(文件)中进行集中管理。
NIS服务需要分别在服务器端和客户端进行配置,下面分别介绍配置方法:
一,NIS服务器端的配置管理步骤
服务器端需安装的相关软件包:
ypserv-2.19-3.i386.rpm(第三张光盘,默认未装)-----------------提供NIS服务的主要软件包,需手动安装;
ypbind-1.19-7.el5.i386.rpm(第一张光盘,默认已装)------------系统默认被安装的客户端需要使用的软件包;
yp-tools-2.9-0.1.i386.rpm(第一张光盘,默认已装)---------------系统默认被安装的提供对NIS服务器的查询和管理工具软件包;
主配置文件:/etc/ypserv.conf 工作目录:/var/yp/ 服务进程名称:ypserv
(1)安装所需软件包:
#rpm �Civh ypserv-2.19-3.i386.rpm
(2)确认开启NIS服务所依赖的其它服务:
1. ypserv服务器和NFS服务器类似,都需要有portmap服务的支持,因此在安装ypserv之前需要先确认portmap软件包已经安装,portmap服务已正常启动,并确保portmap服务在默认的系统运行级别中是开启的。
#rpm -q portmap
#service portmap status
#chkconfig --level 35 portmap on
2. 若NIS服务器为RHEL4系统,ypserv服务的启动和运行还需要time和time-udp这两个服务的支持,而time和time-udp是受xinetd超级服务器管理的服务,因此需要确认time和time-udp为启动状态:
#chkconfig --list | grep time
而RHEL4系统中time和time-udp服务的默认状态是禁用状态,因此需要使用chkconfig命令设置这两个服务的状态为启用,并重亲启动xinetd服务使设置生效:
#chkconfig time on
#chkconfig time-udp on
#chkconfig --list | grep time
#service xinetd restart
(3)建立NIS的域名:
在NIS服务器中需要建立相应的域名,此域名与DNS服务器中的域名没有直接的关系。
nisdomainname命令用于建立NIS服务器的域名,需要指定一个NIS域名作为该命令的参数。由于NIS服务器主机每次启动时都需要进行NIS的域名设置,因此需要将这条设置域名的命令nisdomainname添加到/etc/rc.d/rc.local文件中,让系统启动时自动设置NIS域名:
#nisdomainname testname (假设NIS域名为testname)
#echo ‘/bin/nisdomainname testname’ >> /etc/rc.d/rc.local
#nisdomainname (查看NIS域名)
(4)修改“/etc/sysconfig/network”文件:
为了便于NIS服务器主机能够进行正确的网络设置,同时还需要将NISDOMAIN=testname配置项添加到“/etc/sysconfig/network”文件中:
#echo ‘NISDOMAIN=testname’ >> /etc/sysconfig/network
(5) 设置ypserv服务的配置文件:
1 主配置文件/etc/ypserv.conf的配置-------NIS服务器程序(ypserv)的配置文件为/etc/ypserv.conf ,对于该配置文件的内容不需要做太多修改:
# ypserv.conf In this file you can set certain options for the NIS server,
# and you can deny or restrict access to certain maps based
# on the originating host.
# See ypserv.conf(5) for a description of the syntax.
# Some options for ypserv. This things are all not needed, if
# you have a Linux net.
# Should we do DNS lookups for hosts not found in the hosts table ?
# This option is ignored in the moment.
dns: no
# How many map file handles should be cached ?
files: 30
# Should we register ypserv with SLP ?
slp: no
# After how many seconds we should re-register ypserv with SLP ?
slp_timeout: 3600
# xfr requests are only allowed from ports < 1024
xfr_check_port: yes
# The following, when uncommented, will give you shadow like passwords.
# Note that it will not work if you have slave NIS servers in your
# network that do not run the same server as you.
# Host : Domain : Map : Security
#
# * : * : passwd.byname : port
# * : * : passwd.byuid : port
# Not everybody should see the shadow passwords, not secure, since
# under MSDOG everbody is root and can access ports < 1024 !!!
* : * : shadow.byname : port
* : * : passwd.adjunct.byname : port
# If you comment out the next rule, ypserv and rpc.ypxfrd will
# look for YP_SECURE and YP_AUTHDES in the maps. This will make
# the security check a little bit slower, but you only have to
# change the keys on the master server, not the configuration files
# on each NIS server.
# If you have maps with YP_SECURE or YP_AUTHDES, you should create
# a rule for them above, that's much faster.
# * : * : * : none
在ypserv.conf文件中最重要的配置部分是访问控制的设置,管理员通过添加访问控制的设置允许或拒绝指定的主机使用NIS服务。
访问控制记录由四个字段构成,从左到右依次是主机地址,网络域名,映射数据库类型和安全等级,记录中的各字段之间用冒号分隔,格式如下:
主机地址:网络域名:映射数据库类型:安全等级
访问控制记录中各字段的含义如下:
*主机地址---可以是主机的IP地址或主机名称,也可以是子网地址,例如192.168.1.0/255.255.255.0,若使用*号则表示所有的主机。
*网络域名---在设置记录中其实并不常用,通常设置为*号即可。
*映射数据库类型---是NIS服务器中的数据库名称,可以是单独的数据库,例如passwd.byname,也可以使用*号代表全部数据库。
*安全等级---可以设置为none,port,deny关键字。none表示客户机可无条件的访问NIS服务器;port表示仅允许客户机从1024以下的端口访问NIS服务器,由于只有root用户才可以使用1024以下的端口,因此port设置相对安全些;deny表示无条件拒绝客户机对NIS服务器的访问,通常用作默认的访问策略,可提高系统的安全性。
例:一个ypserv.conf文件中最基本和最常用的访问控制记录
127.0.0.0/255.255.255.0 : * : * : none
192.168.1.0/255.255.255.0 : * : * : none
* : * : * : deny
其中127.0.0.0/255.255.255.0网段设置了主机环回地址的访问策略;192.168.1.0/255.255.255.0设定的是NIS客户机所在局域 网的网段,允许该网段中的NIS客户机访问NIS服务器;最后一行是默认的访问策略,设置其他的所有主机将被NIS服务器无条件拒绝访问。
2securenets安全配置文件-----虽然ypserv.conf配置文件中可以使用访问控制记录配置NIS服务器中数据库的访问控制,除此以外NIS服务器还提供了securenets文件用于对NIS客户端主机的访问控制。而且securenets文件具有比ypserv.conf配置文件更高的对主机进行访问控制的级别和效率。
securenets文件应该保存在“/var/yp”目录中,但是系统中/var/yp目录中默认并没有securenets文件,需要管理员进行手动建立(/usr/share/doc/ypserv-2.19目录中有一个样例)。当“/var/yp”目录中,securenets文件不存在时,NIS服务器将允许所有主机访问NIS服务器(默认的安全设置有欠缺)。
securenets文件的配置比较简单,可以使用主机和网络两种配置记录.主机配置记录:以host关键字开始,空格后设置主机的IP地址(不要使用主机名);网络配置记录:由子网掩码和网络地址两部分组成,中间用空格进行分隔,需要注意子网掩码在前,网络地址在后的顺序;符合访问控制记录的主机被允许访问NIS服务器,其他主机将被拒绝访问。
例:配置一个securenets文件示范
#vi /var/yp/securenets (需手动建立)
host 127.0.0.1
255.255.255.0 192.168.1.0
其中host 127.0.0.1记录设置允许NIS服务器本机访问;255.255.255.0 192.168.1.0记录设置192.168.1.0/24子网中的所有主机允许访问NIS服务器,其他的所有主机都被NIS服务器拒绝访问。
(6)启动NIS服务器
在完成对ypserv.conf文件的配置后,可以启动NIS服务器。NIS服务器需要启动ypserv和yppasswdd两个服务程序。在ypserv和yppasswdd服务程序运行之前需要先确认portmap服务程序已经运行,因为NIS服务的运行需要portmap服务程序的支持。并且在安装ypserv软件包时,并没有设置ypserv和yppasswdd服务程序在系统启动时自动启动,因此需要使用chkconfig命令手动进行设置:
#service portmap status
#service ypserv start
#service yppasswdd start
#chkconfig --level 35 ypserv on
#chkconfig --level 35 yppasswdd on
(7)构建NIS数据库
在ypserv和yppasswdd服务程序运行后,需要使用ypinit命令构建NIS服务器的数据库文件。ypinit命令位于“/usr/lib/yp/”目录中,使用“-m”命令选项构建数据库。
#/usr/lib/yp/ypinit -m (需用绝对路径)
ypinit命令将根据NIS服务器主机中的本地系统文件信息创建数据库文件,建立的数据库文件被保存在“/var/yp”目录中与NIS域名同名的子目录之中。
需要注意:在NIS服务器主机中对本地系统用户账号,组账号等信息(文件)更改后都需要使用ypinit命令重新构建数据库文件的内容,否则NIS客户端主机获得的信息不会自动更新。
由于ypinit -m命令其实是调用make命令,并根据“/var/yp/”目录中的Makefile文件的配置内容进行NIS服务器数据库文件的创建,因此修改“Makefile”文件中的配置将会影响创建NIS服务器的数据库文件的过程和结果。
二,NIS客户端的配置管理步骤
NIS客户机与NIS服务器通常不会运行在同一个服务器主机中。
(1)NIS客户端所需的软件包
RHEL5系统作为NIS客户机使用时,需要使用ypbind和yp-tools两个软件包,这两个软件包是默认安装到系统中的。因此不需要手动进行安装。
#rpm -qa | grep ^yp
ypbind-1.19-7.el5 (ypbind是作为NIS客户端与NIS服务器进行通信的服务程序,
软件包中包括执行程序,配置文件和启劝脚本等文件)
yp-tools-2.9-0.1 (包括了对NIS服务器进行测试,查询和管理功能的工具程序,所有的命令文件名都以yp开始)
(2)设置hosts文件
在NIS客户机的hosts中应添加NIS服务器的主机名称解析记录,以便NIS客户机能够使用主机名访问NIS服务器。
#echo ‘192.168.1.2 NISserver’ >> /etc/hosts
(3)建立NIS域名
在NIS客户机建立NIS域名的操作方法与NIS服务器中完全相同,需要进行以下操作:
#nisdomainname testname (与服务器相同,假设NIS域名为testname)
#echo ‘/bin/nisdomainname testname’>> /etc/rc.d/rc.local (NIS服务器主机每次启动都需要进行NIS的域名设置)
#echo ‘NISDOMAIN=testname’ >> /etc/sysconfig/network (以便NIS服务器主机能够进行正确的网络设置)
(4)设置yp.conf配置文件
ypbind服务程序的配置文件是yp.conf,只需要在该配置文件中设置NIS域名和NIS服务器的主机名即可:
#ehco ‘domain testname server NISserver’>> /etc/yp.conf
配置语句中domain testname server NISserver设置了当前使用的NIS域名为testname,所使用的NIS服务器的主机名是
NISserver.
(5)设置“etc/nsswitch.conf”文件
RHEL5系统中的/etc/nsswitch.conf文件用于设置系统中信息的查询方式,对于用户账号,组账号等信息在nsswitch.conf文件中的默认设置为只使用本地文件,对于主机名称解释使用本地文件和DNS服务器。
nsswitch.conf文件中相关设置项不是代表系统中的文件或命令,而是代表相关信息的查询方式,具体含义如下:
passwd: files *passwd表示用户账号信息的查询
shadow: files *shadow表示用户口令信息的查询
group: files *group表示用户组账号信息的查询
hosts: files dns *hosts表示主机名信息的查询
NIS客户机中需要修改nsswitch.conf文件,在files之后设置使用nis,即优先使用本地文件,然后使用NIS服务器获取信息,
如:
passwd: files nis
shadow: files nis
group: files nis
hosts: files nis dns
(6)启动ypbind服务程序
NIS客户机需要运行ypbind服务程序来实现对NIS服务器的信息访问,在启动ypbind服务之前需要先确认portmap服务已经启动,因为ypbind服务程序的运行同样依赖于portmap服务。并且RHEL5系统中虽然默认安装了ypbind软件包,但是并没有设置ypbind服务程序的自动启动,管理员需要使用chkconfig命令手动设置ypbind服务在运行级别3和5中自动启动。
#service portmap status
#service ypbind start
#chkconfig --level 35 ypbind on
(7)在NIS客户机上测试与NIS服务器的连接
yp-tools软件包中提供了yptest ,ypwhich ,ypcat共三个命令工具可用于在NIS客户机中测试与NIS服务器的连接,所有的测试命令都是通过NIS客户机中的ypbind服务程序对NIS服务进行查询的。
<1> yptest:是基本的NIS服务器测试命令,该命令会对NIS服务器的域名,主机,数据库及其内容进行自动测试,并显示测试的结果。
#yptest
<2>ypwhich:可显示NIS客户机所使用的NIS服务器的主机名称,当ypwhich使用“-x”选项时会显示NIS服务器中使用的数据库和映射文件的名称。
#ypwhich
NISserver (只会显示NIS服务器主机名)
#ypwhich -x
<3>ypcat:ypcat -x会与ypwhich -x命令显示相同的查询信息。当使用数据库名作为ypcat命令的参数时,ypcat命令将显示指定数据库的内容。管理员可以从ypcat命令的结果中查询到NIS服务器数据库中非常有用的信息。
#ypcat -x
#ypcat group (使用数据库名作为命令参数)
(8)NIS客户端用户登录
在NIS客户端主机中测试与NIS服务器连接成功后,就可以尝试使用NIS服务器中的用户账号登录NIS客户机了.但当使用NIS服务器中的用户账号成功登录系统后,屏幕会提示没有找到用户宿主目录的信息,这是由于NIS客户机本地文件系统中没有在“/home”目录下建立用户的宿主目录。(由于系统防火墙的默认配置,可能造成NIS客户机和NIS服务器之间无法进行通信,如果用户在NIS客户机中登录不成功,可以先将NIS服务器和NIS客户机的iptables防火墙服务关闭,命令:#service iptables stop或#iptables -F)
(9)用户密码修改
用户登录NIS客户端后,使用yppasswd命令可以修改NIS服务器端保存的用户口令,而不能用passwd命令修改。用户执行yppasswd命令后将提示输入旧的用户口令,然后输入两次新口令,若新口令符合系统要求,NIS服务器中该用户的口令将更新为新设的口令。
当 root用户执行yppasswd命令指定用户名作为命令参数时,可修改指定用户的口令,但是还需要先输入root的用户口令。
三,NIS基本应用
上面的内容介绍了NIS服务器端的配置管理和NIS客户端的配置使用,并且实现了用户账号的集中管理。但是在NIS客户机的本地文件系统中由于没有建立用户的本地账号,因此并不会存在用户的宿主目录。可以通过NFS服务和NIS服务的综合运用,实现用户登录任何一个NIS客户机后都使用同一个属主目录。步骤如下:
(1)在NIS服务器中输出 NFS共享目录
NIS服务器主机中具有所有用户的本地账号,因此NIS服务器的文件系统中也为每个用户建有宿主目录,所有普通用户的宿主目录都在“/home”目录中,因此可以将“/home”作为NFS共享目录输出给所有的NIS客户机。
编辑NIS服务器的“/etc/exports”文件,添加“/home”共享目录的设置:
/home 192.168.1.0/24(rw,async,no_root_squash)
启动NIS服务器主机中的NFS服务器程序:
#service nfs start
(2)在所有的NIS客户机中挂载NIS服务器中的共享目录
在应用系统的所有NIS客户机中设置挂载NIS服务器中的NFS共享目录“/home”。在NIS客户机的“/etc/fstab”文件中添加NFS文件系统的自动挂载设置,NIS客房机以后每次启动都会自动挂载NIS服务器中的“/home”文件系统:
#vi /etc/fstab
NISserver:/home/ /home nfs defaults 0 0
使用mount命令将按照fstab文件中的设置挂载NIS服务器主机中的“/home”文件系统:
#mount /home
#ls /home/
经过以上设置后,在每个NIS客户机中进行用户登录,用户使用的都是NIS服务器中相同的宿主目录,这样不但实现了用户账号的集中管理,而且还实现了用户文件在各NIS客户机之间的“漫游”。( 监时挂载:#mount �Ct nfs 192.168.1.2:/home /home)