Linux【5】-用户管理6-NIS系统管理
NIS(Network Information Service)网络信息系统,是对主机账号等系统信息提供集中管理的网络服务。
NIS服务器为NIS客户机提供的信息不仅限于用户账号信息,在NIS服务器的数据库中包括以下几类信息:
- 用户账号信息,包括用户名,登录口令和用户宿主目录等信息,用于取代Linux主机中的passwd文件和shadow文件中的作用。
- 组账号信息,包括组账号等,用于取代Linux主机中group文件的作用。
- IP地址与主机名称对应记录的信息,用于取代Linux主机中hosts文件的作用。 为了方便NIS客户机的查询,以上这些信息在NIS服务器中被保存在不同名称的数据库(文件)中进行集中管理。
NIS 服务器的安装 非独立服务都需要xinetd 的管理。
更多原理介绍,参见:http://linux.vbird.org/linux_server/0430nis.php
操作系统;Centos7.4
服务端所需软件:
- ypserv NIS Server端的服务进程
- rpcbind 提供RPC服务
客户端安装如下软件:
- yp-tools 提供NIS相关的查询指令功能(yp-tools和ypbind必须同时安装)
- ypbind NIS Client端的服务进程(yp-tools和ypbind必须同时安装)
一、Master的安装
在Master和Slaves机器上都安装NIS(Network Information Service)软件
# yum install ypserv ypbind
在Master和Slaves机器上修改/etc/sysconfig/network,尾部添加如下两行,使它们具有相同的NIS域名。
NISDOMAIN=testNIS
YPSERV_ARGS="-p 1011"
以上第一行的值可以随意设定,但要求Master和Slaves机器上的该值一致 以上第二行表示NIS启动在1011端口上
在NIS配置文件(master的那台服务器) /etc/ypserv.conf 尾部添加一行来设定Slaves机器的权限
* : * : * : none
以上设置表示所有机器都都有最大权限。虽然限制不严格,但是可以通过iptables防火墙来进行安全控制。
修改 /etc/hosts,将Master和Slaves机器上的配置文件都设置正确
127.0.0.1 localhost
192.168.30.1 control
192.168.30.2 node1
修改 /etc/sysconfig/yppasswdd 配置文件(master和slave都设定),设置开放端口
YPPASSWDD_ARGS="--port 1012"
开放端口1011和1012
firewall-cmd --zone=public --add-port=1011/tcp --add-port=1011/udp --add-port=1012/tcp --add-port=1012/udp --permanent
firewall-cmd --reload
ypserv用于启动NIS服务; yppasswdd用于启动NIS客户端密码修改服务
上述启动方式更改为:
启动服务
systemctl start ypserv
systemctl start rpcbind
systemctl start ypxfrd
systemctl start yppasswdd.service
开机启动:
systemctl enable ypserv
systemctl enable rpcbind
systemctl enable yppasswdd.service
更新数据库
每次在master新增或变更账号以后,都需要将Master机器上账号转换成数据库
# /usr/lib64/yp/ypinit -m
进入交互式界面,直接按control + d结束选择,再按y同意,程序则根据Master机器内的用户来创建数据库。
上一步报错:The local host’s domain name hasn’t been set. Please set it.
因为nisdomain没有设置,解决办法:
nisdomainname shhrpnis
二、在Slaves机器上操作来启动NIS服务
方法一: setup法
# setup
进入交互式界面,选择Authentication configuration, 使用TAB切换并用空格选中Use NIS,使用TAB切换选择Next, 填写正确的NISDomain和NIS服务器的IP,使用TAB切换选择OK,选择退出后Slave机器会开启NIS服务。
报错:
getsebool: SELinux is disabled Job for ypbind.service failed because the control process exited with error code. See “systemctl status ypbind.service” and “journalctl -xe” for details.
解决办法:
1. ypbind 未安装
yum install -y ypserv ypbind
Step-4:设置SELinux为许可状态(修改master和slave主机的文件),运行以下命令:
vi /etc/selinux/config
将上述文件中的
SELINUX=enforcing
替换为
SELINUX=permissive
保存上述文件之后,运行以下命令:
setenforce 0
在Slave机器上成功开启NIS服务后,则可以使用Master机器上的用户名远程登录Slave机器了。若该用户名在Slave机器中存在,则直接用该Slave机器中的用户直接登录;若该用户名在Slave机器中不存在,则会使用NIS服务,使用Master机器中的用户登录,但是该用户没家目录及其配置文件。
# yptest
报错:
Test 2: ypbind
Can't communicate with ypbind
解决办法:
无,换配置方法
方法二(在master,slave服务器上都要操作)
账户信息的读取顺序
[root@node2 nis]# vim /etc/nsswitch.conf
…
passwd: files nis sss
shadow: files nis sss
group: files nis sss
…
hosts: files nis dns
…
配置/etc/yp.conf,最后添加如下两行代码:
domain hikuss server node0
domain hikuss server node1
ypserver node0
ypserver node1
#其中hikuss代表nis域名,node0代表master服务器的Hostname,node1代表slave服务器的HOSNTNAME
设置账号登入认证机制
登入时的允许认证机制
[root@node2 nis]# grep NIS /etc/sysconfig/authconfig
USENIS=yes
设置PAM授权(centos7默认是有Nis,所以没有修改)
# 修改文件/etc/pam.d/system-auth,增加nis
…
password sufficient pam_unix.so md5shadow nis nullok try_first_passuse_authtok
…
启动和开机启动
#启动
systemctl start rpcbind
systemctl start ypbind
#开机启动
systemctl enable ypbind
systemctl enable rpcbind
若需要更多用户用于NIS服务,则在Master机器中新建用户用,重新运行ypinit命令进行初始化即可。
slave服务器拉取数据库
/usr/lib64/yp/ypinit -s master_hostname # master hostname,例如C01
客户端测试(master和slaved都属于客户端)
使用yptest命令检验数据库信息
# yptest
从这个测试当中可能发现一些错误,就是在 Test 3 出现的那个警告信息啦。只是说没有该数据库而已~ 该错误是可以忽略的。
在Test 9中会给出NIS Master机器上的所有账户信息。如果给出信息正常,表示验证成功。
查看NIS domain
[root@node2 nis]# ypwhich
node0
[root@node2 nis]#
使用ypwhich检验数据库文件
# ypwhich -x
可以看到相关文件名,这些文件名存放在 /var/yp/chenlianfuNIS/ 目录下。 使用ypcat读取数据库文件内容
# ypcat passwd.byname
使用yppasswd在Slave机器上修改Master机器上的用户名,其用法和passwd用法一致。
# yppasswd
四、讨论
4.1 设置数据时间同步(修改SLAVE服务器)
利用crontab设置数据同步时间,在/etc/crontab最后添加如下同步命令:
*/5 * * * * /usr/lib64/yp/ypxfr -h node0 passwd.byname
*/5 * * * * /usr/lib64/yp/ypxfr -h node0 passwd.byuid
更改配置文件/usr/lib64/yp/ypxfr_1perday,/usr/lib64/yp/ypxfr_1perhour, /usr/lib64/yp/ypxfr_2perday:
$YPBINDIR/ypxfr $map -h node0
其中node0 为master server的hostname
4.2 更新NIS账户和资料库
在 server 端(master)新增账号或者删除账号或者修改账号信息后,就得要重新制作数据库
make -C /var/yp
make: Entering directory `/var/yp'
gmake[1]: Entering directory `/var/yp/shhrpnis
启动 ypxfrd服务
可以让 slave 服务器主动链接上 ypxfrd 来更新数据库, 可以免除系统管理原自己手动更新。
[root@node0 ~]# systemctl start ypxfrd
设置为自动启动
systemctl enable ypxfrd
五、报错
5.1 报错
-
c01为master,g02,g03为slave。C01能够借用c01的账号进入到g02,但是进入g03的时候,用户名变成了bash
Last failed login: Mon Mar 12 15:08:41 CST 2018 from c01 on ssh:notty There were 2 failed login attempts since the last successful login. Last login: Mon Mar 12 15:04:24 2018 from g02 Could not chdir to home directory /home/sam: No such file or directory Attempting to create directory /home/sam/perl5 mkdir /home/sam: Permission denied at /usr/share/perl5/vendor_perl/local/lib.pm line 269. BEGIN failed–compilation aborted.
解决办法:
在使用CentOS 7的时候,首次登陆会出现新建一个perl5文件夹的提示,删除该文件后,之后登陆还是会出现该提示并新建了perl5文件夹。
,找到不新建此文件夹的办法。只需要将/etc/profile.d/perl-homedir.sh文件中的PERL_HOMEDIR=1改为PERL_HOMEDIR=0即可。
原因是perl会默认为每个用户加载local::lib,如果你不需要则无需加载。而用户登陆时会执行/etc/profile文件,此文件又会执行/etc/profile.d/*.s
5.2 报错
3个节点都可以通过nis登陆,但其中有1个节点不能登陆
解决办法:
authselect select nis
背景资料:
(server slave NIS2):
# ypmatch test passwd
test:x:9124:9124::/home/test:/bin/bash
# getent passwd test
# su - test
su: user test does not exist
# ypcat -h nis passwd.byname | grep test
test:x:9124:9124::/home/test:/bin/bash
# ypcat -h nis2 passwd.byname | grep test
test:x:9124:9124::/home/test:/bin/bash
(server master NIS)
# su - test
[test@nis ~]$ id
uid=9124(test) gid=9124(test) groups=9124(test)
Old 06-18-2020, 06:03 AM
相关的资料:
- https://forums.rockylinux.org/t/ypbind-successful-but-cannot-login-with-nis/3409
- https://www.linuxquestions.org/questions/linux-networking-3/nis-slave-user-test-does-not-exist-4175677210/?__cf_chl_tk=pR3Hb1JpH370MdNE4GEoUvt.HTFzrZn9ZMsI_pDVQ60-1710771541-0.0.1.1-1493
参考资料
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn