NIS
网络信息服务 (NIS) 是 Sun 开发的一种协议,允许将用户身份验证委托给服务器。服务器软件位于 ypservAUR 软件包中,客户端软件位于 yp-toolsAUR 软件包中。ypbind-mtAUR 也可用,它是客户端守护程序的多线程版本。
NIS 服务器
安装软件包
安装 ypbind-mtAUR、ypservAUR 和 yp-toolsAUR 软件包。
配置
/etc/hosts
将您的服务器外部(非 127.0.0.1)IP 地址添加到 hosts 文件。确保它是文件中的第一个非注释行,是的,即使在 localhost 行之上,像这样
/etc/hosts
#<ip-address> <hostname.domain.org> <hostname> #::1 localhost.localdomain localhost 192.168.1.10 nis_server.domain.com nis_server 127.0.0.1 localhost.localdomain localhost nis_server # End of file
这是由于 ypinit 中的一个特性(也许是错误,也许是功能),它将始终将 /etc/hosts
中的第一行添加到 ypservers 列表中。
/etc/nisdomainname
添加域名
/etc/nisdomainname
# NISDOMAINNAME="nis-domain-name"
/etc/ypserv.conf
为您的 nis 客户端将规则添加到 /etc/ypserv.conf
,格式如下
/etc/ypserv.conf
# ip-address-of-client : nis-domain-name : rule : security
例如
/etc/ypserv.conf
# 192.168. : home-domain : * : port
有关更多信息,请参阅 man ypserv.conf
。
/var/yp/Makefile
在 “all” 规则下,添加或删除您希望 NIS 使用的文件到 /var/yp/Makefile
。
默认
# all: passwd group hosts rpc services netid protocols netgrp \ # shadow # publickey networks ethers bootparams printcap mail \ # # amd.home auto.master auto.home auto.local passwd.adjunct \ # # timezone locale netmasks
之后,您必须构建您的 NIS 数据库
# cd /var/yp # make
或者,您可以以更自动化的方式执行此操作
# /usr/lib/yp/ypinit -m
如果您使用这种方式,您可以跳过手动将行添加到 /var/yp/ypservers
。
/var/yp/securenets
将规则添加到 /var/yp/securenets
以限制访问
/var/yp/securenets
# 255.255.0.0 192.168.0.0 # Gives access to anyone in 192.168.0.0/16
务必注释掉此行,因为它会向任何人授予访问权限。
/var/yp/securenets
# 0.0.0.0 0.0.0.0
/var/yp/ypservers
将您的服务器添加到 /var/yp/ypservers
/var/yp/ypservers
# your.nis.server
设置你的域名
# ypdomainname EXAMPLE.COM
现在编辑 /etc/yp.conf
文件并添加您的 ypserver 或 nis 服务器。
/etc/yp.conf
ypserver nis_server
启动 NIS 守护进程
启动/启用 以下 systemd 单元
rpcbind.service
ypbind.service
ypserv.service
yppasswdd.service
(允许客户端使用passwd
更改其密码)
NIS 客户端
安装软件包
第一步是安装您需要的工具。这提供了使用 NIS 所需的配置文件和通用工具。安装 yp-toolsAUR ypbind-mtAUR。
配置
设置你的域名
# ypdomainname EXAMPLE.COM
您可以通过编辑 /etc/nisdomainname
并添加以下内容来永久应用此设置
# NISDOMAINNAME="EXAMPLE.COM"
现在编辑 /etc/yp.conf
文件并添加您的 ypserver 或 nis 服务器。
ypserver nis_server
/etc/hosts
将您的 NIS 服务器添加到 /etc/hosts
可能是个好主意
192.168.1.10 nis_server.domain.com nis_server
启动 NIS 守护进程
启动/启用 rpcbind.service
和 ypbind.service
systemd 单元。
早期测试
要测试到目前为止的设置,您可以运行命令 yptest
# yptest
如果它工作正常,您将看到 NIS 用户数据库的内容(它以与 /etc/passwd
相同的格式打印),以及其他内容。
/etc/nsswitch.conf
要实际使用 NIS 登录,您必须编辑 /etc/nsswitch.conf
。修改 passwd、group 和 shadow 行以读取
passwd: files nis group: files nis shadow: files nis
然后不要忘记 重启 ypbind.service
。
/etc/pam.d/passwd
要允许客户端计算机上的用户更改他们在服务器上的密码,请确保 yppasswdd.service
在服务器上已启动/启用。
在客户端上编辑 /etc/pam.d/passwd
以将 nis
参数添加到 password/pam_unix.so
password required pam_unix.so sha512 shadow nullok nis
有关配置 NIS 客户端的更多信息,请参阅 Linux NIS HOWTO 的第 7 节。
Systemd V235 之后的连接
由于 systemd-logind
上的沙箱,现在拒绝来自和到 systemd-logind
服务的任何 IP 连接。即使 yptest
按预期工作,这也会导致登录失败,并且还可能导致 accounts-daemon
彻底崩溃。基本问题是 systemd
附带的默认 systemd-logind.service
文件指定了 IPAddressDeny=any
,这会阻止它在登录时与 NIS 服务器通信。此外,自 V239 起,该文件还指定了 RestrictAddressFamilies=AF_UNIX AF_NETLINK
,从列表中删除了 AF_INET AF_INET6
。
解决方案是将您的 NIS 服务器的地址或地址范围列入白名单。
另一个与命名空间管理相关的 systemd 沙箱元素 (“ProtectHostname”) 可能会阻止正常运行。以下代码段也关闭了该功能。
为 systemd-logind.service
使用 drop-in unit file,包含以下行(以下允许来自 10.0.*.*
的连接,根据需要编辑)
/etc/systemd/system/systemd-logind.service.d/open_network_interface.conf
[Service] RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 IPAddressAllow=10.0.0.0/16 ProtectHostname=no
systemd-userdbd.service
将 nis 客户端更新到 systemd 245-1 后,systemd-userdbd.service
可能会受到与 systemd-logind.service
类似问题的影响,这可能会导致 25 秒的登录延迟。
为 systemd-userdbd.service
使用 drop-in unit file,其中包含您的 NIS 服务器 IP 地址以纠正此问题。
/etc/systemd/system/systemd-userdbd.service.d/override.conf
[Service] IPAddressAllow=n.n.n.n/32
(或者,可以使用与 systemd-logind.service 相同的 drop-in 文件。)
更多资源
- The Linux NIS HOWTO,非常有帮助,通常适用于 Arch Linux。
- YoLinux NIS 教程
- 快速 HOWTO,配置 NIS