进程相关的6种id

apue 第八章
进程相关的六个id:
real uid/real gid  实际用户id
effective uid/effective uid 有效用户id
saved set uid/saved set gid 保存的设置用户id

real uid就是当前实际的用户id,effective udi决定了该进程对于系统资源的access的权限
咦?为什么有效用户id不是实际用户id呢?
想象一下当我们开放某个脚本的执行权限给其他用户的时候,却因为该用户没有access脚本需要的文件的权限,是不是很不合理?
例子:/etc/passwd 是一般用户没有权利去修改的,但是可以通过chpass来修改自己的用户密码。当我们运行chpass的时候,该进程的real uid是我们自己的uid,但是effective uid确是root的。

那么,这个effective uid又是怎么设置,与什么有关系?
我们继续以chpass为例子来说明吧:
-bash-2.05b$ ls -l /usr/bin/chpass
-r-sr-xr-x  6 root  wheel  33268 May 27  2005 /usr/bin/chpass
发现有什么特别了吧,在用户的执行位上的s, 它是代表什么的呢?s The set-user-ID-on-execution and set-group-ID-on-execution bits.
这里被设置了set-user-ID权限位后,普通用户运行chpass却可以有root的访问权限,也就是说该进程的effective uid为root的uid,所以尽管我们对/etc/passwd没有写的权限,但是chpass却赋予我们修改它的权利。
同理,当我们没有设置该权限位,那么我们即使可以执行chpass,却也会修改/etc/passwd的时候出错。

saved set uid又有什么用呢? 就是为了让用户的effective id在real uid 和saved set uid之间来回转换,这样的操作可以通过调用setuid(uid)来实现。
进程启动时saved set uid == effective uid:
(1)若进程具有超级用户特权,则setuid函数将effective uid、real uid,以及saved set uid设置为uid。
(2)若进程没有超级用户特权,但是uid==effective uid或saved set uid,则setuid只将effective uid 设置为uid。不改变real uid和saved set uid。
(3)否则调用setuid(uid)失败
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值