打印真正的有效用户ID和组ID
命令语法格式
id [OPTION]… [USER]
命令描述
命令id打印关于给定用户USER的信息,如果没有指定用户USER,则打印运行id命令的进程的用户和组信息。
USER可以是用户ID或用户名。如果USER为用户ID,则需要使用前导加号(+),否则id会将USER视为一个用户名。请参阅消除歧义名称和ID。
默认情况下,打印真实用户ID、实际组ID、有效用户ID(如果不同于真实用户ID)、有效组ID(如果不同于真实组ID)、补充组ID。另外,如果启用SELinux并且未设置POSIXLY_CORRECT环境变量,则打印’context=c’,其中c是安全上下文。
在命令的输出中,每个数字值前面都有一个标识字符串,后面跟着相应的用户名或组名。
命令支持的选项及含义
-Z, –context
只打印进程的安全上下文,通常是从父进程继承的用户安全上下文。如果SELinux或SMACK都未启用,则打印警告,并将状态1退出。
-g, –group
仅打印基本组ID。
-G, –groups
打印基本组ID与附属组ID。
-u, –user
只打印用户ID。
-r, –real
与-u、-g、-G选项一起使用,打印出真正的用户ID或组ID,而不是默认的有效ID。
-n, –name
与-u、-g、-G选项一起使用,打印出用户名或组名,而不是默认的ID。
-z, –zero
使用NUL来分割字符,而不是默认的空白字符。使用默认输出格式时,不允许使用此选项。
其他选项
–help
显示帮助并退出。
–version
显示版本信息。
-a
被忽略的选项,只是为了兼容之前的版本。
基本组(Primary)与附属组(Supplementary)
基本组,也被称为Primary Group、First Group、Initial Login Group,用户的默认组,用户的GID所标识的组。
附属组,也被称为Secondary Group、Supplementary Group,用户的附加组。
系统中所有的组及其信息保存在/etc/group文件中,该文件中保存了组名、组ID以及一些其他的信息,他们之间由冒号(:)分隔。而用户的所属的基本组保存在/etc/passwd文件中,各个字段也是由冒号(:)分隔的,其中第4个字段为组ID,对应了/etc/group中的组ID。而用户所属的附属组信息保存在/etc/gshadows/gshadows文件中。
实际用户与有效用户、实际用户组与有效用户组
在Unix进程中涉及多个用户ID和用户组ID,包括如下:
1、实际用户ID和实际用户组ID:标识我们是谁。也就是登录用户的uid和gid,比如我们的Linux以simon登录,在Linux运行的所有的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(可以用id命令查看)。
2、有效用户ID和有效用户组ID:进程用来决定我们对资源的访问权限。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当set-user-ID(SUID)位设置,则有效用户ID等于文件的所有者的uid,而不是实际用户ID;同样,如果设置了set-group-ID(SGID)位,则有效用户组ID等于文件所有者的gid,而不是实际用户组ID。
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/id
查看info手册:info ‘(coreutils) id invocation’
参考文献
- man 1 id, version GNU coreutils 8.28
- RedHat/6.3.2.4. /etc/gshadow
- Linux进程的实际用户ID和有效用户ID
更新日志
- 12/14/2017 创建文章
- 06/22/2018 修改文章内容,重新整理