
| 出版日期:2000-10-01 总期号:164 本年期号:10 |
|
利用NIS在局域网上共享帐户和口令
张子波 一、引言 在一个拥有大量Linux/UNIX机器的网络中,如果用户要在机器之间建立起连接,共享系统资源,就必须在每台需要连接的机器上拥有自己的用户帐号。而每台机器的用户帐号又是相互独立的,这就迫使用户必须在很多机器上维护自己的帐号和口令。显然,在多台机器上维护帐号和口令是一件非常繁琐的工作。本文将详细介绍如何通过NIS(网络信息服务)来解决上述问题。 NIS也称YP(Yellow Pages)协议,是一个提供目录服务的RPC(远程过程调用)应用服务。通过它,就可以在网络上共享一个集中式的口令文件,从而大大简化客户端用户对帐户和口令的维护工作。目前该协议已在Linux系统上得以实现,并开发出了一个新的版本,称为NYS。本文将以基于Intel平台的Linux操作系统为例,阐述NIS的工作原理和配置方法。 二、NIS的工作原理 NIS采用客户机-服务器结构。它把网络上的许多机器分组在一个NIS子网内,形成一个NIS域。在每一个域中,至少要有一台机器被设置成NIS服务器,提供对NIS客户端的访问授权。这台服务器被称之为master(主)NIS服务器。根据网络规模的不同,用户也可以在一个域中设置多台NIS服务器,相对于master服务器,其它的NIS服务器被称为slave(从)NIS服务器。在规模较大的网络中,用户可以划分多个NIS子网,形成多个NIS域,并为每个域设置一台或多台NIS服务器。 在NIS服务器上,NIS将访问信息保存在一组映像中,这些映像与网络上的一个NIS域相对应。在master服务器上映像文件由两种格式组成。一种是ASCII格式,由一组ASCII码格式的记录组成。这些记录的格式与/etc/passwd文件十分相似。另一种是DBM(DateBase Management)格式,这种格式的映像文件是由ASCII格式的映像文件转换而来。 在一个NIS域中,如果存在多台NIS服务器,那么在建立slave服务器时,slave服务器会从master服务器上复制映像文件,并监听master服务器上映像文件的变化。一旦master服务器上的映像发生变化,slave服务器会自动更新。当master服务器出现故障或其对NIS客户机的请求响应过慢时,某个slave服务器就会代替master服务器进行响应。 在一个NIS域中,所有的NIS客户机可以共享NIS服务器上的/etc/passwd和/etc/group文件。这样,用户无论在那一台客户机上登录,都可以使用同一个用户名和口令,而且可以保证用户UID和GID完全相同。在任何一台机器上改变用户的口令,网络上其它机器的口令都会随之改变。这样,用户只须在网络上维护一个passwd和group文件就可以了。 三、配置NIS 由于NIS采用客户机-服务器结构,因此NIS软件也由两个组件组成:客户机和服务器。本文将以RedHat Linux 6.0(kernel 2.2.5)为操作系统平台,介绍NIS服务器和客户机的配置方法。 1.NIS服务器配置 在RedHat Linux 6.0中,提供了两个NIS服务器:yps和ypserv。由于ypserv的系统安全性较好,因此本文重点介绍ypserv的配置方法。目前ypserv的版本为1.3.6.91。假设NIS服务器的机器名为:NISSERVER,IP地址为:202.9.201.111,子网屏蔽为:255.255.255.0。 (1)安装ypserv。用root帐号登录,然后执行下面的命令: # rpm -i /mnt/cdrom/RedHat/RPMS/ypserv-1.3.6.91-1.i386.rpm (2)由于NIS是一个PRC应用服务,因此在启动ypserv之前,必须先启动RPC portmapper守护进程。如果portmap守护进程还未启动,则执行下面的命令: # /sbin/portmap (3)建立/etc/passwd和/etc/group文件的影子文件。假设系统中有两个本地帐户和两个NIS帐户,此时/etc/passwd文件的内容如下所示: root:fy19kpi1XepWM:0:0:root:/root:/bin/bash bin:*:1:1:bin:/bin: daemon:*:2:2:daemon:/sbin: adm:*:3:4:adm:/var/adm: lp:*:4:7:lp:/var/spool/lpd: sync:*:5:0:sync:/sbin:/bin/sync shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown halt:*:7:0:halt:/sbin:/sbin/halt mail:*:8:12:mail:/var/spool/mail: news:*:9:13:news:/var/spool/news: uucp:*:10:14:uucp:/var/spool/uucp: operator:*:11:0:operator:/root: games:*:12:100:games:/usr/games: gopher:*:13:30:gopher:/usr/lib/gopher-data: ftp:*:14:50:FTP User:/home/ftp: nobody:*:99:99:Nobody:/: postgres:!!:100:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash xfs:!!:101:234:X Font Server:/etc/X11/fs:/bin/false localuser1:KR/a/aX2/iEJw:500:500::/users/localuser1:/bin/bash localuser2:SRSx3SIrXKob6:501:501::/users/localuser2:/bin/bash nisuser1:sRmx4fVU4XmKI:502:502::/users/nisuser1:/bin/bash nisuser2:.SQ9ALyzH/wOY:503:503::/users/nisuser2:/bin/bash 执行如下命令: # /usr/sbin/pwconv (建立/etc/shadow文件) # /usr/sbin/grpconv (建立/etc/gshadow文件) 然后将/etc/shadow文件中的NIS帐户删除,再用/etc/passwd-文件中的NIS帐户记录替换/etc/passwd文件中的NIS帐户记录。完成修改后的/etc/passwd和/etc/shadow文件应如下所示: /etc/passwd文件: root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail: news:x:9:13:news:/var/spool/news: uucp:x:10:14:uucp:/var/spool/uucp: operator:x:11:0:operator:/root: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: ftp:x:14:50:FTP User:/home/ftp: nobody:x:99:99:Nobody:/: postgres:x:100:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash xfs:x:101:234:X Font Server:/etc/X11/fs:/bin/false localuser1:x:500:500::/users/localuser1:/bin/bash localuser2:x:501:501::/users/localuser2:/bin/bash nisuser1:sRmx4fVU4XmKI:502:502::/users/nisuser1:/bin/bash nisuser2:.SQ9ALyzH/wOY:503:503::/users/nisuser2:/bin/bash /etc/shadow文件: root:fy19kpi1XepWM:10805:0:99999:7::: bin:*:10805:0:99999:7::: daemon:*:10805:0:99999:7::: adm:*:10805:0:99999:7::: lp:*:10805:0:99999:7::: sync:*:10805:0:99999:7::: shutdown:*:10805:0:99999:7::: halt:*:10805:0:99999:7::: mail:*:10805:0:99999:7::: news:*:10805:0:99999:7::: uucp:*:10805:0:99999:7::: operator:*:10805:0:99999:7::: games:*:10805:0:99999:7::: gopher:*:10805:0:99999:7::: ftp:*:10805:0:99999:7::: nobody:*:10805:0:99999:7::: postgres:!!:10805:0:99999:7::: xfs:!!:10805:0:99999:7::: localuser1:KR/a/aX2/iEJw:10805:0:99999:7::: localuser2:SRSx3SIrXKob6:10805:0:99999:7::: (4)编辑/var/yp/Makefile文件。 ①如果在NIS域中存在slave服务器,须将NOPUSH设置为: NOPUSH=false 如果不存在slave服务器,则该项应设置为“true"。 ②设置转换到passwd映像和group映像文件中的最小UID和GID。这样可以避免将root帐号和一些系统帐号转换到NIS映像中,从而保证系统的安全性。 MINUID=502 MINGID=502 ③设置放置在域上的映射,即设置哪些文件使用NIS。将不需要转换的文件项删掉。 all: passwd group (5)设置网络上哪些客户机可以访问NIS服务器。编辑/var/yp/securenets文件。该文件的格式为:子网屏蔽 网络地址。例如:允许C类网络202.9.201.上的所有主机访问,则输入: 255.255.255.0 202.9.201.0 (6)启动ypserv守护进程。 # /usr/sbin/ypserv (7)检验ypserv是否正常运行 # rpcinfo -u localhost ypserv 该命令输出应为: program 100004 version1 ready and waiting program 100004 version2 ready and waiting (8)设置NIS域名 # /bin/domainname nisdomain (9)建立NIS数据库 # /usr/lib/yp/ypinit -m 输入NIS master的主机名后键入CTRL+D即可。此时,系统会在/var/yp目录下生成一个nisdomain子目录。里面包含passwd和group文件的映像文件passwd.byname、passwd.byuid、group.byname和group.bygid。 (10)用NFS输出NIS帐户的home目录/users ① 编辑/etc/exports文件,加入一行: /users (rw,no_root_quash) ②重新启动NFS守护进程 # /etc/rc.d/init.d/nfs restart 2.NIS客户机配置 在RedHat Linux 6.0中提供的NIS客户机软件为ypbind 3.3。安装该软件时还需安装yp-tools 2.2。 (1)安装ypbind和yp-tools # rpm -i /mnt/cdrom/RedHat/RPMS/ypbind-3.3-20.i386.rpm # rpm -i /mnt/cdrom/RedHat/RPMS/yp-tools-2.2-1.i386.rpm (2)设置/etc/hosts文件,在该文件中加入一条NIS服务器的记录: 202.9.201.111 nisserver (3)编辑/etc/yp.conf文件,设置NIS客户机所在NIS域及NIS服务器名称。 domain nisdomain ypserver nisserver (4)设置NIS域名 # /bin/domainname nisdomain (5)启动ypbind守护进程 # /sbin/ypbind (6)检验ypbind是否工作正常 # rpcinfo -u localhost ypbind 该命令输出应为: program 100007 version2 ready and waiting (7)编辑/etc/nsswitch.conf文件,设置哪些文件从NIS服务器获取,哪些文件从本地获取。该文件内容如下所示: passwd: compat group: compat shadow: compat passwd_compat: nis group_compat: nis shadow_compat: nis hosts: files dns services: files networks: files protocols: files rpc:files ethers: files netmasks: files bootparams: files automount: files aliases:files (8)设置可在本机登录的NIS帐户。如果允许nisuser1和nisuser2在本机登录,则在/etc/passwd文件中追加下面两行: +nisuser1 +nisuser2 在/etc/group文件中追加下面两行: +nisuser1 +nisuser2 (9)mount位于NIS服务器上的NIS帐户的home目录 mount nisserver:/users /users (10)检验NIS是否配置正确 # ypcat passwd 该命令将得到一个NIS服务器上passwd文件映射列表。内容如下所示: nisuser1:sRmx4fVU4XmKI:502:502::/users/nisuser1:/bin/bash nisuser2:.SQ9ALyzH/wOY:503:503::/users/nisuser2:/bin/bash 经过以上配置,用户就可以在NIS客户端使用NIS帐号登录了。 四、NIS映像文件的更新 如果用户想更改passwd和group文件的映像,只需在更改完passwd、shadow和group文件后,在/var/yp目录下执行make命令即可。这时,在NIS客户端用ypcat查看,就会发现passwd和group列表已经更新了。 五、更改NIS帐号口令 要更改NIS帐号口令,需在NIS服务器上运行yppasswdd守护进程。在NIS服务器上执行如下命令: # /etc/rc.d/init.d/yppasswdd start 然后在NIS客户机上用/usr/bin/yppasswd命令更改用户口令。 六、结论 本文详细介绍了利用NIS共享网络口令文件的原理和方法。其实,在使用NIS的网络中,不仅passwd和group文件可以使用NIS,其它一些文件(如:/etc/hosts、/etc/netgroup等)也可以使用NIS。在规模较大的网络中,使用NIS所带来的好处是非常明显的。笔者已用该方案解决了本公司Linux/UNIX网络系统共享口令文件的问题,使用效果良好。(笔者软件环境:NIS服务器采用RedHat Linux 6.0,工作站采用HP-UX 10.20和RedHat Linux 6.0) 但是,使用NIS也有一个不足之处,那就是一旦NIS服务器宕机或出现故障,所有的NIS帐户都将无法登录。因此,读者可以根据网络规模的大小及对系统可靠性和响应速度的要求,适当增加NIS域和NIS服务器的数量,来提高系统的性能和可靠性。 |
|||||||||||||||