用户ID
数值范围
在不同的系统中,UID的值的范围也有所不同,但一般来说UID都是由一个15位的整数表示,其范围在0~32767之内,且有如下限制:
- 超级用户的UID总为0;
- 按传统的做法,“nobody”(类UNIX系统的一种特殊账户)与超级用户相反,总占有数值最大的PID,即32767;相对应的,现今的系统为nobody分配的UID则在系统保留范围(1~100)或是65530-65535的范围内[1]。
- 数值于1~100内的UID约定预留给系统使用,有些手册则推荐在此基础上再预留101~499(如RHEL[2])甚至是101~999(如Debian[1])的UID以作备用;而相对应的,在Linux中用useradd命令创建第一个用户时,默认为之分配的UID则为1000。
除此之外,有些特殊的系统也支持16位的UID,因而UID的数目可以扩展到65536个;现代系统支持32位的UID,这也使UID数目进一步扩充到4,294,967,296个成为可能。
分类
有效用户ID
有效用户ID(Effective UID,即EUID)与有效用户组ID(Effective Group ID,即EGID)在创建与访问文件的时候发挥作用;具体来说,创建文件时,系统内核将根据创建文件的进程的EUID与EGID设定文件的所有者/组属性,而在访问文件时,内核亦根据访问进程的EUID与EGID决定其能否访问文件。
真实用户ID
真实用户ID(Real UID,即RUID)与真实用户组ID(Real GID,即RGID)用于辨识进程的真正所有者,且会影响到进程发送信号的权限。没有超级用户权限的进程仅在其RUID与目标进程的RUID相匹配时才能向目标进程发送信号,例如在父子进程间,子进程从父进程处继承了认证信息,使得父子进程间可以互相发送信号。
暂存用户ID
暂存用户ID(Saved UID,即SUID)于以提升权限运行的进程暂时需要做一些不需特权的操作时使用,这种情况下进程会暂时将自己的有效用户ID从特权用户(常为root)对应的UID变为某个非特权用户对应的UID,而后将原有的特权用户UID复制为SUID暂存;之后当进程完成不需特权的操作后,进程使用SUID的值重置EUID以重新获得特权。在这里需要说明的是,无特权进程的EUID值只能设为与RUID、SUID与EUID(也即不改变)之一相同的值。
杂项
- UID的数值与用户账户的对应关系存放于/etc/passwd中[3]。用于存放密码的/etc/shadow以及网络信息服务也以UID的数值标识用户,但现在Linux系统下的shadow文件已经改用账户名来标识用户。
- 在遵循POSIX的环境中,id这一命令可以给出当前用户的用户名、所属组及对应的UID、GID的值[3]。
参考文献
引用
- DebianHelp.co.uk. .
- Red Hat Documents. . [2011-12-22].
- UnixTutorial.org. . [2011-12-22]. (原始内容存档于2011-12-24).
来源
- 《UNIX环境高级编程》, 理查德·史蒂文斯 著
参见
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.