美文网首页
2018-08-12SELinux概念读书笔记

2018-08-12SELinux概念读书笔记

作者: uin_sisyphus | 来源:发表于2018-10-26 17:31 被阅读0次

    1. SELinux的控制属性(安全上下文)

    组成部分:用户:角色:类型

    1.1 文件的安全上下文

    举例:/etc/shadow文件的安全上下文为:
    system_u:object_r:shadow_t

    # ls -Z /etc/shadow
    -r---- root root system_u:object_r:shadow_t shadow
    

    1.2 进程的安全上下文

    举例:passwd进程的安全上下文
    joe:user_r:passwd_t

    # ps -aZ
    joe:user_r:passwd_t 16532 pts/0 00:00:00 passwd
    

    2. 域转换

    2.1 为什么要域转换

    以用户修改账号密码为例,从逻辑上来引出为什么需要域转换,

    (a)用户joe登陆系统,

    创建了shell进程(如bash),此时shell进程的安全上下文中的类型为user_t(它表示一个普通的不受信任的用户进程域类型).

    (b) 管理密码的进程 passwd,其类型为 passwd_t

    # ps -aZ
    joe:user_r:passwd_t 16532 pts/0 00:00:00 passwd
    

    (c) 密码文件 /etc/shadow, 其类型为 shadow_t

    system_u:object_r:shadow_t

    # ls -Z /etc/shadow
    -r---- root root system_u:object_r:shadow_t shadow
    

    (d) SELinux系统中 进程passwd对密码文件/etc/shadow的策略配置

    allow passwd_t shadow_t : file {ioctl read write create getattr setattr lock relabelfrom relabelto append unlink link rename}
    含义:给类型为 passwd_t的进程 访问 类型为shadow_t的文件授权。

    (e)joe用户的shell程序运行其他程序(例如/usr/bin/passwd),新的进程会继承其域类型user_t, 那么问题来了:

    现在passwd进程的域为user_t, 按照(d)中配置的规则,该域是没有操作密码文件/etc/shadow的权限。
    怎么能让 joe用户启动的passwd进程,拥有passwd_t域类型呢?这就需要域转换

    2.2 域转换

    image.png

    (a)passwd可执行程序的安全上下文

    # ls -Z /usr/bin/passwd
    -r-sxx root root system_u:object_r:passwd_exec_t /usr/bin/passwd
    

    (b) 规则一:首先配置运行shell启动/usr/bin/passwd,execute许可

    授予shell所在的域(域类型为user_t)运行/usr/bin/passwd(类型为passwd_exec_t)可执行程序的权限
    allow user_t passwd_exec_t : file {getattr execute};
    //允许域为usert_(这里指shell进程),在passwd可执行文件(passwd_exec_t)启动execve()系统调用。实际上也就是说允许shell进程调用execve()来执行passwd。

    (c)规则二: 允许/usr/bin/passwd在 passwd_t域中运行,entrypoint许可

    allow passwd_t passwd_exec_t : file entrypoint;
    //提供passwd_t域的入口访问权,entrypoint许可在SELinxu中是一个许可权限,它的作用就是定义哪个可执行文件(如passwd)可以以某个特定的域(passwd_t)来运行,这就是所谓的域转变。那么例子中的passwd可执行文件被标识为passwd_exec_t,并且passwd_t类型有entrypoint权限访问passwd_exec_t,那么passwd就具备了在passwd_t域类型中运行的条件。

    (d)规则三: 允许user_t域切换为passwd_t域, transition许可

    allow user_t passwd_t : process transition;
    //这条规则中没有提供对客体的访问,因为此时客体是process,意味着此时的客体代表进程。如果系统资源都被封装为客体的话,那么进程也可以理解为系统资源,这里进程作为客体并不矛盾。在这个规则中,许可是transition,这个许可的含义就是允许修改进程的安全上下文中的类型。那么这条规则的含义指的就是:允许user_t域转变为passwd_t域。

    那么至此我们了解了域转变的流程,也就是说一次成功的域转变,这三条规则必须保证同时存在,且当这三个许可在一个TE策略中同时通过才能完成域的转变。总结如下:
    进程的新域(passwd_t)对可执行文件(passwd)具有entrypoint许可
    进程当前域(usr_t)具有对入口文件(passwd_exec_t)具有execute许可
    进程当前域(usr_t)对新的域(passwd_t)具有transition许可

    参考资料:
    <meta charset="utf-8">

    Android8.0 SELinux详解

    https://blog.csdn.net/huangyabin001/article/details/79290382

    SELinux For Android(Android O)

    https://blog.csdn.net/huangyabin001/article/details/79264222

    【SELinux学习笔记】约束

    https://blog.csdn.net/huangyabin001/article/details/48274137

    1,《SELinux by example Using security enhanced Linux》读书笔记

    https://blog.csdn.net/huangyabin001/article/details/47404247

    2. 2.【SELinux学习笔记】概念

    https://blog.csdn.net/huangyabin001/article/details/47404495

    3. 【SELinux学习笔记】架构

    https://blog.csdn.net/huangyabin001/article/details/47404555

    4. 【SELinux学习笔记】SELinu策略语言

    https://blog.csdn.net/huangyabin001/article/details/47404603

    5. 【SELinux学习笔记】类型增强

    https://blog.csdn.net/huangyabin001/article/details/47423087

    6. 6.【SELinux学习笔记】角色和用户

    https://blog.csdn.net/huangyabin001/article/details/47804213

    相关文章

      网友评论

          本文标题:2018-08-12SELinux概念读书笔记

          本文链接:https://www.haomeiwen.com/subject/cyksbftx.html