将用户名添加到组后,组和组 USERNAME 的输出不同

将用户名添加到组后,组和组 USERNAME 的输出不同

我今天偶然发现了一个奇怪的行为。将用户添加到新组后,如下所示:

# gpasswd -a test myuser

groups然后连接到新的 bash 会话,以下是和 的结果groups myuser

myuser@mycomputer$ groups
wheel myuser
myuser@mycomputer$ groups myuser
wheel myuser test

仅当我重新启动时, 的输出groups才会与 相同groups myuser,但不一定以相同的顺序显示组。

所以我的问题很简单:为什么?

答案1

因为对组成员身份的更改只有在启动新组后才会生效登录壳。启动新的非登录交互式 shell 会话(这是打开新终端时所得到的)是无关紧要的。

因此,当您运行 时groups,会打印您的用户当前所在的组。但是,这些组是在您的用户首次登录时设置的,并且在您再次登录之前无法更改。因此,groups不包括您的新组。

另一方面,当您运行 时groups myuser,系统不会查找当前的用户属于眼下,它会查找用户所属的组myuser,这是通过读取设置文件(/etc/group大概是 )来获取的。由于您的用户被设置为属于 中的新组/etc/groups,因此此命令也会显示这一点,即使您不是现在由于您尚未再次登录,因此已在该组中。

答案2

  • 当您groups不带参数运行时,它会显示当前的组列表过程。通常,列表只是从父进程继承,但它被login,newgrp和类似的改变。

  • 当您groups使用参数运行时,它会显示为指定的(在用户数据库中)列出的组用户。这是login下次为该用户运行时等将设置的组列表。

这就是为什么更新用户/组数据库只会影响未来登录会话 - 不要指望它会更改任何已在运行的进程。

相关内容