通过 NFS 同步用户

通过 NFS 同步用户

我正在实现一个 Web 服务器,其中的配置和用户文件通过 NFS(Amazon EFS)共享,如下所述: https://serverfault.com/a/933566/81774

作为 Apache 配置的一部分,我使用 mod_mpm_itk 以不同的用户名运行网站。如何在服务器之间同步用户名,而无需将新用户名嵌入 Web 服务器 AMI。

我假设我不能将 /etc/passwd 移动到 NFS,因为如果没有安装 NFS,服务器就无法启动?

根据评论更新:

似乎没有办法用 nsswitch.conf 加载附加文件,只能根据这个答案查询附加服务:https://unix.stackexchange.com/a/210587

附加服务的缺点是会引入额外的故障点。

当服务器启动时从 NFS 复制 /etc/passwd 并使用 pwck 重新读取它是否可行,如此处所述https://unix.stackexchange.com/a/102336

答案1

您可以尝试使用pam_extrausers。它使用单独/etc/passwd样式的用户帐户列表,以补充标准身份验证机制。等效文件为/var/lib/extrausers/passwd/var/lib/extrausers/shadow/var/lib/extrausers/group

每当其某个用户帐户更新时,进行同步会更安全,/etc/passwd并且相关文件将由服务器进行管理。

在 Debian 衍生系统上,包名称是libnss-extrausers

虽然这是一个PAM模块,但配置应用于/etc/nsswitch.conf

passwd:         compat extrausers
group:          compat extrausers
shadow:         compat extrausers

要在这些文件中创建条目,最好在您的主系统上以本地用户身份创建它们(没有任何标准实用程序可以管理这些条目)。然后将这些条目从现有的passwdshadowgroup文件复制到 中的等效文件中/var/lib/extrausers。记得修复 上的权限shadow以匹配系统权限。

grep -E '^(user1|user2|user3):' /etc/passwd >/var/lib/extrausers/passwd
grep -E '^(user1|user2|user3):' /etc/shadow >/var/lib/extrausers/shadow
grep -Ew '(user1|user2|user3)'  /etc/group >/var/lib/extrausers/group

chmod u=rw,go=r   /var/lib/extrausers/passwd /var/lib/extrausers/group
chown root:shadow /var/lib/extrausers/shadow
chmod u=rw,g=r,o= /var/lib/extrausers/shadow

ls -l /var/lib/extrausers
total 12
-rw-r--r--  1 root root     21 Apr 18 15:36 group
-rw-r--r--  1 root root     49 Apr 18 15:37 passwd
-rw-r-----  1 root shadow  123 Apr 18 15:37 shadow

你可以使用你喜欢的任何技术来复制文件。我喜欢rsync使用 root equilibrium:

for rhost in remote1 remote2 remote3 ...
do
    rsync -avR /var/lib/extrausers/* "$rhost":/
done

答案2

如果你不想引入额外的故障点,那么你必须在本地创建用户。这实际上是一个非常不错的想法。

虽然您可以复制 passwd 文件,但我建议使用本地 ansible playbook 或 puppet 独立清单,如果缺少用户,它可以在本地创建用户。您可以将 playbook 保存在 NFS 上。

相关内容