如何在多台机器之间同步 UID 和 GID,同时尽量减少对用户体验的影响?

如何在多台机器之间同步 UID 和 GID,同时尽量减少对用户体验的影响?

我有两个工作站(WS 1 和 WS 2)和一个服务器(S),它们都运行 Ubuntu 22.04。这些机器以前是独立管理的,因此用户可以在其中部分或全部机器上拥有帐户,并且它们上存在不同的组。

我想设置一个包含这些机器的集群,以便根据它们的可用资源向它们提交 slurm 作业。我/nfs在 S 上创建了一个目录并设置了一个 NFS 服务器,并在 WS 上安装了 NFS 客户端并挂载/nfs在它们上。

我看见Slurm 快速入门指南时钟、UID 和 GID 应在所有设备上同步。如何才能在尽可能不影响用户的情况下实现此目的?

我发现有几个问题需要解决:

  1. 使用 FreeIPA 或其他工具来管理登录。如果您有任何建议,请告诉我,因为我以前没有使用过任何此类工具。

  2. 同步 UID 和 GID,同时用户不会丢失对其数据的访问权限。

  3. 虽然 S 被认为是 Slurm 的入口系统,但用户应该能够直接登录 WS。

  4. 同步/合并用户的主目录。虽然我不知道这是否是绝对必要的。

如果您能帮助我解决这个问题我将非常感激。

编辑 1:我明白这个问题是关于单台机器上的类似问题,答案有助于手动解决问题。但是,我希望从 S 这样的集中式机器进行此类更改,并跟踪主机上的用户和组。

答案1

唯一可能产生影响的步骤是,当不同系统上的相同 UID 属于不同用户时,更改现有的 UID(重新更改其文件等)——chown 应该基本不会被注意到,但它确实需要终止全部该用户正在运行的进程。

实际迁移到中央数据库可以分步完成,因为允许在 LDAP 中拥有同一个帐户在 /etc/passwd 中(nsswitch.conf 中首先列出的那个具有优先权),例如,您可以逐渐将帐户添加到 LDAP 并从本地 /etc/passwd 中逐个删除它们。

使用 FreeIPA 或其他工具来管理登录。如果您有任何建议,请告诉我,因为我以前没有使用过任何此类工具。

有两个选项:

  1. 中央数据库(用户目录服务器)。过去它指的是 NIS,而现在则是某种类型的 LDAP 服务 - 要么是完整的解决方案(例如 FreeIPA 或 Active Directory),要么是手动管理的 LDAP 数据库(例如 OpenLDAP 或 389-ds)。您通常会使用 SSSD 或 nslcd 作为系统范围的 LDAP 客户端(或使用 Winbind 作为 AD)。

  2. 集中分布的“本地”帐户。基本上,使用 Salt/Ansible/Puppet 等配置管理工具来处理帐户创建或部署整个 /etc/passwd 文件。

选择哪一个取决于偏好和其他各种标准;例如,与 LDAP 不同,本地 /etc/passwd 永远不会关闭,但同时不能扩展到几百个用户以上。

请注意,身份验证与用户帐户存储分开处理。对于密码身份验证,可以针对同一 LDAP 服务器或 Kerberos KDC(FreeIPA)验证密码,无论是本地用户还是 LDAP 用户。因此,您可以通过 /etc/passwd 将帐户作为本地帐户进行管理,但为 SSO 设置 Kerberos。

(对于 SSH 密钥对,sshd 服务并不太关心,但可以设置为从 LDAP 或其他任意来源提取 authorized_keys,而不是在 ~/.ssh/ 中查找。)

同步 UID 和 GID,同时用户不会丢失对其数据的访问权限。

您需要在将帐户首次导入中央列表之前/期间手动处理此问题。收集所有系统中的所有本地帐户列表,搜索具有重复 UID 的帐户,然后使用和调整它们以匹配usermodchown -R确保不创建新的重复)。

同步/合并用户的主目录。虽然我不知道这是否是绝对必要的。

这取决于您的需求。您可以合并主目录并通过 NFS(可能使用 autofs)从文件服务器挂载它们,或者您可以将它们保留在本地并仅将 NFS 用于非 $HOME 数据。(只要 UID 同步,帐户是本地的还是中央的都无所谓。)

相关内容