# Server和Client设置NIS域名nisdomainname nis_serverecho 'NISDOMAIN=nis_server' >> /etc/sysconfig/network# Server写入ypserv配置文件echo -e '127.0.0.0/255.255.255.0:*:*:none\n192.168.2.0/255.255.255.0:*:*:none\n*:*:*:deny'>> /etc/ypserv.conf# 数据库初始化/usr/lib64/yp/ypinit -m# Server涉及的服务systemctl start rpcbindsystemctl start yppasswddsystemctl start ypserv# Clinet配置authconfig-tui# Client涉及的服务systemctl start rpcbindsystemctl start ypbind
当我们拥有多台Linux服务器时,账号管理就成为一个比较头大的问题了,比如在全部的服务器上新建、删除账户和修改密码,一台一台ssh登录去操作显然不是个好主意,账户同步是个大问题。为此NIS诞生了。
NIS全称Network Information Service,主要功能是对主机账号系统等系统信息提供集中的管理。
NIS有两种角色,Server和Client
Server会将自己的以下文件作成为DBM数据库档案:
当这些文件发生改变时候,需要在Client中生效,要再重新生成DBM数据库。
Client在有用户登录时,会先验证本机保存的用户,如果没有记录,会再向Server搜寻数据库里面数据做为验证用。
一般情况下我们一台Server对应为若干台Client服务,当我们有大量的服务器需要为大量Client服务的时候,一台Server可能从响应的服务质量可能就不是那么美好了的。这个时候我们可以额外配置台Slave作为从服务器。Server和Slave之间会进行数据的同步,从而再为Client提供服务。
不过除非有超过一百台的Linux主机,不然其实一个Server也是没问题的。
Server需要安装的软件有rpcbind、ypserv、yp-tools。ypbind为Client使用的,可以选择性安装。
#rpm系列的linuxsudo yum -y install ypserv yp-tools rpcbindypbind
# 这个方法是只下载,如果你的Server配置过nfs,可以很方便的为Clinent服务器安装吧哈哈
# yumdownloader --resolve --destdir=/root/yum ypserv ypbind yp-tools rpcbind
# deb系列的linux
sudo apt -y install nis
直接用nisdomainname命令来设置
# 后面nisdomainname+域名,设置域名[root@server_197 ~]# nisdomainname nis_server# 单纯nisdomainname为返回当前域名[root@server_197 ~]# nisdomainname
系统重新启动后也生效需要/etc/sysconfig/network中追加NISDONAIN=<name>
[root@server_197 ~]# echo 'NISDOMAIN=nis_server' >> /etc/sysconfig/network[root@server_197 ~]# cat /etc/sysconfig/network# Created by anacondaNISDOMAIN=nis_server
相关的权限配置文件在/etc/ypserv.conf。可以先看一下里面的内容。
[root@server_197 ~]# cat /etc/ypserv.conf | grep -v '#'files: 30 #这里的代表会读到内存中的数据库数量,一般情况30个是足够xfr_check_port: yes
# 与master/slave 有关,将同步更新的数据库比对所使用的端口,放置于<1024内
# Host(允许的主机或者ip) : Domain(NIS域): Map(可用的数据库名字) : Security(安全限制)
* : * : shadow.byname : port* : * : passwd.adjunct.byname : port
重点介绍一下后面查询的权限格式,使用冒号隔成四部分:
Host:Domain:Map:Security
# Host : Domain : Map : Security## * : * : passwd.byname : port# * : * : passwd.byuid : port# Not everybody should see the shadow passwords, not secure, since# under MSDOG everbody is root and can access ports < 1024 !!!* : * : shadow.byname : port* : * : passwd.adjunct.byname : port
依据具体情况我们可以这样写。
# 本机可以访问全部domain、map(数据库)、none(没有限制)127.0.0.0/255.255.255.0 :* :* :none# 192.168.2.0/24可以访问全部domain、map(数据库)、none(没有限制)192.168.2.0/255.255.255.0 :* :* :none# 其他ip全部deny(拒绝),和防火墙规则,这条规则是至关重要的,相当于是默认规则吧* :* :* :deny
偷懒就echo加上去吧哈哈。
echo -e '127.0.0.0/255.255.255.0:*:*:none\n192.168.2.0/255.255.255.0:*:*:none\n*:*:*:deny'>> /etc/ypserv.conf
需要启动rpcbind、yppasswd、ypserv,切记,先启动rpcbind。随便来个开机自启动啦
systemctl start rpcbind && systemctl enable rpcbindsystemctl start yppasswdd && systemctl enable yppasswddsystemctl start ypserv && systemctl enable ypserv既然NIS的初衷的共享用户的,在生成数据库之前,先要把新建用户删除用户之类的操作完成,再生成数据库。每一次操作都要重新生成数据库和重新启动服务。
[root@server_197 ~]# adduser -s /bin/bash -g test -d /home/test test2022# 创建个用户随便复习一下adduser# -s 指定shell路径# -g 所在组# -d 设置home目录位置[root@server_197 ~]# passwd test2022Changing password for user test2022.New password:Retype new password:passwd: all authentication tokens updated successfully.
执行/usr/lib64/yp/ypinit -m初始化(如果你安装的软件包是32位,对应的应该是/usr/lib/yp/ypinit -m),其中会等待我们输入next host to add,直接Ctrl+D跳过即可,再y确认

[root@server_197 ~]# /usr/lib64/yp/ypinit -mAt this point, we have to construct a list of the hosts which will run NISservers. server_197 is in the list of NIS server hosts. Please continue to addthe names for the other hosts, one per line. When you are done with thelist, type a <control D>. next host to add: server_197 next host to add:The current list of NIS servers looks like this:server_197Is this correct? [y/n: y] yWe need a few minutes to build the databases...Building /var/yp/nis_server/ypservers...Running /var/yp/Makefile...gmake[1]: Entering directory `/var/yp/nis_server'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/nis_server'server_197 has been set up as a NIS master server.Now you can run ypinit -s server_197 on all slave server.
确保目前的rpcbind、yppasswdd、ypserv服务已经在正常的工作了。没有就systemctl启动一下。
更新后再重新启动一次吧
systemctl start rpcbind systemctl start yppasswdd systemctl start ypserv现在来配置Client。
和Server不相同,不需要安装ypserv。
安装rpcbind、yp-tools、ypbind
# rpmyum -y install ypbind yp-tools rpcbind# 其实我没有在deb上跑过,不太确定是不是apt -y install nis
这里和Server配置一样,domain要一致,否则无法使用。
直接用nisdomainname命令来设置
# 后面nisdomainname+域名,设置域名[root@server_149 ~]# nisdomainname nis_server# 单纯nisdomainname为返回当前域名[root@server_149 ~]# nisdomainname系统重新启动后也生效需要/etc/sysconfig/network中追加NISDONAIN=<name>
[root@server_149 ~]# echo 'NISDOMAIN=nis_server' >> /etc/sysconfig/network[root@server_149 ~]# cat /etc/sysconfig/network# Created by anacondaNISDOMAIN=nis_server
在目录含中输入,可以进入半图形化的设置界面。
authconfig-tui
上下或tab键可以控制光标移动,在NIS位置选择,即按空格。

F12下一页,光标移动到Next选择也可以。
输入一下Domain和Server,即之前设置的nisdomainname和NIS_Server的IP地址。

完成配置后
重新启动一下服务即可。
systemctl start rpcbindsystemctl start ypbind在Client中尝试登录之前的新建的test2022用户
[root@client_149 ~]# su test2022bash: /home/test/.bashrc: Permission deniedbash-4.2$
当然目前要注意HOME目录是Server自己的HOME目录,Client自然是没有啦,可以使用NFS来挂载,具体可以看我主页的另外一篇文章。