linux用户进程id,Linux进程的user id

Linux的一个进程有下面几组用户ID和组ID:

real-uid/real-gid

是这个进程的拥有者(组)。getuid、getgid可以得到它们。

effective-uid/effective-gid

是Kernel用来判断资源(Message Queue,Shared Memory,Mutex等)访问权限的主要ID。在Linux系统中,这个ID不直接决定文件系统的访问权限,而是Filesystem-UID/GID来决定,但是EUID/EGID的变动直接回导致Filesystem-UID/GID的变动。所以一般可以认为euid、egid决定文件的访问权限。

它们继承于父进程的对应用户。但是如果可执行文件设置了setuid属性,那么euid、egid会设置成可执行文件的uid和gid(一般是root)。

进程中,可以使用seteuid,setreuid,setresuid等函数来修改。系统的第一个进程init的各种uid/gid都是root(0),但后续起来的程序进程会根据其需要和设计调用上面的函数来修改自己的uid/gid。

filesystem-uid/gid

决定文件系统的访问权限。访问文件时,系统会用FUID/FGID判断进程是以那种角色来访问:拥有者(user)、拥有组(group)、其他(other)。然后看这个角色是否有进程所请求的权限:读,写,执行。

这个是Linux系统特有的,一旦euid被修改fuid也会被自动修改。但可以调用setfsuid来改动,可以和euid不一样。

Supplememtary-Group-IDs

这个ID列表定义了除了gid/egid外,process还应该属于那些组。可以使用getgroups和setgroups来获取和修改他们。也影响对文件系统的访问权限。

saved-set-uid

当使用root用户或者setuid的方式启动一个进程后,其euid是root,但root的进程一般都需要能来回切换任何其他用户的ID,但是普通的euid是无法修改成root的euid的,所以设计了saved-set-uid,来记住最初的User ID,不论什么进程是什么euid都可以改回到saved-set-uid中的UID。

我们通常会这样认为:一个process的euid决定了它可以访问的文件,如果euid是访问文件的属组(group)的成员,那么process应该可以访问这个文件。这个想法是错误的。系统不会用euid来判断进程是属于哪一个组,euid只用来和文件的owner来判断,进程有egid、Supplememtary-Group-IDs信息来决定进程属于哪些组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值