Linux进阶学习笔记之——账号管理:NIS服务器

账号管理:NIS服务器

1、NIS的主要功能:管理账号信息

如果设计一台专门负责管理账号与密码的服务器,而其他的Linux主机当有客户端要登录的需求时,就必须要到这台管理密码的服务器来查询用户的账号密码,如此一来,要管理的所有的Linux主机账号与密码,只要到那台主机服务器上面去设置即可。

NIS服务器提供的数据:

服务器端文件名文件内容
/etc/passwd提供用户账号、UID、GID、用户主目录位置、Shell等
/etc/group提供组数据以及GID的对应,还有该组的成员用户
/etc/hosts主机名与IP的对应,常用于private IP的主机名对应
/etc/services每一种服务(daemons)所对应的端口
/etc/protocols基础的TCP/IP数据包协议,如:TCP/UDP/ICMP等
/etc/rpc每种RPC服务器所对应的程序号码
/etc/yp/ypserversNIS服务器所提供的数据库

1.1、NIS的工作流程:通过RPC服务

NIS服务器必须将上述表格中的文件制作成数据库文件,然后使用网路协议让客户端来查询。

在大型环境中,NIS服务器可以使用Master/Slave(主控/辅助服务器)架构。Master NIS服务器提供系统管理者制作的数据库文件,Slave则复制来自Master的数据,进而向其他客户提供查询。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nuKZ5YK6-1595476071560)(E:\学习笔记\Linux\Linux学习\NIS服务器MS架构.png)]

当用户有登录需求时,整个NIS的运作过程如下:

  • 关于NIS Server(Master/Slave)的工作流程:
    1. NIS Server先将本身的账号密码相关文件制作成数据库文件;
    2. NIS Master可以主动告知NIS Slave Server进行更新;
    3. NIS Slave也可主动前往NIS Master Server取得更新后的数据库文件;
    4. 若出现账号密码的变动时,需要重新制作datadase并重新同步Master/Slave。
  • 关于NIS Client有任何登录查询的需求时
    1. NIS Client若有登录 需求时,先会查询其本机的/etc/passwd、/etc/shadow等文件;
    2. 若在NIS Client本机找不到相关文件的账号密码时,才向整个NIS网络的主机广播查询;
    3. 每台NIS Server(不论Master/Slave)都可以响应,基本上是“先响应者优先”

一般来说,NIS Client和NIS Server会主动拿掉自己本机的普通用户账号,仅保留系统所需要的root及系统账号

根据上述流程可知,NIS环境大致上需要设置的基本组件如下:

  • NIS Master Server:将文件转换为数据库,并提供Slave Server来更新;
  • NIS Slave Server:以Master Server的数据库作为本身的数据库来源;
  • NIS Client:向Master/Server请求进行登录用户身份验证。

2、NIS Server端的设置

2.1、所需要的软件

NIS服务器需要使用RPC协议,且NIS服务器同时也可以被当成客户端,因此它需要的软件如下:

软件功能
yp-tools提供NIS相关的查询命令功能
ypbind提供NIS Client端的设置软件
ypserv提供NIS Server端的设置软件
rpcbindRPC必备的软件
[root@server ~]# yum install yp ypserv -y

2.2、NIS服务器相关的配置文件

主要的配置文件:

配置文件说明
/etc/ypserv.conf最主要的ypserv软件所提供的配置文件,可以定义NIS客户端是否可登录的权限
/etc/hosts每一台主机名与IP都要被记录
/etc/sysconfig/network在这个文件内指定NIS的网络
/var/yp/Makefile与建立数据库有关的操作控制文件

至于NIS服务器提供的主要服务有以下两个:

NIS服务器提供的主要服务功能
/usr/sbin/ypserv就是NIS服务器主要提供的服务
/usr/sbin/rpc.yppasswadd提供额外的NIS客户端的用户密码修改服务,通过这个服务。NIS可以直接修改NIS服务器上的密码。相关程序则是yppasswd命令

与账号密码的数据库有关的命令:

与账号密码的数据库有关的命令说明
/usr/lib64/yp/ypinit建立数据库的命令
/usr/bin/yppasswd与NIS客户端有关,主要让用户修改服务器上的密码

2.3、NIS Server端的设置与启动

2.3.1、先设置NIS的域名

NIS会通过域名来分辨不同的账号密码数据,因此必须要在服务器与客户端都指定相同的NIS域名才行。直接编辑/etc/sysconfig/network即可。

[root@server ~]# vim /etc/sysconfig/network
NISDOMAIN=lan					#设置NIS域名
YPSERV_ARGS="-p 1011"			#设置NIS每次启动都在固定的端口
2.3.2、主要配置文件/etc/ypserv.conf

可以保留默认值即可。也可以修改

[root@server ~]# vim /etc/ypserv.conf
files:30
#默认会有30个数据库被读入内存当中
xfr_check_port: yes
#与Master/Slave有关,将同步更新的数据库比对所使用的端口
#下面是设置限制客户端或Slave Server查询的权限,利用冒号分隔成4部分
#[主机名/IP]:[NIS域名]:[可用数据库名称]:[安全权限(none、仅能使用小于1024的端口port、拒接deny)]
2.3.3、设置主机名与IP对应:/etc/hosts

NIS大部分是给局域网内的主机使用,是使用IP进行连接的,所以一定要设置好/etc/hosts里面的主机名与IP的对应,否则会无法成功连接NIS。

[root@server ~]# vim /etc/hosts
10.0.0.155      client.lan
10.0.0.185      server.lan
2.3.4、启动与查看所有相关的服务

启动RPC、ypserv以及yppasswdd。不过,为了让yppasswdd启动在固定的端口,也建议修改一下/etc/sysconfig/yppasswdd。

[root@server ~]# vim /etc/sysconfig/yppasswdd
YPPASSWDD_ARGS="--port 1012"
#主要的NIS服务是ypserv
[root@server ~]# systemctl start ypserv
#如果想要NIS客户端可以修改密码的话,需要启动yppasswdd
[root@server ~]# systemctl start yppasswdd
#启动完成后,可以利用rpcinfo来检查
[root@server ~]# 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   1011  ypserv
    100004    1   udp   1011  ypserv
    100004    2   tcp   1011  ypserv
    100004    1   tcp   1011  ypserv
    100009    1   udp   1012  yppasswdd
#要看到“就绪并等待服务”才是正常的
[root@server ~]# rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
[root@server ~]# systemctl enable ypserv
[root@server ~]# systemctl enable yppasswdd
2.3.5、处理账号并建立数据库

新建一些账号,使用的UID 大于1000。

[root@server ~]# useradd -u 1001 nisuser1
[root@server ~]# useradd -u 1002 nisuser2
[root@server ~]# useradd -u 1003 nisuser3
[root@server ~]# echo password | passwd --stdin nisuser1
更改用户 nisuser1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# echo password | passwd --stdin nisuser2
更改用户 nisuser2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# echo password | passwd --stdin nisuser3
更改用户 nisuser3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# useradd -u 1005 li
[root@server ~]# echo 19960518 | passwd --stdin li
更改用户 li 的密码 。
passwd:所有的身份验证令牌已经成功更新。

接下来将主机上的账号文件转成数据库文件,转换的操作直接使用/usr/lib64/yp/ypinit这个命令操作即可:

[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.lan 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.lan		<==自动获取,务必可以在/etc/hosts中找到对应的IP
        next host to add:					<==按下[ctrl]-d
The current list of NIS servers looks like this:

server.lan

Is this correct?  [y/n: y]  y
We need a few minutes to build the databases...
Building /var/yp/lan/ypservers...
Running /var/yp/Makefile...
gmake[1]: 进入目录“/var/yp/lan”
Updating passwd.byname...
Updating passwd.byuid...
...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: 离开目录“/var/yp/lan”

server.lan has been set up as a NIS master server.

Now you can run ypinit -s server.lan on all slave server.

发生错误时可能的解决方法:

  • 缺少文件,缺少什么就用touch创建什么
  • ypserv没有顺利启动,请利用rpcinfo检查
  • 主机名与IP没有对应好,请到/etc/hosts编辑

注意:如果用户密码发生过变化,那么就需要重新制作数据库,重新启动ypserv及yppasswdd

2.3.6、防火墙设置

添加之前文件中设置的端口。


3、NIS Client端的设置

最好让NIS Client只有系统账号,因为在登录时先会查找本地的账号。

3.1、NIS Client所需要的软件与软件结构

NIS Client端所需要的软件仅有:

  • ypbind
  • yp-tools

配置NIS Client可能需要的文件:

配置NIS Client可能需要的文件说明
/etc/sysconfig/network就是NIS域名
/etc/hosts主机名与IP的对应
/etc/yp.conf主要NIS的配置文件,里边主要规范NIS服务器
/etc/sysconfig/authconfig规范账号密码登录时的允许认证机制
/etc/pam.d/system-auth因为账号通常由PAM管理,所以必须在PAM模块内加入NIS 支持才行
/etc/nsswitch.conf规范账号密码与相关信息的查询顺序,默认是先找/etc/passed再找NIS数据库

NIS Client主要的命令:

NIS Client主要的命令功能
/usr/bin/yppasswd更改你在NIS Server中的数据库中的密码
/usr/bin/ypchsh更改shell
/usr/bin/ypchfn更改一些用户的信息

3.2、NIS Client的设置与启动

[root@client ~]# yum install ypbind yp-tools -y
[root@client ~]# yum install setuptool ntsysv system-config-securitylevel-tui system-config-network-tui system-config-keyboard
[root@client ~]# setup

认证配置中选择"使用NIS":

在这里插入图片描述

NIS设置:

在这里插入图片描述

如果很快跳回到setup的初始界面,说明配置理论上是没有问题的。

[root@client ~]# cat /etc/sysconfig/network
NISDOMAIN=lan				<==主动建立它
[root@client ~]# cat /etc/yp.conf
...
domain lan server 10.0.0.185			<==主动建立它
[root@client ~]# cat /etc/nsswitch.conf
...
passwd:     files nis sss
shadow:     files nis sss
group:      files nis sss
#initgroups: files sss

#hosts:     db files nisplus nis dns
hosts:      files nis dns myhostname
...
#其中passwd、shadow、group和hosts比较重要,后面都有参数nis,说明nis已经被支持了

如果使用手动修改文件的话,下面的文件需要修改:

要修改的文件说明
/etc/sysconfig/network加入NISDOMAIN项目
/etc/nsswitch.conf修改许多主机验证功能的顺序
/etc/sysconfig/authconfig认证机制
/etc/pam.d/system-auth许多登录所需要的PAM认证过程
/etc/yp.confypbind的配置文件

3.3、NIS Client端的验证:yptest、ypwhich、ypcat

一个很简单的验证就是利用id这个命令直接检查NIS Server里有的但Client没有的账户。

[root@client ~]# id li
uid=1005(li) gid=1005(li)=1005(li)
3.3.1、利用yptest验证数据库
[root@client ~]# yptest
Test 1: domainname
Configured domainname is "lan"

Test 2: ypbind
Used NIS server: server.lan

Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody)

Test 4: yp_first
li li:$6$2du5wYa6$NV/Gbt4CzFr.9bzlUvPkA85YfkXLI6i75HCYDNPmt6TZEAFuKMcdnKCFNZ0pNn1H26cGbeTXMXgfYBl4vxSME/:1005:1005::/home/li:/bin/bash
...
Test 9: yp_all
li li:$6$2du5wYa6$NV/Gbt4CzFr.9bzlUvPkA85YfkXLI6i75HCYDNPmt6TZEAFuKMcdnKCFNZ0pNn1H26cGbeTXMXgfYBl4vxSME/:1005:1005::/home/li:/bin/bash
nisuser1 nisuser1:$6$lRwdkCTI$qp5LMl2Qt/tpcsmaPBX9ucvuCMOyOalqL0rVSetnxLfwDxifH/X945cGSDn7PJhIE3XJ3rG2vrG6CtKZMRFzj/:1001:1001::/home/nisuser1:/bin/bash
nisuser2 nisuser2:$6$bdqO118E$mCEm.Cmey6tS3txcBJjXSeLk/ZZARTdty0J9tf8cvqIiUn/5If1KlYRv1pNnfkP6YTnnkJxWLcWtVnAwbY05J.:1002:1002::/home/nisuser2:/bin/bash
nisuser3 nisuser3:$6$4AFhdeS0$SkmgC8mpqk/bX191yK/wefxua4jfd1tqWn/l/mvZvMyuYKVh61K/xZ7VfCWSt8NEU3yY0jtmEhnpyEcLEvSy00:1003:1003::/home/nisuser3:/bin/bash
#重点在Test 9: yp_all,要列出NIS Server上所有的账户信息
3.3.2、ypwhich检查数据库数量
[root@client ~]# ypwhich
server.lan
[root@client ~]# 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"

这些数据放置在NIS Server的/var/yp/lan/*里边。

3.3.3、利用ypcat读取数据库内容
[root@client ~]# ypcat [-h nisserver] [数据库名称]
选项与参数:
-h nisserver:如果已经指定好的话,指向一个特定的NIS服务器,
			  如果没有指定好的话,就以ypbind的设置为主。
数据库名称:就是在/var/yp/lan/下的文件名

[root@client ~]# ypcat passwd.byname
li:$6$2du5wYa6$NV/Gbt4CzFr.9bzlUvPkA85YfkXLI6i75HCYDNPmt6TZEAFuKMcdnKCFNZ0pNn1H26cGbeTXMXgfYBl4vxSME/:1005:1005::/home/li:/bin/bash
nisuser1:$6$lRwdkCTI$qp5LMl2Qt/tpcsmaPBX9ucvuCMOyOalqL0rVSetnxLfwDxifH/X945cGSDn7PJhIE3XJ3rG2vrG6CtKZMRFzj/:1001:1001::/home/nisuser1:/bin/bash
nisuser2:$6$bdqO118E$mCEm.Cmey6tS3txcBJjXSeLk/ZZARTdty0J9tf8cvqIiUn/5If1KlYRv1pNnfkP6YTnnkJxWLcWtVnAwbY05J.:1002:1002::/home/nisuser2:/bin/bash
nisuser3:$6$4AFhdeS0$SkmgC8mpqk/bX191yK/wefxua4jfd1tqWn/l/mvZvMyuYKVh61K/xZ7VfCWSt8NEU3yY0jtmEhnpyEcLEvSy00:1003:1003::/home/nisuser3:/bin/bash
3.4、用户参数修改:yppasswd、ypchfn、ypchsh
[root@client ~]# ^C
[root@client ~]# su - nisuser1
su: 警告:无法更改到 /home/nisuser1 目录: 没有那个文件或目录
-bash-4.2$ id
uid=1001(nisuser1) gid=1001(nisuser1)=1001(nisuser1) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
-bash-4.2$
#因为Client只有账户信息,没有主目录,所以才会出现警告信息,因此要用id命令验证,现在的身份确实是nisuser1
-bash-4.2$ yppasswd			<==修改密码
Changing NIS account information for nisuser1 on server.lan.
Please enter old password:				<==输入旧密码
Changing NIS password for nisuser1 on server.lan.
Please enter new password:					<==输入新密码
Please retype new password:
The NIS password has been changed on server.lan.
-bash-4.2$ exit
登出

可以回到NIS服务器端看看修改了数据库了吗?

[root@server ~]# ll /var/yp/lan/
总用量 3152
-rw-------. 1 root root 135680 7月  20 17:59 group.bygid
-rw-------. 1 root root 135680 7月  20 17:59 group.byname
-rw-------. 1 root root 136192 7月  20 17:59 hosts.byaddr
-rw-------. 1 root root 136448 7月  20 17:59 hosts.byname
-rw-------. 1 root root 136960 7月  20 17:59 mail.aliases
-rw-------. 1 root root 136448 7月  20 17:59 netid.byname
-rw-------. 1 root root 136448 7月  21 09:20 passwd.byname
-rw-------. 1 root root 136448 7月  21 09:20 passwd.byuid
#这两个文件被修改过,时间不一样了
#再看看日志文件
[root@server ~]# tail -2 /var/log/messages
Jul 21 09:16:34 server su: (to root) root on pts/0
Jul 21 09:20:09 server rpc.yppasswdd[1881]: update nisuser1 (uid=1001) from host 10.0.0.155 successful.

4、NIS搭配NFS的设置在群集计算机上的应用

刚才有一个问题:nisuser1的用户主目录没有在NIS Client的/home上,怎么办呢?很简单,将服务器端的/home挂载到客户端上即可。

什么是集群计算机?

如果将较便宜的个人计算机连接在一起,然后将数值运算的任务分别丢给每一台连接在一起的个人计算机,也可以实现快速运算。但这样做有几个限制,因为每台计算机都需要运算相同的程序,而我们知道运算的数据在内存当中,而程序启动时需要给予一个身份,并且程序读取的程序在每台计算机上面的需要都是相同的。同时,每台计算机都需要支持并行化运算。所以,每天计算机都必须有:

  • 相同的用户账户信息,包括账号、密码、用户主目录等一大堆信息
  • 相同的文件系统,例如/home、/var/spool/mail以及数值程序放置的位置
  • 可以搭配的并行化函数库,常见的有MPICH、PVM等

搭配NFS的设置在群集计算机上的应用

刚才有一个问题:nisuser1的用户主目录没有在NIS Client的/home上,怎么办呢?很简单,将服务器端的/home挂载到客户端上即可。

什么是集群计算机?

如果将较便宜的个人计算机连接在一起,然后将数值运算的任务分别丢给每一台连接在一起的个人计算机,也可以实现快速运算。但这样做有几个限制,因为每台计算机都需要运算相同的程序,而我们知道运算的数据在内存当中,而程序启动时需要给予一个身份,并且程序读取的程序在每台计算机上面的需要都是相同的。同时,每台计算机都需要支持并行化运算。所以,每天计算机都必须有:

  • 相同的用户账户信息,包括账号、密码、用户主目录等一大堆信息
  • 相同的文件系统,例如/home、/var/spool/mail以及数值程序放置的位置
  • 可以搭配的并行化函数库,常见的有MPICH、PVM等

第一个项目可以使用NIS处理,第二个使用NFS处理

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值