进程的用户和用户组身份

来源:互联网 发布:洪荒之力网络意思 编辑:程序博客网 时间:2024/05/17 20:21
一、进程的用户身份
1、Effective UserId
执行进程的有效用户身份,进程权限由其参与决定
2、Saved UserId
用于保存Effective UserId的数据结构
3、Real UserId
创建进程的用户身份,可称之为实际用户身份


一般情况下,进程的Effective UserId和Real UserId是一致的,都是创建进程的用户的Id,Saved UserID用不到,比如说当前登录用户为dsl,那么创建一个进程之后,进程的Effective UserId和Real UserId都为dsl用户对应的id


假如一个可执行文件设置了SUID,那么这3个UserId的值开始变得不同,Real UserId保存了创建进程的用户的Id,Effective UserId保存了文件属主用户的id(SUID,就是以文件属主的身份运行进程),当在进程执行过程中,进程期望临时转为以Real UserId的身份运行,那么它先把当前的Effective UserId保存到Saved UserId中,然后将Effective UserId的值设为Real UserId的值,等到想要恢复到最初有效用户身份的时候,再从Saved UserId中将值取出来覆盖Effective UserId的值


二、进程的用户组身份
相应的,存在
1、Effective GroupId
执行进程的有效用户组身份,进程权限由其参与决定


2、Saved GroupId,
用于保存Effective GroupId的数据结构


3、Real GroupId的概念
创建进程的用户组身份,可称为实际用户组身份


它们的值也分为两种情况:
1)未设置SGID

Real GroupId和Effective GroupId的值为进程实际用户对应的Primary Group的Id值,跟进程有效用户无关,也就与相应程序是否设置SUID无关。

比如说有一个程序,无论是否设置SUID都没有关系,dsl用户执行该程序,dsl用户的Primary Group为dsl,那么得到的进程的Real GroupId和Effective GroupId都为dsl这个用户组对应的Id。


2)设置SGID
设置了SGID之后,Real GroupId保存了实际用户对应的primary group的Id值,Effective GroupId的值就为文件所属组(SGID,就是以文件所属组的身份运行进程),当在进程执行过程中,进程期望临时转为以Real GroupId的身份运行,那么它先把当前的Effective GroupId保存到Saved GroupId中,然后将Effective GroupId的值设为Real GroupId的值,等到想要恢复到最初有效用户组身份的时候,再从Saved GroupId中将值取出来覆盖Effective GroupId的值


三、进程用户和用户组的情况组合
一共有4种情况,分别是SUID和SGID都不设置,SUID设置和SGID不设置,SUID不设置和SGID设置,SUID和SGID都设置


参考文献:
[1]http://www.lst.de/~okir/blackhats/node23.html
[2]http://www.makelinux.net/alp/083
[3]http://en.wikipedia.org/wiki/User_identifier
[4]http://stackoverflow.com/questions/8499296/realuid-saved-uid-effective-uid-whats-going-on
[5]http://stackoverflow.com/questions/205070/whats-the-deal-with-all-the-different-uids-a-process-can-have
0 0
原创粉丝点击