Android SELinux访问向量规则

一般如果系统某个文件无法访问,log中出现 avc 权限问题,我们只需要在对应 te 中添加 allow 规则就行。如下,只需要在 init.te 中为 vendor_sysfs_graphics:lnk_file 增加 read 权限即可。

init    : type=1400 audit(0.0:14): avc: denied { read } for name="device" dev="sysfs" ino=51107 scontext=u:r:init:s0 tcontext=u:object_r:vendor_sysfs_graphics:s0 tclass=lnk_file permissive=0

但有时候会出现添加 allow 规则后编译不过情况。这种情况一般是由于源码 system 目录下 neverallow 规则冲突导致,需要针对修改 neverallow (system目录下这个修改大概率会导致GMS测试不过)。

上面就是我们最常见的修改。这里涉及到两个访问向量: allowneverallow。除此之外,还有两个不常修改的两个:dontauditauditallow

  • allow              表示允许主体对客体执行后面的操作

  • neverallow    表示不允许主体对客体执行后面的操作

  • dontaudit       表示检查策略信息,但是不记录违反规则的信息

  • auditallow      表示检查策略信息,记录违反规则的信息

前面两个好理解,后面两个简单来说。dontaudit 标记的权限,检查访问者无权限直接阻值,但是不输出任何记录,从log中看不到avc异常之类信息。auditallow 区别就在于会记录违反规则的信息,在log中输出提醒。

例子:

android P之后,/proc/stat CPU信息这个节点就禁止非系统应用访问。通过三方app去读取的话,可以看到有以下提示。

avc: denied { open } for path="/proc/stat" dev="proc" ino=4026532037 scontext=u:r:untrusted_app_all tcontext=u:object_r:proc_stat:s0 tclass=file permissive=1

avc: denied { getattr } for path="/proc/stat" dev="proc" ino=4026532037 scontext=u:r:untrusted_app_all tcontext=u:object_r:proc_stat:s0 tclass=file permissive=1

然后我们在ROM中添加上open getattr权限后。(一般在device目录下新建变化部分权限)

allow untrusted_app_all proc_stat:file  { open getattr };

发现即使log中没有avc异常信息,但是还是无法访问。这是因为 system/sepolicy/private/untrusted_app_all.te 中定义了

# These have been disallowed since Android O.
# For P, we assume that apps are safely handling the denial.
dontaudit untrusted_app_all proc_stat:file read;

 read 这个权限虽然缺少了,但是不会输出。把这行注释掉或者修改成 auditallow 之后,再打印就能看见log中提示缺少 read 权限。

所以,权限添加要增加上read权限,或者,将 dontaudit 修改成 allow 也行

allow untrusted_app_all proc_stat:file  { open getattr read };

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值