Linux:组与组用户名


12

有人知道为什么linux命令吗

    groups 

显示的输出与

    groups username 

登录的用户与参数用户名相同。例:

    thorsten@ubuntu:~/tmp$ groups
    thorsten adm dialout cdrom plugdev lpadmin admin sambashare
    thorsten@ubuntu:~/tmp$ groups thorsten
    thorsten : thorsten adm dialout cdrom plugdev nogroup lpadmin admin sambashare

1
这个问题有很多重复,我什至不知道从哪里开始。
user1686'4

Answers:


12

当您运行,它查找1在给定的用户和(虽然它可以是LDAP,NIS或别的东西2),并显示你所有的研究小组发现。groups username/etc/passwd/etc/group

另一方面,在groups不带任何参数的情况下运行命令时,它仅列出其本身属于3的所有组– 不一定与中列出的组相同/etc/group。(请参阅下面的说明。)实际上,唯一要进行的查找/etc/group是将GID转换为组名。


每个进程都有一组凭据,其中包括(除其他事项外)“真实组ID”(主要GID),“有效组ID”(EGID)和“补充组” ID(辅助GID)列表。默认情况下,进程从其父级继承其凭据。但是,CAP_SETUID允许以root用户身份(UID 0)运行或具有该功能的进程设置任意凭据。

特别是,当您登录Linux(无论是使用tty,X11还是通过SSH)时,登录过程(/ bin / login,gdm,sshd)都会查询您的用户名,以确定您的UID,主GID和辅助GID。 。在个人计算机上,这仅意味着从passwdgroup文件(或NIS,LDAP等)中读取相应的行。

接下来,登录进程切换4到这些凭据启动会话之前,每一次你从现在开始发动对过程有相同的UID和GID的-该系统不检查/etc/group5并不会拿起所做的任何修改。

这样,该/usr/bin/groups进程将与您登录时所属于的组属于同一组,而不是数据库说您所在的组。

注意:上面的解释也适用于几乎所有的Unix。到Windows NT家族(除了UID和GID都被称为“ SID”,没有“主要组”,凭据被称为“进程令牌”,并且CAP_SETUIDSeCreateTokenPrivilegeSeTcbPrivilege);并可能适用于大多数其他多用户操作系统。


1 getpwuid()和getgrouplist()用于查找用户的组。

2在Linux上,glibc用于/etc/nsswitch.conf确定在何处查找此信息。

3 groups使用getgid(),getegid()和getgroups()获得自己的凭据。

4 setuid(),setgid(),initgroups()及其相关。

5例外,当然,是运行升高(各种工具的setuid),诸如susudosgnewgrppkexec,等。这意味着su $USER将生成具有更新的组列表的外壳。


3

groups单独给出该进程所有者的当前组成员身份。这与groups <username>自进程启动以来更改了groupdb还是更改了进程所有者不同。


groups不提供当前成员身份,而是提供登录过程(/ sbin / login,gdm,sshd)调用时为“当前”成员身份initgroups()
user1686 '04

1

只需重新启动计算机,组和组用户都应得到相同的结果。

它们之所以不同,是因为您将自己添加到了一个新的组中,而该组不是您启动计算机时的成员。


您当然不需要重新引导整个系统!您只需要启动一个新的登录会话(即,在一个新的虚拟控制台上使用su,关闭重新打开当前会话)。您还可以使用newgrp包含新组的名称来启动流程。
pabouk

1
我只是想提供一个简单的快速解决方案,该解决方案每次都可以使用。还有许多其他答案已经详细回答了这个问题。有时候,就像我的情况一样,人们想要的是一个简单的解决方案,无需经过几个步骤即可使用。
亚历克斯

0

运行updatedb,查看是否有任何更改。

当groupdb不变时,在OSX机器中也是如此:

albert-hotspot:~ sami$ groups sami
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ groups
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.