[Android开发技巧] 通过avc日志自动生成selinux策略

尊重原创,转载请注明出处!
创作不易,如有帮助请点赞支持~

常规方式

通常,我们添加 selinux 策略的方式是在日志中搜索 avc 相关的报错,然后根据万能公式进行添加:

比如针对以下报错,可以套入公式:

04-03 17:55:58.563     1     1 I /system/bin/init: type=1107 audit(0.0:414): uid=0 auid=4294967295 ses=4294967295 subj=u:r:init:s0 msg='avc: denied { set } for property=af.media.systemready.state pid=495 uid=1041 gid=1005 scontext=u:r:audioserver:s0 tcontext=u:object_r:default_prop:s0 tclass=property_service permissive=1'
scontexttcontext:tclassavc denied的权限
allowaudioserverdefault_prop:property_serviceset

然后,将这句代码添加到audioserver.te即可:

allow audioserver default_prop:property_service set;

但是,当我们添加一个新的进程、或者移植一个新的平台时,日志中存在大量的 selinux 报错,这样一个一个策略手动添加的方法就显得很笨且麻烦了-。-

通过avc日志自动生成对应的selinux策略

linux 系统给我们提供了一个 audit2allow 的工具,利用这个工具,我们只需要抓取完整的日志,过滤出 avc 相关的报错,即可根据这些日志一次性生成对应的策略,然后添加到对应的 te 文件即可。

1、关闭selinux

adb shell setenforce 0

这里虽然暂时关闭了 selinux,但是如果没有添加对应的策略,还是会有 avc 相关日志输出

2、抓取Android层和kernel层的avc报错日志

adb shell logcat | grep avc > logcat_avc.txt
adb shell cat /proc/kmsg | grep avc > kmsg_avc.txt

3、通过audit2allow工具直接生成对应的策略

audit2allow -i logcat_avc.txt  # -i指定avc报错日志文件

PS:有些服务器可能需要手动安装:sudo apt install policycoreutils

4、手动将需要添加的策略添加到对应的源

以下为执行命令后的输出结果,会将各个源的结果都区分开来,方便添加:

#============= cameraserver ==============
allow cameraserver vendor_file:file read;

#============= dhcp6c ==============
allow dhcp6c self:udp_socket ioctl;

#============= audioserver ==============
allow audioserver default_prop:property_service set;

#============= bootanim ==============
allow bootanim vendor_default_prop:file { getattr map open };

由于系统中的 avc 报错很多,根据需要将生成的策略内容添加到对应的源即可,比如 cameraserver.te 等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值