Linux【5】-用户管理3-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

更新NIS账户和资料库

在 server 端(master)新增账号或者删除账号或者修改账号信息后,就得要重新制作数据库,make -C /var/yp

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

三、设置数据时间同步(修改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

其他报错

  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

参考资料:

http://blog.51cto.com/litclive/726089

http://blog.csdn.net/younger_china/article/details/53130780

https://www.freebsd.org/doc/zh_CN/books/handbook/network-nis.html

个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学