首页 理论教育 向后兼容的Linux内核安全模块深析

向后兼容的Linux内核安全模块深析

时间:2023-11-22 理论教育 版权反馈
【摘要】:判定Linux内核没有为了向后兼容而在判定中添加逻辑,Linux内核判断进程是否进行特权操作的唯一标准就是相关的能力是否在进程的有效能力集中。系统调用为了做到向后兼容,内核在涉及用户id变化的系统调用中增加了调整进程的能力集的逻辑。2)进程执行execve后,如果euid为0,内核认为文件的有效能力位为1。

向后兼容的Linux内核安全模块深析

Linux内核能力机制的开发者希望应用程序能够平稳地从基于id的特权机制过渡到基于能力的特权机制,为此Linux内核提供了能力机制到id机制的兼容,让旧有的应用在新的内核上能够正常运行。这个兼容机制是成功的,成功到时至今日,使用能力机制的应用仍然是少数。

下面还是从“判定”“系统调用”“从文件获取”三个方面来分析这个兼容机制。

(1)判定

Linux内核没有为了向后兼容而在判定中添加逻辑,Linux内核判断进程是否进行特权操作的唯一标准就是相关的能力是否在进程的有效能力集中。Linux内核中没有任何依据用户id进行授权的逻辑。

(2)系统调用

为了做到向后兼容,内核在涉及用户id变化的系统调用中(setuid、seteuid、setreuid、setresuid、setfsuid)增加了调整进程的能力集的逻辑。

1)如果系统调用前(r)uid、euid、suid中有一个或多个为0,系统调用后这三个用户id都不是0,那么进程的允许能力集和有效能力集被清空。

2)如果euid从0变为非0,那么有效能力集被清空。(www.xing528.com)

3)如果euid从非0变为0,那么将允许能力集赋值给有效能力集。

4)下述能力是与文件相关的能力:cap_chown、cap_mknod、cap_dac_override、cap_dac_read_search、cap_fowner、cap_fsetid、cap_mac_override、cap_linux_immutable。如果fsuid从0变为非0,那么从有效能力集中清除与文件相关的能力。反之,从允许能力集中将文件相关的能力赋值给有效能力集。

(3)从文件获取

1)进程执行execve后,如果(r)uid或euid为0,内核认为文件的允许能力集和可继承能力集具有全部的能力。这样,前面的execve前后能力变化公式就变为:

当进程的限制能力集cap_bset具有全部能力时,执行set-user-ID-root文件的效果就是进程的有效能力集中包含全部能力。

2)进程执行execve后,如果euid为0,内核认为文件的有效能力位为1。公式变为:

3)进程的可继承能力集和限制能力集不受影响,还是原来的公式:

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

我要反馈