我需要对一个由 +/- 30 台 Linux 服务器组成的服务器群进行用户管理。通常我会想到 LDAP 之类的东西,但我们不想依赖于我们需要进行身份验证的全局服务器,以防停机或连接中断。
因此,我考虑编写一些脚本来同步 /etc/passwd 和 /etc/shadow 并检查主目录是否存在。包括在某些服务器上排除某些用户的可能性。
但是……我无法想象我是世界上唯一需要这样东西的人。那么有人知道有哪个开源项目可以做这样的事情吗?
答案1
我还没有见过开源解决方案,但我们之前已经推出过自己的解决方案。运行root
和rsync
同步/etc/passwd
以及/etc/shadow
包含授权 SSH 密钥的主目录相对简单。
但有一点要记住 - 的“主”副本/etc/passwd
需要/etc/shadow
包含所有系统上所有用户的详细信息。这意味着如果您有一台装有 MySQL 的机器,另一台装有 Apache,则 passwd/shadow 文件将需要包含用户mysql
和www-data
用户。这会导致某些机器上的 passwd/shadow 中的条目比需要的多。
另一个注意事项:最好在部署/设置时尽早执行此操作,因为在创建“主控”时可能会遇到 UID 冲突。如果您在已运行的系统上实现此功能,则需要确定哪个用户具有哪个 UID,并相应地更改每个系统上的目录/文件权限。
答案2
即便您提出了警告,我还是会说 LDAP。集中式身份验证单点故障是一个众所周知的问题,这就是为什么 Windows 放弃了 WinNT 的 PDC/BDC 模型,转而采用 Active Directory 的多主分布式模型。Novell 的 eDirectory(除其他功能外,是一款非常出色的 LDAP 服务器)已经使用多主服务器超过 15 年了。两者都可以在与身份验证网络的其余部分暂时分离的情况下通过慢速 WAN 链接很好地运行,并且尽管所有 IT 都存在通常的挂起/重启/重建过程,它们仍能正常运行。除了长时间停机(一天或更长时间)外,这个问题基本上已经解决了。
就我所见,开源领域的情况并不多。OpenLDAP 确实在多个 LDAP 服务器之间有复制功能,这为您提供了容错能力。
再扩展一下,如果您确实有一个 Active Directory 环境来与 Samba 配合使用,那么可以使用 AD 进行多主身份处理。如果一个 DC 出现故障,它会与其他 DC 通信。如果您不担心仍在开发中的 Samba 4,您甚至可以设置一个完全基于 Linux 的 AD 环境,并在客户端服务器上使用 winbind 来处理分布式身份验证。
答案3
最简单的解决方案是拥有一个主系统和一个在各个节点上运行的 cron 作业,以定期 rsync 密码、影子和组文件。不过,这感觉像是一种卑鄙的、肮脏的黑客行为。
从更广泛的意义上来说,你可以使用木偶作为一个包罗万象的配置管理工具。这包括用户帐户。实际上,您全局定义所有用户属性和组成员身份。然后,在计算机组或每台计算机的基础上,定义有权访问系统的组或单个用户。由于身份验证和授权是在本地进行的,即使您的 puppetmaster 停机,用户仍然可以登录。您只会丢失更改传播。
由于 puppet 只管理您明确定义的文件和服务,因此可以轻松地集中管理某些方面,同时在本地管理其他方面。