NIS
文章目录
- NIS
- 一、NIS
- 二、简介
- 2.1 NIS的产生
- 2.2 什么是NIS?
- 三、NIS的相关组件
- 3.1 服务端
- 3.1.1 配置文件
- 3.1.2 主要服务
- 3.1.3 数据库相关指令
- 3.2 客户端
- 3.2.1 配置文件
- 3.2.2 主要指令
- 四、NIS环境
- 4.1 NIS所需的软件包
- 4.2 NIS Server (Master/Slave)
- 4.3 NIS Client
- 五、 搭建NIS
一、NIS
二、简介
2.1 NIS的产生
正所谓有需求才会有产品,有问题才会有方法去解决,那么NIS是怎么产生的呢?
在一个大型的网域中,如果有多部Linux主机,而且需要每台主机都设定相同的帐号与密码时,是十分麻烦的。此时,如果能够有一台NIS主控制服务器(master server)来管理该网域中所有主机的帐号密码,当其他的主机有用户登录的需求时,才到这台服务器上请求相关的帐号密码等使用者资料,这样一来,如果想要增加、修改、删除用户的资料,只需要到这台服务器上面处理即可,这样就能够大大降低重复设定用户帐号密码的步骤,便于管理。NIS(Network Information Services) Server就可以实现这样的功能。
2.2 什么是NIS?
网络信息服务(Network Information Service)是集中控制几个系统管理数据库的网络用品。NIS简化了UNIX和LINUX桌面客户的管理工作,客户端利用它可以使用中心服务器的管理文件。桌面系统的用户无需建立他们自己的/etc/passwd,他们只简单的使用维护在NIS服务器的文件即可。用户只需要在nis服务器上面创建,客户端加入nis域,直接可以使用Nis域上的用户来登录客户端。
三、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 服务器所提供的数据库 |
/etc/netgroup | 网络群组的定义与使用 |
3.1 服务端
3.1.1 配置文件
配置文件名 | 文件内容 |
---|---|
/etc/ypserv.conf | 这是最主要的 ypserv 软件所提供的配置文件,可以规范 NIS 客户端是否可登入的权限。 |
/etc/hosts | 由于 NIS server/client 会用到网络主机名与IP的对应,因此这个主机名对应档就显的相当重要!每一部主机名与 IP 都需要记录才行! |
/etc/netgroup | 提供组数据及GID的对应。 |
/etc/sysconfig/network | 可以在这个档案内指定 NIS 的网域 (nisdomainname)。 |
/var/yp/Makefile | 这就是与建立数据库有关的动作配置文件; |
3.1.2 主要服务
主要服务名 | 功能 |
---|---|
/usr/sbin/ypserv | 就是 NIS 服务器的主要提供服务 |
/usr/sbin/rpc.ypxfrd | 用于Master/Slave主机之间的传输数据库的服务。 |
/usr/sbin/rpc.yppasswd | 提供额外的 NIS 客户端之用户密码修改服务, 通过这个服务, NIS 客户端可以直接修改在 NIS 服务器上的密码。相关的使用程序则是 yppasswd 指令;(修改密码时,NIS客户端与NIS服务器端之前通过这个服务来通信) |
3.1.3 数据库相关指令
相关指令位置 | 功能 |
---|---|
/usr/lib64/yp/ypinit | 建立数据库的指令,非常常用 (在 32 位的系统下,文件名则是 /usr/lib/yp/ypinit ); |
/usr/sbin/yppush master | 主机将数据库直接送至 slave 的指令; |
/usr/lib/yp/ypxfr | 传送数据库的指令,在该目录下尚有 ypxfr_1perday, ypxfr_1perhour, ypxfr_2perday 等等。 |
3.2 客户端
3.2.1 配置文件
配置文件名 | 文件内容 |
---|---|
/etc/hosts | 主机名与IP地址对应关系 |
/etc/yp.conf | ypbind的主要配置文件,设定NIS Server |
/etc/nsswitch.conf | 重要的配置文件,设定帐号密码等信息 |
var/yp/Makefile | 与建立资料库有关的配置文件的查询顺序 |
3.2.2 主要指令
相关指令名 | 功能 |
---|---|
/usr/bin/yppasswd | 更改客户端登录用户在NIS服务器上的密码 |
/usr/bin/ypchsh | 更改客户端登录用户默认登录shell |
/usr/bin/ypchfn | 更改客户端登录用户的finger信息 |
四、NIS环境
4.1 NIS所需的软件包
yp-tools :提供 NIS 相关的查寻指令功能
ypbind :提供 NIS Client 端的设定软件
ypserv :提供 NIS Server 端的设定软件
portmap :这是 RPC必须的软件!
什么是RPC?请点这里
相关端口:portmap :111,因为NIS、NFS 都是依赖于portmap服务 6.0/7.0 版本用rpcbind取代portmap服务
相关包:ypserv(NIS服务器必需的),ypbind(NIS客户端必需的,默认已安装),yp-tools(NIS的常用工具,默认已安装)
4.2 NIS Server (Master/Slave)
NIS服务器包括主从服务器两种,从的作用就是备份,即当主服务器出现故障后,从能直接使用
主(Master):将文件建成数据库,并提供给Slave来更新;
从(Slave):以Master的数据库作为本身的数据库来源;
详细:
1. Master先将帐号密码相关文件制作成数据库文件;
2. Master可以主动告诉Slave来更新;
3. Slave亦可以主动前往Master取得更新;
4.若有帐号密码变动时,需要重新制作数据库文件并重新同步Master/Slave。
4.3 NIS Client
**1.NIS client 若有登入需求时,会先查询其本的 /etc/passwd, /etc/shadow 等档案; **
**2.若在 NIS Client 本机找不到相关的账号数据,才开始向整个 NIS 网域的主机广播查询. **
3.每个 NIS server (不论 master/slave) 都可以响应,基本上是『先响应者优先』。
五、 搭建NIS
环境需求:
主机名 | 系统版本 | IP地址 | 安装包 |
---|---|---|---|
server | CentOS 7.6 | 192.168.100.40 | rpcbind ypserv ypbind yp-tools |
client | CentOS 7.6 | 192.168.100.243 | ypbind yp-tools |
服务端:
//关闭防火墙和selinux
[root@server ~]# systemctl stop firewalld.service
[root@server ~]# systemctl disable firewalld.service
[root@server ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@server ~]# setenforce 0
//安装ypserv服务相关的包
[root@server ~]# yum -y install rpcbind ypserv ypbind yp-tools
//建立一个Nis专用用户目录文件夹
[root@server ~]# mkdir /nishome
//建立多个NIS用户,并为其配置密码
[root@server ~]# useradd -d /nishome/user1 user1
[root@server ~]# useradd -d /nishome/user2 user2
[root@server ~]# useradd -d /nishome/user3 user3
[root@server ~]# echo 20021020 | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@server ~]# echo 20021020 | passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.
[root@server ~]# echo 20021020 | passwd --stdin user3
Changing password for user user3.
passwd: all authentication tokens updated successfully.
//标明NIS服务器,并启动ypserv服务
a.编辑/etc/sysconfig/network为NIS服务器指定NIS网域名,,可以不用写www这个主机名,直接声明成二级域名也行。
[root@server ~]# vim /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=server
NISDOMAIN=nisdomain //添加此行信息
b. 使当前主机识别NIS域名 当前生效,重启后不生效; 若要开机自动生效(永久生效),进入这个配置文件(开机就会运行这个配置文件),当然还是需要输入nisdomainname nisdomain来使当前主机识别NIS域名
[root@server ~]# vim /etc/rc.d/rc.local
touch /var/lock/subsys/local
/bin/nisdomainname nisdomain //添加此行信息
[root@server ~]# nisdomainname nisdomain
[root@server ~]# nisdomainname
nisdomain
//将服务器上的用户文件加载成数据库文件(该服务器上的所有用户名都将用作客户端身份认证)
[root@server ~]# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. server 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>.
next host to add: server
next host to add:
The current list of NIS servers looks like this:
server
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/nisdomain/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/nisdomain'
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/nisdomain'
server has been set up as a NIS master server.
Now you can run ypinit -s server on all slave server.
注意,每次添加用户之后,都需要重新生成 n i s 数据库 \textcolor{red}{注意,每次添加用户之后,都需要重新生成nis数据库} 注意,每次添加用户之后,都需要重新生成nis数据库
备注:提示输入NIS服务器主机名,有多个可以输入多个,用快捷键Ctrl+D,按Y确认。
配置完以上命令后在/var/yp下检查有没有生成一个NIS域名命名的目录,这是NIS用户数据库,如果没有则删除该目录下的’”(none)”目录,再重新生成数据库。
客户端:
//关闭防火墙和selinux
[root@client ~]# systemctl stop firewalld.service
[root@client ~]# systemctl disable firewalld.service
[root@client ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@client ~]# setenforce 0
//装包,ypbind(NIS客户端必需的,默认已安装),yp-tools(NIS的常用工具,默认已安装),安装ypbind时,也把yp tools安装了
[root@client ~]# yum -y install ypbind yp-tools
//利用setup进入图形化界面
[root@client ~]# setup
验证配置:
使用NIS:
标明NIS域:
验证测试:
客户端本地并没有user1这个用户,但是id一下却能查询出来uid、gid等信息,这是因为NFS环境下的客户端查询用户的方式是
1.NIS client 若有登入需求时,会先查询其本的 /etc/passwd, /etc/shadow 等档案;
2.若在 NIS Client 本机找不到相关的账号数据,才开始向整个 NIS 网域的主机广播查询.
3.每个 NIS server (不论 master/slave) 都可以响应,基本上是『先响应者优先』。
[root@client ~]# cat /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
yy:x:1001:1001::/home/yy:/bin/bash
zz:x:1002:1002::/home/zz:/bin/bash
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@client ~]# id user1
uid=1016(user1) gid=1017(user1) groups=1017(user1)
客户端切换进NIS域用户,不能正常显示是因为没有服务器的这三个隐藏文件
[root@client ~]# su - user1
su: warning: cannot change directory to /nishome/user1: No such file or directory
-bash-4.2$ whoami
user1
-bash-4.2$
[root@server ~]# cd /nishome/
[root@server nishome]# ll
total 0
drwx------. 3 user1 user1 78 Apr 10 10:25 user1
drwx------. 3 user2 user2 78 Apr 10 10:28 user2
drwx------. 3 user3 user3 78 Apr 10 10:29 user3
[root@server nishome]# cd user1
[root@server user1]# ll
total 0
[root@server user1]# ll -a
total 12
drwx------. 3 user1 user1 78 Apr 10 10:25 .
drwxr-xr-x. 5 root root 45 Apr 10 10:29 ..
-rw-r--r--. 1 user1 user1 18 Oct 31 2018 .bash_logout
-rw-r--r--. 1 user1 user1 193 Oct 31 2018 .bash_profile
-rw-r--r--. 1 user1 user1 231 Oct 31 2018 .bashrc
drwxr-xr-x. 4 user1 user1 39 Apr 3 11:02 .mozilla
解决方案:
使用NFS将服务端的nishome目录共享出去,在客户端将NFS的服务端共享的目录挂载到本地即可,这里我采用自动挂载
- 服务端开启NFS,并共享/nishome目录
- 客户端安装autofs包,使用通配符的方式,将服务端的nishome下的用户都挂载到客户端
服务端的NFS服务的配置
//启动nfs服务
[root@server ~]# systemctl start nfs
[root@server ~]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Fri 2023-04-07 10:06:52 CST; 3 days ago
Main PID: 11097 (code=exited, status=0/SUCCESS)
Tasks: 0
CGroup: /system.slice/nfs-server.service
Apr 07 10:06:52 server systemd[1]: Starting NFS server and services...
Apr 07 10:06:52 server systemd[1]: Started NFS server and services.
//共享nishome目录,所有人只读的权限
[root@server ~]# vim /etc/exports
[root@server ~]# tail -1 /etc/exports
/nishome *(ro)
[root@server ~]# exportfs -rv
exporting *:/nishome
[root@server ~]# showmount -e 192.168.100.40
Export list for 192.168.100.40:
/nishome *
客户端的NFS服务的挂载配置
//安装autofs包
[root@client ~]# yum -y install autofs
[root@client ~]# systemctl start autofs
//在autofs的主配置文件中定义挂载点根目录的子配置文件
[root@client ~]# vim /etc/auto.master
* -fstype=nfs 192.168.100.40:/nishome/& //添加此行内容
//配置子配置文件(挂载点目录,触发目录,即需要的时候自动挂载产生),这里利用通配符的方式,将服务器端对应的用户挂载到客户端的通配符(用户名都是相同的)用户上;重启服务
[root@client ~]# systemctl restart autofs
验证查看:
由于是自动挂载,即需要触发挂载点目录才会生成文件目录,所以没有触发时是没有文件目录的,如下
[root@client ~]# cd /home/
[root@client home]# ll
total 0
drwx------. 5 yy yy 139 Apr 3 14:09 yy
drwx------. 3 zz zz 78 Apr 3 14:05 zz
[root@client home]#
//现在开始触发服务端共享的/nishome目录下的user1目录,权限被拒绝是因为服务端的这个文件对于其他用户是没有执行操作的,注意,这里是目录权限的拒绝,并不是文件系统层的拒绝
[root@client home]# cd user1
-bash: cd: user1: Permission denied
//解决:在服务端更改/nishome目录的权限
[root@server ~]# cd /nishome/
[root@server nishome]# ll
total 0
drwx------. 3 user1 user1 78 Apr 10 10:25 user1
drwx------. 3 user2 user2 78 Apr 10 10:28 user2
drwx------. 3 user3 user3 78 Apr 10 10:29 user3
[root@server nishome]# chmod o+rwx user1
[root@server nishome]# chmod o+rwx user2
[root@server nishome]# chmod o+rwx user3
[root@server nishome]# ll
total 0
drwx---rwx. 3 user1 user1 78 Apr 10 10:25 user1
drwx---rwx. 3 user2 user2 78 Apr 10 10:28 user2
drwx---rwx. 3 user3 user3 78 Apr 10 10:29 user3
//现在去客户端触发挂载点目录,可见是可以成功的,隐藏文件也被共享了过来,现在客户端就可以正常的在本地去切换NIS域中的用户了
[root@client home]# cd user1
[root@client user1]# ll
total 0
[root@client user1]# ll -a
total 12
drwx---rwx. 3 user1 user1 78 Apr 10 10:25 .
drwxr-xr-x. 7 root root 65 Apr 10 11:38 ..
-rw-r--r--. 1 user1 user1 18 Oct 31 2018 .bash_logout
-rw-r--r--. 1 user1 user1 193 Oct 31 2018 .bash_profile
-rw-r--r--. 1 user1 user1 231 Oct 31 2018 .bashrc
drwxr-xr-x. 4 user1 user1 39 Apr 3 11:02 .mozilla
[root@client ~]# su - user1
Last login: Mon Apr 10 11:59:10 CST 2023 on pts/0
78 Apr 10 10:25 .
drwxr-xr-x. 7 root root 65 Apr 10 11:38 …
-rw-r–r–. 1 user1 user1 18 Oct 31 2018 .bash_logout
-rw-r–r–. 1 user1 user1 193 Oct 31 2018 .bash_profile
-rw-r–r–. 1 user1 user1 231 Oct 31 2018 .bashrc
drwxr-xr-x. 4 user1 user1 39 Apr 3 11:02 .mozilla
[root@client ~]# su - user1
Last login: Mon Apr 10 11:59:10 CST 2023 on pts/0