Tho*_*ues 12 linux user-accounts
有谁知道为什么 linux 命令
groups
Run Code Online (Sandbox Code Playgroud)
显示不同的输出
groups username
Run Code Online (Sandbox Code Playgroud)
登录用户与参数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
Run Code Online (Sandbox Code Playgroud)
use*_*686 12
当您运行时,它会在and 中查找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 . 在个人机,这也就意味着读取来自适当的行passwd和group文件(或NIS,LDAP等)。
接下来,登录进程切换4到这些凭据启动会话之前,每一次你从现在开始发动对过程有相同的UID和GID的-该系统不检查/etc/group了5并不会拿起所做的任何修改。
这样,/usr/bin/groups进程将与您登录时属于相同的组,而不是数据库所说的您所在的组。
注意:以上解释也适用于几乎所有的 Unix;到 Windows NT 系列(除了 UID 和 GID 都称为“SID”,没有“主要组”,凭据称为“进程令牌”,CAP_SETUID是SeCreateTokenPrivilege或SeTcbPrivilege);并且可能适用于大多数其他多用户操作系统。
1 getpwuid() 和 getgrouplist() 用于查找用户的组。
2在 Linux 上,glibc 用于/etc/nsswitch.conf确定在何处查找此信息。
3 groups使用 getgid()、getegid() 和 getgroups() 来获取自己的凭据。
4 setuid()、setgid()、initgroups() 及相关。
5例外,当然,是运行升高(各种工具的setuid),诸如su,sudo,sg,newgrp,pkexec,等。这意味着su $USER将生成一个带有更新组列表的外壳。
| 归档时间: |
|
| 查看次数: |
6469 次 |
| 最近记录: |