首页 理论教育 Linux内核安全模块uid和gid深入解析

Linux内核安全模块uid和gid深入解析

时间:2023-11-22 理论教育 版权反馈
【摘要】:不好理解的是进程凭证中有不止一个uid和gid。1)uid这是最早出现的user id。有时也被称为real uid,实际的uid,简写为uid。在以下两个条件之一成立时,此系统调用也会修改suid,让suid的值和系统调用后的euid值相同:●修改了uid。在设置euid相关的系统调用中,内核代码会在设置euid的同时也设置fsuid,让fsuid和euid的值相同。涉及的特权是setgid。取出进程的uid、euid、suid。有趣的是与set作比较,没有与setreuid和setfsuid相对应的get类系统调用。

Linux内核安全模块uid和gid深入解析

单纯的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类系统调用。内核如此设

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈