selinux权限之mlstrustedsubject解决s0:c512,c768问题
·
一、报错问题
在 应用访问时 log 中 报出 avc: denied, 是 selinux 问题, :报错日志如下:
10-29 10:56:01.367 5118 5118 I auditd : type=1400 audit(0.0:624):
avc: denied { connectto }for comm="JavaBridge"
path=0056616E73746F6E65426C7565746F6F7468
scontext=u:r:untrusted_app_25:s0:c512,c768
tcontext=u:r:untrusted_app_29:s0:c84,c256,c512,c768
tclass=unix_stream_socket permissive=0 app=com.qinsilk.appUniverse
二、解决办法
2.1 初次尝试
解决方法: 一般先提取重要信息 :主体、客体、客体类别等
scontext=u:r:untrusted_app_25:s0:c512,c768
tcontext=u:r:untrusted_app_29:s0:c84,c256,c512,c768
tclass=unix_stream_socket
根据这个信息,一般的做法是 在 untrusted_app_25.te 中增加如下语句
allow untrusted_app_25 untrusted_app_29:unix_stream_socket { connectto };
但是添加上述日志后,这个 connectto 权限还是有问题,正常的情况是没有 这两个 c512, c768 的。SEAndroid 主要采用了两种强制访问的方法: TE 、 MLS。 我们经常接触到的都是 TE。 这个恰好是 MLS 相关的,这个部分比较难理解。
详细的可以读下面链接的文档
SEAndroid策略
2.2 最终解决
我用到的只参考了下面的部分:




在SEAndroid中共定义了三个拥有巨大权限的attribute分别是mlstrustedsubject、mlstrustedobject、unconfineddomain,
- 被分类到mlstrustedsubject的type在充当主体domain是可以越过MLS检查;
- 被分类到mlstrustedobject的type在充当客体时可以越过MLS检查;
- 被分到unconfineddomain的type则拥有所有权限可对客体进行任意操作。
在SEAndroid中
- 被分在
mlstrustedsubjectattribute中的 type 有
adbd、debuggerd、drmserver、init、installd、kernel、mediaserver、netd、surfaceflinger、su、system、vold、zygote。 - 被分在
mlstrustedobjectattribute中的type有alarm_device、ashmem_device、binder_device、log_device、mtp_device、nv_device、powervr_device、ptmx_device、null_device、cgroup、sysfs、sysfs_writable、sysfs_writable、sysfs_writable、debugfs、apk_data_file、cache_file、dnsproxyd_socket。 - 被分在
unconfineddomain的type有init、kernel、su。
按照上面的说明,需要把 untrusted_app_25 和 untrusted_app_29 类型定义的时候加上 mlstrustedsubject, 但是增加后编译报错,需要修改neverallow报错,我增加了 mlstrustedsubject, 问题解决。
type untrusted_app_25, domain, mlstrustedsubject;
更多推荐


所有评论(0)