NIS

出自 ArchWiki

本条目或章节需要语言、wiki 语法或风格方面的改进。参阅 Help:Style 以获取参考。

原因: 需要语言改进。(在 Talk:NIS 中讨论)

网络信息服务 (NIS) 是 Sun 开发的一种协议,允许将用户身份验证委托给服务器。服务器软件位于 ypservAUR 软件包中,客户端软件位于 yp-toolsAUR 软件包中。ypbind-mtAUR 也可用,它是客户端守护程序的多线程版本。

NIS 服务器

安装软件包

安装 ypbind-mtAURypservAURyp-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.serviceypbind.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 文件。)

更多资源