单纯的user id和group id都好理解。不好理解的是进程凭证中有不止一个uid和gid。
1)uid
这是最早出现的user id。有时也被称为real uid,实际的uid,简写为(r)uid。这个uid在资
setreuid可以同时修改(r)uid和euid。提供“-1”作为参数表示维持原有值不变。在以下两个条件之一成立时,此系统调用也会修改suid,让suid的值和系统调用后的euid值相同:
●修改了(r)uid。
●修改了euid,并且euid的新值不等于系统调用前的(r)uid。
setresuid同时修改(r)uid、euid、suid
setfsuid修改进程的fsuid。在设置euid相关的系统调用中,内核代码会在设置euid的同时也设置fsuid,让fsuid和euid的值相同。此系统调用专门设置fsuid。
在设置user id的系统调用中,内核代码遵守了以下原则:
●具备setuid特权的进程可以把(r)uid、euid、suid、fsuid设置为任意值。
●不具备setuid特权的进程只能将(r)uid、euid、suid的值设置为现有的(r)uid、euid、或suid的值。以euid为例,euid的新值只能是现在的(r)uid的值、现在的euid的值或现在的suid的值。(www.xing528.com)
●不具备setuid特权的进程只能将fsuid的值置为现有的(r)uid、euid、suid、fsuid的值之一。
组的set类系统调用和用户(user)类似,也有setgid、setegid、setregid、setresgid、setfsgid。涉及的特权是setgid。同uid类的调用非常类似,做个简单替换就可以了。比如setgid调用中,如果进程具有setgid特权,进程的(r)gid和egid也被设置,隐含fsgid也会随着egid一起改变。
组set类系统调用还有一个:
此调用用于一次性赋值进程凭证中的补充组id。因为补充组id是一个数组,而且其中的值不能限定只出现在(r)gid、egid、sgid中,否则补充组id没有意义。所以这个系统调用需要特权setgid。
与set类系统调用相对的是get类系统调用。
总算和字面意思相符了,此系统调用取出进程的(r)uid。
取出进程的euid。
取出进程的(r)uid、euid、suid。
有趣的是与set作比较,没有与setreuid和setfsuid相对应的get类系统调用。内核如此设
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。