SELinux问题分析
log分析
11-21 11:20:18.427 6603 6603 W tudent.activity: type=1400 audit(0.0:51): avc: denied { execmod } for path="/system/app/education_student/lib/arm/libhpHandPends.so" dev="mmcblk0p24" ino=424 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:system_file:s0 tclass=file permissive=0
11-21 11:20:18.437 6603 6603 W linker : /system/app/education_student/lib/arm/libhpHandPends.so has text relocations. This is wasting memory and prevents security hardening. Please fix.
denied后面{}里的是要执行的动作,比如append,open,execmod,link等等
scontext指的是域,对应的是te文件 上面报错这条对应te文件是untrusted_app.te,scontext全写是source_type context
tcontext指的是目标类型,上面报错这条对应的是目标类型system_file,tcontext全写是target_type context
tclass指的是类别,上面报错这条对应的是类别是file
te表达式格式
rule_name:规则名称,除了有allow还有dontaudit,auditallow和neverallow
source_type:源类型,对应一个很重要的概念--------域(domain)
tartget_type:目标的类型,即安全上下文,SELinux一个重要的判断对象
class:类别,目标(客体)是哪种类别,主要有File,Dir,Socket,SEAndroid还有Binder等,在这些基础上又细分出设备字符类型(chr_file),链接文件(lnk_file)等。可以通过ls -l查看文件类型
perm_set:动作集
示例
下面在selinux中添加上这条,找到untrusted_app.te文件,路径是system/core/rootdir/untrusted_app.te,然后加上
#rule_name source_type target_type:class perm_set
allow untrusted_app system_file:file execmod;
property添加权限
需要先在property_contexts里先定义一下tcontext,然后在对应的scontext.te文件中添加rule
验证方法
-
先整编sepolicy目录,编译完成后会更新out/target/product/BeyondTV/vendor/etc/selinux目录
mmm /system/sepolicy
-
打包out/target/product/BeyondTV/vendor/etc/selinux目录,先备份下板子中/vendor/etc/selinux目录,之后直接解压替换目录即可
-
restorecon需要添加权限的文件/文件夹
restorecon /test_dir
-
重启机器,查看SELinux权限情况
ls -alZ /test_dir
Android S版本之后新验证方法
在system/sepolicy mm编译
提前备份下板子上对应的selinux文件
cp -rf out/target/product/G10/vendor/etc/selinux /vendor/etc/selinux
cp -rf out/target/product/G10/odm/etc/selinux /odm/etc/selinux
替换的目录可以做一次restorecon -RF xxx
用adb直接push编译出来的selinux 目录,不用做restorecon
评论 (0)