1. NIS 基本概念
在一个大型的网域中,若是有多部Linux主机,并且须要每台主机都设定相同的账号与密码时,是十分麻烦的。此时,若是可以有一台NIS主控制服务器(master server)来管理该网域中全部主机的账号密码,当其余的主机有用户登陆的需求时,才到这台服务器上请求相关的账号密码等使用者资料,这样一来,若是想要增长、修改、删除用户的资料,只须要到这台服务器上面处理便可,这样就可以大大下降重复设定用户账号密码的步骤,便于管理。NIS(Network Information Services) Server就能够实现这样的功能。NIS早期为Sun Yellow Pages 简称YP 黄页的意思。
2. NIS服务器端组件结构
NIS的组件结构分为配置文件、主要服务以及相关指令。shell
NIS服务器主要提供信息以下表:
/etc/passwd 提供用户账号、 UID、 GID、家目录所在、登陆shell等信息
/etc/group 提供群组信息以及GID的对应,还有该群组成员等信息
/etc/hosts 提供主机名与IP地址的对应关系信息
/etc/services 提供每一种服务( daemons)所对应的端口( port number)信息
/etc/protocols 基础的TCP/IP封包协议,如TCP, UDP, ICMP等
/etc/netgroup 网络群组的定义与使用
/etc/rpc RPC服务器信息
NIS服务器端的配置文件以下表所示:
/etc/ypserv.conf 关键配置文件,规范NIS客户端登陆权限等
/etc/hosts 在其中配置IP地址与主机名对应关系
/etc/sysconfig/network 指定NIS的域名名称(nisdomainname)
/var/yp/Makefile 帐号数据转换为数据库文件。
/etc/netgroup 设定信任主机组数据库
/etc/sysconfig/yppasswdd 设置 如:端口YPPASSWDD_ARGS="-p 1002"vim
NIS服务器端的主要服务以下表所示:
/usr/sbin/ypserv NIS服务器提供的主要服务
/usr/sbin/rpc.ypxfrd 用来做为master/slave主机之间传输资料库的服务
/usr/sbin/rpc.yppasswdd 经过此服务,NIS客户端登陆的用户能够直接修改在NIS服务器上的密码(跟服务器上的帐号密码不同是能够的,二者没有关联。)
/var/yp/Makefile 与创建资料库有关的配置文件centos
NIS服务器端的主要指令以下表所示:
/usr/sbin/yppush master主机将资料库直接送至slave主机的指令
/usr/lib64/yp/ypinit 创建资料库的指令 /usr/lib/yp/ypinit
/usr/lib/yp/ypxfr 传送资料库的指令
/usr/bin/yppasswdd 与NIS客户端有关,主要让用户修改服务器上的密码。
3.NIS客户端组件结构
NIS的组件结构分为配置文件、相关指令。
NIS客户端配置文件以下表所示:
/etc/hosts 主机名与IP地址对应关系
/etc/yp.conf ypbind的主要配置文件,设定NIS Server
/etc/nsswitch.conf 重要的配置文件,设定账号密码等信息
/var/yp/Makefile 与创建资料库有关的配置文件的查询顺序安全
/etc/sysconfig/authconfig:规范账号登入时的容许认证机制;
/etc/pam.d/system-auth :这个最容易忘记!因為账号一般由 PAM 模组所管理, 因此你必需要在 PAM 模组内加入 NIS 的支持才行
NIS客户端的主要指令以下表所示:
/usr/bin/yppasswd 更改客户端登陆用户在NIS服务器上的密码
/usr/bin/ypchsh 更改客户端登陆用户默认登陆shell
/usr/bin/ypchfn 更改客户端登陆用户的finger信息
4.NIS服务器端工做流程
NIS Server包括Master和Slave两类服务器:
Nis Master Server:将文件建成数据库,并提供给Slave Server来更新;
Nis Slave Server:以Master Server的数据库做为自己的数据库来源;
流程以下:
1.Nis Master先将账号密码相关文件制做成数据库文件;
2.Nis Master能够主动告诉Nis Slave来更新;
3.Nis Slave亦能够主动前往Nis Master取得更新;
4.如有账号密码变更时,须要从新制做数据库文件并从新同步Master/Slave。
5 NIS Client 登陆查询流程
NIS Client向Master/Slave 请求登录者的验证数据。
流程以下:
1.NIS client 如有登入需求时,会先查询其本机的 /etc/passwd, /etc/shadow 等档案;
2.若在 NIS Client 本机找不到相关的帐号数据,才开始向整个 NIS 网域的主机广播查询;
3.每一个 NIS server (不论 master/slave) 均可以响应,基本上是『先响应者优先』。
6.各个角色应该具有的软件要求
NIS 服务器端须要安装的组件以下:(通常状况下,NIS服务器也要起到客户端的做用,因此客户端软件也要安装)
yp-tools 提供NIS相关的查询指令功能
ypbind NIS Client端的服务进程
ypserv NIS Server端的服务进程
rpcbind 提供RPC服务bash
NIS 客户端须要安装的组件以下:
yp-tools 提供NIS相关的查询指令功能 。
ypbind NIS Client端的服务进程,与服务器互相沟通的软件。
服务器
7.安装软件网络
[root@cnetos68 桌面]# yum install yp-tools ypbind ypserv rpcbind -y
架构
[root@cnetos68 桌面]# yum install ypserv -yapp
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Loading mirror speeds from cached hostfile
解决依赖关系
--> 执行事务检查
---> Package ypserv.x86_64 0:2.19-31.el6 will be 安装
--> 完成依赖关系计算
依赖关系解决
================================================================================
软件包 架构 版本 仓库 大小
================================================================================
正在安装:
ypserv x86_64 2.19-31.el6 c6-media 131 k
事务概要
================================================================================
Install 1 Package(s)
总下载量:131 k
Installed size: 319 k
下载软件包:
运行 rpm_check_debug
执行事务测试
事务测试成功
执行事务
正在安装 : ypserv-2.19-31.el6.x86_64 1/1
Verifying : ypserv-2.19-31.el6.x86_64 1/1
已安装:
ypserv.x86_64 0:2.19-31.el6
完毕!
8.端口设置
因为 NIS 服务器主要是提供用户登入的信息给客户端主机来查询之用,因此, NIS 服务器所提供的数据固然就须要用到传输与读写比较快速的 "数据库" 文件系统, 而 不是传统的纯文本数据。为了要达到这个目的,因此 NIS 服务器就必需要将前面 提到的那些文件制做成为数据库文件, 而后使用网络协议让客户端主机来查询。(所使用的通信协议与前一章的 NFS 相同,都使用远程过程调用 (RPC) 端口为111. 再就是NIS的一些ypseerv yppassswdd 等daemons向RPC清册生成的端口。
[root@cnetos68 桌面]# vim /etc/sysconfig/network YPSERV_ARGS="-p 1001" #新增,启动ypserv服务的端口
[root@cnetos68 桌面]# vim /etc/sysconfig/yppasswdd #(实例中会设置到)
YPPASSWDD_ARGS="--port 1002" #yppasswdd服务的端口
[root@cnetos68 桌面]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100004 2 udp 1001 ypserv
100004 1 udp 1001 ypserv
100004 2 tcp 1001 ypserv
100004 1 tcp 1001 ypserv
100009 1 udp 1002 yppasswdd
9.防火墙设置
iptables -I INPUT 1 -p tcp --dport 111 -j ACCEPT
iptables -I INPUT 1 -p upd --dport 111 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 1001:1002 -j ACCEPT
iptables -I INPUT 1 -p upd--dport 1001:1002 -j ACCEPT
实例操做:
NIS 的域名zzhz
NIS server 的 IP 为 192.168.80.150 ,主机名cnetos68
NIS client 的 IP 为 192.168.80.100,主机名 localhost.localdomain
1.设定NIS域名(NIS domain name)
2.设置主配置文件 /etc/ypserv.conf
3.设置hosts
5.启动服务和开机自动启动
[root@cnetos68 桌面]# /etc/init.d/rpcbind restart 注意 这个先启动
中止 rpcbind: [肯定]
正在启动 rpcbind: [肯定]
[root@cnetos68 桌面]# /etc/init.d/ypserv restart (注意:服务启动前要设置好/etc/sysconfig/network的
NISDOMAIN,不然yppasswdd没法启动)
中止 YP 服务器的服务: [肯定]
设置 NIS 域名 zzhz: [肯定]
启动 YP 服务器的服务: [肯定]
[root@cnetos68 桌面]# /etc/init.d/yppasswdd restart
中止 YP 口令服务: [肯定]
启动 YP 口令服务: [肯定]
[root@cnetos68 桌面]# chkconfig ypserv on
[root@cnetos68 桌面]# chkconfig rpcbind on
[root@cnetos68 桌面]# chkconfig yppasswdd on
[root@cnetos68 桌面]# chkconfig --list | grep yp
ypbind 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
yppasswdd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
ypserv 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
ypxfrd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
6.创建帐号和密码 把帐号和密码的数据转成数据库
[root@cnetos68 桌面]# useradd nisuser
[root@cnetos68 桌面]# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. cnetos68 is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>. 提示安ctrl+D
next host to add: cnetos68
next host to add:
The current list of NIS servers looks like this:
cnetos68
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/zzhz/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/zzhz'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory `/var/yp/zzhz'
cnetos68 has been set up as a NIS master server.
Now you can run ypinit -s cnetos68 on all slave server.
PS:若是你的用户密码有变更过(不是nis用户密码),那么你就得要从新制做数据库,从新启动 ypserv 及 yppasswdd;
7.NIS客户端设置
安装 软件 yum install ypbind yp-tools -y
[root@localhost nfs1]# setup #修改的是/etc/sysconfig/network /etc/nsswitch.conf 等文件
中止 portmap: [肯定]
启动 portmap: [肯定]
关闭 NIS 服务: [肯定]
打开 allow_ypbind 的 SELinux 布尔值
关联到 NIS 域: [肯定]
监听 NIS 域服务器。.
[root@localhost nfs1]# su nisuser
bash-3.2$ whoami
nisuser
bash-3.2$ id nisuser
uid=501(nisuser) gid=501(nisuser) groups=501(nisuser) context=root:system_r:unconfined_t:SystemLow-SystemHigh
通常建议使用setup来调整,若是要手动处理。就要修改下面的文件。
/etc/sysconfig/network (加入 NISDOMAIN 项目)
/etc/nsswitch.conf (修改许多主机验证功能的顺序)
/etc/sysconfig/authconfig (主机 的认证机制)
/etc/pam.d/system-auth (许多登入所须要的 PAM 认证过程)
/etc/yp.conf (ypbind 的设定档)
=================================================================================================================
客户端相碰命令
yptest:验证数据库文件
[root@localhost ~]# yptest
Test 1: domainname
Configured domainname is "zzhz"
Test 2: ypbind
Used NIS server: centos68
Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody) 说明:早期的nobody UID是65534 centos的UID是99. 这时提示找不到nobody.
省略··························
Test 9: yp_all
zzhz zzhz:$6$om6rWtFEIHnbChd7$bc/7Wtas.8nhOMxXdCXIssHziyGHyC.27.IU9NuEvOJk6TuzsD4a8vgCY.yGkPa5/LEwyqpEvESpWDKsupjtJ1:500:500:zjolzzhz:/home/zzhz:/bin/bash
nisuser nisuser:rUNG98oaGJG4s:501:501::/home/nisuser:/bin/bash
nisuser2 nisuser2:YyEavjeg1Ym0Q:502:502::/home/nisuser2:/bin/bash 列出帐号信息
1 tests failed
检查数据库名称和数据库相关文件。
[root@localhost ~]# ypwhich
centos68
[root@localhost ~]# ypwhich -x
Use "ethers" for map "ethers.byname"
Use "aliases" for map "mail.aliases"
Use "services" for map "services.byname"
Use "protocols" for map "protocols.bynumber"
Use "hosts" for map "hosts.byname"
Use "networks" for map "networks.byaddr"
Use "group" for map "group.byname"
Use "passwd" for map "passwd.byname" 数据库的文件在/var/yp/zzhz/*
读取数据库内容
[root@localhost ~]# ypcat passwd.byname
zzhz:$6$om6rWtFEIHnbChd7$bc/7Wtas.8nhOMxXdCXIssHziyGHyC.27.IU9NuEvOJk6TuzsD4a8vgCY.yGkPa5/LEwyqpEvESpWDKsupjtJ1:500:500:zjolzzhz:/home/zzhz:/bin/bash
nisuser:rUNG98oaGJG4s:501:501::/home/nisuser:/bin/bash
nisuser2:YyEavjeg1Ym0Q:502:502::/home/nisuser2:/bin/bash
yppasswd:修改nis帐户 密码: 修改nis帐户密码要注意:服务器的名称不能是IP地址。而且要在客户端上添加host记录。 由于服务器没有DNS作解析。
[root@localhost ~]# su - nisuser
su: warning: cannot change directory to /home/nisuser: 提示没有家目录。
-bash-3.2$
有两种方法。一种是直接建立家目录 。这个方法工做量大。
另外一种是,把服务器帐户的家目录使用NFS功能自动挂载到客户端。参数博客另外一文章说明。