本文系统: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 服务器同时也可以当成用户端,因此它需要的软体就有底下这几个:
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服务的端口
|
启动相关服务
设置测试帐号并创建数据库
[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
|
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
|
我们看看执行完这个都修改了那些文件
总的来说:
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 检验资料库数量
由上面我们可以很清楚的就看到相关的档案啦!这些资料库档案则是放置在我的 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)
|
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