本文系统:Centos6.0
介绍:
NIS(Network Information Services)最早是 Sun Yellow Pages (简称yp);
在一个大型的网域当中,如果有多部 Linux 主机,万一要每部主机都需要设定相同的帐号与密码时,怎么办?如果能够有一部帐号服器来管理网域中所有主机的帐号, 当其他的主机有使用者登入的需求时,到服务器上查找相关的帐号、密码等使用者资讯, 如此一来,如果想要增加、修改、删除使用者资料,只要到服务器上面处理即可, 这样就能够降低重复设定使用者帐号的步骤;
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/rpc | 每种 RPC 服务器所对应的程式号码 |
/var/yp/ypservers | 服务器所提供的资料库 |
由于 NIS 服务器主要是提供使用者登入的资讯给用户端主机来查询之用,所以, NIS 服务器所提供的资料当然就需要用到传输与读写比较快速的 "资料库" 档案系统, 而不是传统的纯文字资料。为了要达到这个目的,所以 NIS 服务器就必须要将前一小节提到的那些档案制作成为资料库档案, 然后使用网路通讯协议让用户端主机来查询。至于所使用的通讯协议是使用远端程序呼叫 (RPC) 这个玩意儿;
从上面的流程当中,你会发现 NIS client 还是会先针对本机的帐号资料进行查询,若本机查不到时才到 NIS server 上头寻找。因此,如果你的 NIS client 本身就有很多一般使用者的帐号时,那跟 NIS server 所提供的帐号就可能产生一定程度的差异!所以,一般来说,在这样的环境下,NIS client 仅会保留系统所需要的 root 及系统帐号而已。
服务器端配置:
由于 NIS 服务器需要使用 RPC 协议,且 NIS 服务器同时也可以当成用户端,因此它需要的软体就有底下这几个:
yp-tools :提供 NIS 相关的查寻指令功能 ypbind :提供 NIS Client 端的设定软件 ypserv :提供 NIS Server 端的设定软件 rpcbind :就是 RPC 需要的资料
在 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 用户端有关,主要在让用户修改服务器上的密码。
案例:
NIS 的域名 lansgg
NIS server 的 IP 为 192.168.182.132 ,主机名 www.server.lansgg.com
NIS client 的 IP 为 192.168.182.133,主机名 www.client.lansgg.com
安装服务端:
[root@Server lansgg]# yum install yp-tools ypbind ypserv rpcbind -y
设定NIS域名(NIS domain name)
[root@Server lansgg]# vim /etc/sysconfig/network NISDOMAIN=lansgg #新增,NIS域名 YPSERV_ARGS="-p 1001" #新增,启动ypserv服务的端口
设置主配置文件 /etc/ypserv.conf
[root@Server lansgg]# vim /etc/ypserv.conf dns: no # NIS 服务器大多使用于内部局域网络,只要有 /etc/hosts 即可,不用 DNS 啦,我们在这里使用hosts files: 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域名] :例如本案例中的 lansgg # [可用数据库名称]:就是由 NIS 制作出来的数据库名称; # [安全限制] :包括没有限制 (none)、仅能使用 <1024 (port) 及拒绝 (deny) # 一般来说,你可以依照我们的网域来设定成为底下的模样: 127.0.0.0/255.255.255.0 : * : * : none 192.168.182.0/255.255.255.0 : * : * : none * : * : * : deny # 星号 (*) 代表任何数据都接受的意思。上面三行的意思是,开放 lo 内部接口、 # 开放内部 LAN 网域,且杜绝所有其他来源的 NIS 要求的意思。 # 还有一个简单作法,你可以先将上面三行批注,然后加入底下这一行即可: * : * : * : none
设置hosts
[root@Server lansgg]# vim /etc/hosts 192.168.182.132 www.server.lansgg.com 192.168.182.133 www.client.lansgg.com
设置相关服务服务
[root@Server lansgg]# vim /etc/sysconfig/yppasswdd YPPASSWDD_ARGS="--port 1002" #yppasswdd服务的端口
启动相关服务
设置测试帐号并创建数据库
[root@Server lansgg]# echo 123 |passwd --stdin testuser1
[root@Server lansgg]# useradd testuser1 [root@Server lansgg]# useradd testuser2 [root@Server lansgg]# useradd testuser3 [root@Server lansgg]# echo 123 |passwd --stdin testuser1 [root@Server lansgg]# echo 123 |passwd --stdin testuser2 [root@Server lansgg]# echo 123 |passwd --stdin testuser3 [root@Server lansgg]# /usr/lib/yp/ypinit -m
PS:如果你的用户密码有变动过,那么你就得要重新制作数据库,重新启动 ypserv 及 yppasswdd;
NIS client设置
[root@centos ~]# yum install ypbind yp-tools -y
yp-tools 是提供查询的软体,ypbind 是 ypserv 沟通桥梁 另外,在 CentOS 当中我们还有很多设定档是与认证有关的,包含 ypbind 的设定档时, 在设定 NIS client 你可能需要动到底下的档案:
/etc/sysconfig/network:就是 NIS 的域名
/etc/hosts:至少需要有各个 NIS 服务器的 IP 与主机名对应;
/etc/yp.conf:这个则是 ypbind 的主要设定档,里面主要设定 NIS 服务器
/etc/sysconfig/authconfig:规范帐号登入时的允许认证机制;
/etc/pam.d/system-auth :这个最容易忘记!因�檎屎磐ǔS� 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 :同上,但是是更改一些使用者的讯息
如果一个个修改上面的配置文件太麻烦了;这里我们使用他的图形化工具:执行setup
当然首先配置hosts
[root@centos ~]# vim /etc/hosts 192.168.182.132 www.server.lansgg.com
我们看看执行完这个都修改了那些文件
总的来说:
/etc/sysconfig/network (加入 NISDOMAIN 项目) /etc/nsswitch.conf (修改许多主机验证功能的顺序) /etc/sysconfig/authconfig (主机 的认证机制) /etc/pam.d/system-auth (许多登入所需要的 PAM 认证过程) /etc/yp.conf (ypbind 的设定档)
NIS client 端的检验: yptest, ypwhich, ypcat
利用 yptest 检验资料库
[root@centos ~]# yptest #下面是输出的信息 Test 1: domainname Configured domainname is "lansgg" Test 2: ypbind Used NIS server: www.server.lansgg.com Test 3: yp_match WARNING: No such key in map (Map passwd.byname, key nobody) #此处的warning可以忽略;因为早期的 nobody 之 UID 都设定在 65534 ,但 现在将 nobody 设定为系统帐号的 99 ,所以不会被记录,也就出现这一个警告。 Test 4: yp_first testuser1 testuser1:$6$hCf0HKoZ$G/SwK1ecB8oDpwcQNDmMMulDP3FNef13WMwB.AdAMFLNo1FAZQ0DRzhIyA2M5OThWzeB2OZyCIVcZm7XC5Qxp0:501:501::/home/testuser1:/bin/bash Test 5: yp_next leo leo:$6$TCro9XvftUiuBuRK$U7OpDgBACvZdI2YS1IPYsBzi6KZjSfp1S5bpQ2PSGpJADlygN03i.XKsbDy7Vm24KsPIKienMA/y6U.fG.Bjp1:500:500:leo:/home/leo:/bin/bash testuser3 testuser3:$6$JcJY9UZF$b8KRXlgMhCKK6k.QSK6t.FcBoU7FETHAkLggMOC3oScq/n.7FHm5pVdFfaXj8UvUo5fBLFJKzR7DNNN071RmW.:503:503::/home/testuser3:/bin/bash testuser2 testuser2:$6$jOAUXAIi$DoDRVX1YVB0MMCfHGpvaE3mgLzmWUs6QP/Fh0Dic7ppc9j9OhXLjlBuAgHfqplO7PiqAQKoyM9JKMY0WXhE4M0:502:502::/home/testuser2:/bin/bash Test 6: yp_master www.server.lansgg.com Test 7: yp_order 1374645119 Test 8: yp_maplist mail.aliases netid.byname services.byservicename hosts.byname passwd.byuid hosts.byaddr rpc.byname group.bygid passwd.byname group.byname services.byname ypservers protocols.byname rpc.bynumber protocols.bynumber Test 9: yp_all testuser1 testuser1:$6$hCf0HKoZ$G/SwK1ecB8oDpwcQNDmMMulDP3FNef13WMwB.AdAMFLNo1FAZQ0DRzhIyA2M5OThWzeB2OZyCIVcZm7XC5Qxp0:501:501::/home/testuser1:/bin/bash leo leo:$6$TCro9XvftUiuBuRK$U7OpDgBACvZdI2YS1IPYsBzi6KZjSfp1S5bpQ2PSGpJADlygN03i.XKsbDy7Vm24KsPIKienMA/y6U.fG.Bjp1:500:500:leo:/home/leo:/bin/bash testuser3 testuser3:$6$JcJY9UZF$b8KRXlgMhCKK6k.QSK6t.FcBoU7FETHAkLggMOC3oScq/n.7FHm5pVdFfaXj8UvUo5fBLFJKzR7DNNN071RmW.:503:503::/home/testuser3:/bin/bash testuser2 testuser2:$6$jOAUXAIi$DoDRVX1YVB0MMCfHGpvaE3mgLzmWUs6QP/Fh0Dic7ppc9j9OhXLjlBuAgHfqplO7PiqAQKoyM9JKMY0WXhE4M0:502:502::/home/testuser2:/bin/bash #此处为重点:yp_all 必须要有列出你 NIS server 上头的所有帐号资讯,如果有出现帐号相关资料的话,那�N应该就算验证成功了! 1 tests failed
利用 ypwhich 检验资料库数量
由上面我们可以很清楚的就看到相关的档案啦!这些资料库档案则是放置在我的 NIS Server 的 /var/yp/lansgg/下面
利用 ypcat 读取资料库内容
除了 yptest 之外,你还可以直接利用 ypcat 读取资料库的内容;一般作法是这样
[root@www ~]# ypcat [-h nisserver] [资料库名称] 选项与参数: -h nisserver :如果有设定的话,指向某一部特定的 NIS 服务器, 如果没有指定的话,就以 ypbind 之设定�橹鳎� 资料库名称:亦即在 /var/yp/vbirdnis/ 内的档名啊!例如 passwd.byname # 读出 passwd.byname 的资料库内容 [root@www ~]# ypcat passwd.byname testuser1:$6$hCf0HKoZ$G/SwK1ecB8oDpwcQNDmMMulDP3FNef13WMwB.AdAMFLNo1FAZQ0DRzhIyA2M5OThWzeB2OZyCIVcZm7XC5Qxp0:501:501::/home/testuser1:/bin/bash testuser3:$6$JcJY9UZF$b8KRXlgMhCKK6k.QSK6t.FcBoU7FETHAkLggMOC3oScq/n.7FHm5pVdFfaXj8UvUo5fBLFJKzR7DNNN071RmW.:503:503::/home/testuser3:/bin/bash testuser2:$6$jOAUXAIi$DoDRVX1YVB0MMCfHGpvaE3mgLzmWUs6QP/Fh0Dic7ppc9j9OhXLjlBuAgHfqplO7PiqAQKoyM9JKMY0WXhE4M0:502:502::/home/testuser2:/bin/bash
使用者参数修改: yppasswd, ypchfn, ypchsh (这里不在演示)
yppasswd :与 passwd 指令相同功能;
ypchfn :与 chfn 相同功能;
ypchsh :与 chsh 相同功能。
下面开始测试:
在client端su到testuser1;原来我们本地是没有该账户的;
[root@www ~]# su - testuser1 su: 警告:无法切换到目录/home/testuser1: 没有那个文件或目录
可以发现切换成功,可是提示没有家目录;
因为 testuser1 的家目录是在服务器端的 /home ,而你在用户端登入时, 在用户端的 /home 底下根本不可能有 testuser1 的家目录嘛!那怎办?很简单,将服务器端的 /home 挂载到用户端上面即可啊!
案例2;
1、创建三个用户u1、u2、u3,他们的家目录都是/uhome(与本地用户的家目录分开)
2、NFS 服务器:分享了 /uhome 给 192.168.182.0/24 这个网域,且预计将所有程序放置于 /uuse 目录中。 此外,假设所有用户端都是很干净的系统,因此不需要压缩用户端 root 的身份。
[root@Server ~]# mkdir /uhome [root@Server ~]# useradd -u 1001 -d /uhome/u1 u1 [root@Server ~]# useradd -u 1002 -d /uhome/u2 u2 [root@Server ~]# useradd -u 1003 -d /uhome/u3 u3 [root@Server ~]# echo 123 |passwd --stdin u1 [root@Server ~]# echo 123 |passwd --stdin u2 [root@Server ~]# echo 123 |passwd --stdin u3
启动服务
[root@Server ~]# /etc/init.d/ypserv restart [root@Server ~]# /etc/init.d/yppasswdd restart [root@Server ~]# /usr/lib/yp/ypinit -m
nfs设置
[root@Server ~]# mkdir /uuse [root@Server ~]# vim /etc/exports /uhome 192.168.182.0/24(rw,no_root_squash) /uuse 192.168.182.0/24(rw,no_root_squash)
client设置
[root@www ~]# mkdir /uhome /uuse [root@www ~]# mount -t nfs 192.168.182.132:/uhome /uhome [root@www ~]# mount -t nfs 192.168.182.132:/uuse /uuse #以上正确,可以写入fstab 或rc.local
现在你去su - u1发现不再提示没有家目录了;
到此yp黄页服务完毕;