----------【例子1】:通过修改shell的权限,使其无法设置属性:
先来看shell的te,如下所示:
[external/sepolicy/shell.te]
type shell, domain;
type shell_exec, file_type;
#shell属于unconfined_domain,unconfined即是不受限制的意思
unconfined_domain(shell)
app_domain(shell)
unconfied_domain是一个宏,它将shell和如下两个attribute相关联:
[external/sepolicy/te_macros]
#####################################
define(unconfined_domain',
typeattribute $1 mlstrustedsubject; #这个和MLS有关
typeattribute $1 unconfineddomain;
')
unconfineddomain权限很多,它的allow语句定义在unconfined.te中:
[external/sepolicy/unconfined.te]
…
allow unconfineddomain property_type:property_service set;
从上面可以看出,shell所关联的unconfineddomain有权限设置属性。所以,我们把它改成:
allow {unconfineddomain -shell} property_type:property_service set;
通过一个“-”号,将shell的权限排除。
然后:
我们mmm external/sepolicy,得到sepolicy文件。
将其push到/data/security/current/sepolicy目录下
接着调用setprop selinux.reload_policy 1,使得init重新加载sepolicy,由于/data目录下有了sepolicy,所以它将使用这个新的。
图示为整个测试的例子:
重新加载sepolicy之前,笔者可通过"setprop wlan.driver.status test_ok"设置该属性的值为test_ok。
当通过 setprop selinux.reload_policy 1 的命令后,init重新加载了sepolicy。
笔者setprop wlan.driver.status 都不能修改该属性的值。
图示为dmesg输出,可以看出,当selinux使用了data目录下这个新的sepolicy后,shell的setprop权限就被否了!
提示:前面曾提到过audit,日志一类的事情。日志由kernel输出,可借助诸如audit2allow等host上的工具查看哪些地方有违反权限的地方。
===============
SeAndroid 架构
https://blog.csdn.net/qq_19923217/article/details/81240027
PMS / Installd / Init
修改selinux
https://www.cnblogs.com/blogs-of-lxl/p/7515023.html
https://www.jianshu.com/p/48c286da64a3