已删除的组仍然可以通过 Linux 中的主组发挥作用吗?

已删除的组仍然可以通过 Linux 中的主组发挥作用吗?

通过我构建的分析程序,我遇到了一个错误,其中用户将主要组设置为此后删除的组(不再位于 /etc/group 文件中)。为了确定影响范围,我进行了一些测试,并遇到了一些奇怪的行为:

  • 即使组被删除,如果它是用户的主要组,并且 sudoers 文件中存在与其 ID 关联的权限,则用户仍将获得这些权限。
  • 如果之后创建组,则它可能会获得与之前删除的组相同的组 ID,并且用户的主 ID 将成为该组。

看起来,对于 sudoers 中的权限检查,/etc/group 文件和用户的主要组都是单独搜索的,因此主要组不必是实际的组?

问题: 它是否正确?我缺少什么?我不确定为什么客户端删除了主要组,但这似乎不对。

设备规格:

Linux Ubuntu 20.04.1

5.13.0-1017-天蓝色 x86_64

重现步骤:

  1. 创建新用户:sudo useradd testuser 这创建了用户和具有相同名称的单独新组,该组成为其主要组。

  2. 检查新用户组:groups testuser 结果:'testuser : testuser'

  3. 通过命令删除新组:sudo groupdel testuser 收到以下错误消息:groupdel:无法删除用户“testuser”的主要组

  4. 通过手动文件调整删除新组:sudo nano /etc/group 这确实有效,因为我可以简单地删除相关组的最后一行并保存文件

  5. 再次检查新用户的组:groups testuser 结果:“testuser:组:找不到组 ID 1003 1003 的名称”

  6. 尝试以新用户登录,删除组成功后仍然可以登录

  7. 尝试使用新用户执行 sudo 命令按预期失败:'testuser 不在 sudoers 文件中。此事件将被报告”

  8. 以特权帐户重新登录(具有 sudo 权限)

  9. 在 sudoers 文件中为步骤 4 中删除的组名赋予 sudoer 权限:sudo nano /etc/sudoers 然后将其添加到文件中: %testuser ALL=(ALL:ALL) ALL

  10. 以新用户身份登录并再次执行 sudo 命令仍然失败:'testuser 不在 sudoers 文件中。此事件将被报告”

  11. 在 sudoers 文件中为步骤 4 中删除的组 ID 赋予 sudoer 权限:sudo nano /etc/sudoers 然后将其添加到文件中: %#1003 ALL=(ALL:ALL) ALL

  12. 以新用户身份登录并再次执行 sudo 命令成功,用户现在拥有 SUDO 权限(我真的希望情况并非如此)

  13. 创建新组:sudo groupadd testforid 使用 ID 1003 创建新组

  14. 再次检查新用户组:groups testuser 结果:'testuser : testforid'

答案1

是的,“删除”的组仍然作为主要组使用;事实上,从未创建过的团体作为主要团体工作。

这是因为对于用户和组来说最终最重要的是他们的标识符。用户与其主要组之间的映射,例如在 中/etc/passwd,关联标识符。在您的示例中,testuser分配了主要组 1003;该组是否有名称(在/etc/group您的情况下)是无关紧要的。当您授予组 1003sudo权限时,testuser这些权限是通过该组授予的。

用户名和标识符遵循相同的规则:最终重要的是用户标识符。给定用户拥有的文件通过标识符(而不是名称)与该用户绑定,并且当用户被删除时,该关联仍然存在。还可以使用系统上没有匹配用户的用户标识符创建文件。

多个用户名和组名也可以分别与同一个用户和组id关联;映射不要求是双射的。因此,权限等可以根据用户/组标识符来定义,并且这些标识符可以具有0个或多个与其关联的名称。

相关内容