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

本文涉及的产品
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
运维安全中心(堡垒机),免费版 6个月
.cn 域名,1个 12个月
简介:

本文系统: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 服务器同时也可以当成用户端,因此它需要的软体就有底下这几个:

1
2
3
4
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

安装服务端:

1
[root@Server lansgg]# yum install yp-tools ypbind ypserv rpcbind -y

设定NIS域名(NIS domain name)

1
2
3
[root@Server lansgg]# vim /etc/sysconfig/network
NISDOMAIN=lansgg               #新增,NIS域名
YPSERV_ARGS= "-p 1001"        #新增,启动ypserv服务的端口

设置主配置文件 /etc/ypserv.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[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

1
2
3
[root@Server lansgg]# vim /etc/hosts
192.168 . 182.132  www.server.lansgg.com
192.168 . 182.133  www.client.lansgg.com

设置相关服务服务

1
2
[root@Server lansgg]# vim /etc/sysconfig/yppasswdd
YPPASSWDD_ARGS= "--port 1002"  #yppasswdd服务的端口

启动相关服务

221214624.jpg

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

[root@Server lansgg]# echo 123 |passwd --stdin testuser1

1
2
3
4
5
6
7
[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设置

1
[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 :这个最容易忘记!因為帐号通常由 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

1
2
[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

总的来说:

1
2
3
4
5
/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 检验资料库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[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 上头的所有帐号资讯,如果有出现帐号相关资料的话,那麼应该就算验证成功了!
1  tests failed

利用 ypwhich 检验资料库数量

225606779.jpg

由上面我们可以很清楚的就看到相关的档案啦!这些资料库档案则是放置在我的 NIS Server 的 /var/yp/lansgg/下面

利用 ypcat 读取资料库内容

除了 yptest 之外,你还可以直接利用 ypcat 读取资料库的内容;一般作法是这样

1
2
3
4
5
6
7
8
9
10
[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;原来我们本地是没有该账户的;

1
2
[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 的身份。

1
2
3
4
5
6
7
[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

启动服务

1
2
3
[root@Server ~]# /etc/init.d/ypserv restart
[root@Server ~]# /etc/init.d/yppasswdd restart
[root@Server ~]# /usr/lib/yp/ypinit -m

nfs设置

1
2
3
4
[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设置

1
2
3
4
[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黄页服务完毕;



本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1289648

相关文章
|
16天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
39 5
linux系统服务二!
|
16天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
37 3
linux系统服务!!!
|
8天前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
26 5
|
20天前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
87 3
|
20天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
64 3
|
23天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
1月前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
25 2
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
69 2
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
459 2
|
2月前
|
Unix Linux 网络安全
python中连接linux好用的模块paramiko(附带案例)
该文章详细介绍了如何使用Python的Paramiko模块来连接Linux服务器,包括安装配置及通过密码或密钥进行身份验证的示例。
83 1