如何在 Linux 中覆盖用户主要组?

如何在 Linux 中覆盖用户主要组?

我有几个 Linux 服务器使用与 Microsoft AD 集成的 SSSD 来验证 AD 用户,并且我正在尝试覆盖这些服务器上的用户主要组。

根据 AD,所有用户的默认主要组是 gid=100001(posixusers),我希望将用户分配给不同的 gid。每个用户都会有一个不同的主要组,即他们的 UID。

因此,如果用户 john 的 UID 是 1028,并且根据 AD,他的 GID 是 100001,那么我想覆盖 GID,因此它将是 gid=1028

我相信这可以通过使用 sss_override 来完成,但也存在一些缺点,因为我必须在每个 Linux 服务器上重复相同的命令或导出/导入覆盖列表并重新启动 sssd。

另外,我不知道如何在用户第一次登录时实现自动执行该操作。

你会怎么做?除了 sss_override 之外,还有其他方法吗?如果没有,你会怎么做来自动化这一过程?

注意:我无法触及 AD 上的任何内容,因为它由不同的部门管理,所以我唯一能做的就是查询 AD/LDAP 服务。

提前致谢。

答案1

如果您根据 AD 组配置访问权限,则可以使用以下命令快速更改组中所有用户的主 GID:

getent group AD-group-name | awk -F':' '{print $4}' | sed 's/\,/\n/g' \
| xargs -i sss_override user-add {} -g $(getent group AD-group-name) \
| awk -F':' '{print $3}')

在哪里AD 组名称是 AD/LDAP 组的名称。如果您使用 SSSD 和 AD,这应该在用户登录之前起作用。正如您所说,sss_override 有一些注意事项,如果您要配置更多用户,则需要再次运行它。这有点不合时宜,但您可以每晚将其作为 cron 作业或类似作业运行。

您还可以使用 ansible 之类的东西在多个系统上运行它。我的计划是创建一个 ansible playbook,当我们配置新用户时,它会执行类似的操作。

答案2

我没有足够的声誉来直接回复 Gabe 的回答,它很有效,除了它应该读到:

getent group AD-group-name | awk -F':' '{print $4}' | sed 's/\,/\n/g' \  
| xargs -i sss_override user-add {} -g $(getent group AD-group-name \  
| awk -F':' '{print $3}')

对于我们来说,这是一个很好的解决方案,可以解决 NFS 16 组限制的问题。

相关内容