Android SELinux访问data目录


Android SELinux默认开启时,若进程想访问并操作data分区的一个目录,通常需要解决部分进程访问data目录而造成的功能兼容性问题,如访问权限扩大或违反Google neverallow规则导致的认证失败。

实际案例

当进程没有添加SELinux的rule规则下去操作data目录,通过logcat可以看到会有许多的avc denied的信息,说明此操作被SELinux拦截处理了。可以执行setenforce 0临时关闭selinux防火墙,方便核对并添加sepolicy允许规则。

例如跑CTS测试时报了如下错误,必须想办法绕过它。在这里插入图片描述

1、新建data子目录
在/system/core/rootdir/init.rc中执行并设置目录文件的访问权限。

on post-fs-data
	 mkdir /data/hht 0770 system system

注意:在vendor的rc文件里创建data子目录是不会成功的。将rc文件push到/system/etc/init/hw可快速验证。

adb push xxx\system\core\rootdir\init.rc /system/etc/init/hw

2、声明文件类型的变量
在/device/rockchip/common/sepolicy/vendor/file.te中添加如下定义:

type hht_data_file, file_type, data_file_type, core_data_file_type;

3、为文件分配安全标签
在/device/rockchip/common/sepolicy/vendor/file_contexts中添加如下规则:

/data/hht(/.*)?            u:object_r:hht_data_file:s0

4、赋予控制访问文件节点的权限
在/device/rockchip/common/sepolicy/vendor/system_app.te中为system_app进程添加allow权限。

例如出现如下avc日志:

type=1400 audit(0.0:150): avc: denied { getattr } for path="/data/hht" dev="dm-37" ino=18203 scontext=u:r:system_app:s0 tcontext=u:object_r:hht_data_file:s0 tclass=dir permissive=0
type=1400 audit(0.0:151): avc: denied { search } for name="hht" dev="dm-37" ino=18203 scontext=u:r:system_app:s0 tcontext=u:object_r:hht_data_file:s0 tclass=dir permissive=0

宗旨是:缺啥补啥,并遵循如下规则:

{ getattr } 缺少的权限
scontext=u:r:system_app:s0 谁缺此权限
tcontext=u:object_r:hht_data_file:s0 对哪个类型文件缺少权限
tclass=dir 什么类型文件

若avc: denied过多,考虑使用audit2allow工具,可以获取日志中的所有拒绝事件并将其转换成相应的SELinux政策声明。
如下添加到对应的*.te文件中即可:
在这里插入图片描述

#============= 源类型 ==============
allow 源类型 目标类型:访问类型 操作权限;
完整的意思是:“源类型"进程对"目标类型"的"访问类型"缺少"操作权限”

5、编译验证:mmm /system/sepolicy或make selinux_sepolicy
push如下selinux产物验证:

adb push ***\out\target\product\rk3588_t\odm\etc\selinux /odm/etc
adb push ***\out\target\product\rk3588_t\product\etc\selinux /product/etc
adb push ***\out\target\product\rk3588_t\system\etc\selinux /system/etc
adb push ***\out\target\product\rk3588_t\system_ext\etc\selinux /system_ext/etc
adb push ***\out\target\product\rk3588_t\vendor\etc\selinux /vendor/etc

6、ls -aZ查看文件SELinux上下文
SELinux标签提供了用户(u)、角色(object_r)、类型(hht_data_file)和级别(s0)等信息用于做出访问控制决策。
在这里插入图片描述

7、参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值