linux之NIS服务搭建及案例应用

本文系统: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) 这个玩意儿;

215031290.jpg

从上面的流程当中,你会发现 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服务的端口

启动相关服务

221214624.jpg

设置测试帐号并创建数据库

[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

222314647.jpg

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

224503109.jpg

224505382.jpg

224508116.jpg

224510808.jpg

我们看看执行完这个都修改了那些文件

224904366.jpg

224906652.jpg

总的来说:

/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 检验资料库数量

225606779.jpg

由上面我们可以很清楚的就看到相关的档案啦!这些资料库档案则是放置在我的 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)

232407994.jpg

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黄页服务完毕;

你可能感兴趣的:(YP,NIS,nisdomain,yppasswd)