1. audit2allow工具的使用
audit2allow 命令的作用是分析日志,并提供允许的建议规则或拒绝的建议规则。
1.1 audit2allow的安装
sudo apt-get install policycoreutils
sudo apt install policycoreutils-python-utils
1.2 auditallow的命令
命令 | 含义 | 用法 |
-v | --version | 显示程序的版本号并退出 |
-h | --help | 显示此帮助消息并退出 |
-b | --boot | 自最近启动的audit的审计消息,与-i冲突 |
-a | --all | 从审计的log中读取输入,与-i冲突 |
-i<输入文件> | --input | 从输入文件中读取输入 |
1.3 audit2allow的使用
第一步:从android log中获取对应的avc log文件
直接抓取avc log命令如下:
adb logcat –b all | grep avc >avc_log.txt
也可以从抓取到的android log中,筛选导出avc log
一般avc_log.txt内容如下:
06-25 04:39:15.811 4534 4534 I auditd : type=1400 audit(0.0:122): avc: denied { execute } for comm="gripper-backgro" path="/data/user/10/tv.danmaku.bilibilihd/lib-main/libijkffmpeg.so" dev="dm-39" ino=37776 scontext=u:r:platform_app:s0:c522,c768 tcontext=u:object_r:app_data_file:s0:c522,c768 tclass=file permissive=0
第二步:处理log文件
此时需要将生成的log文件最后一行未打全的log进行删除
第三步:使用audit2allow工具生成te文件
在ubuntu终端下使用audit2allow工具,直接分析log生成对应的te文件
audit2allow –i avc_log.txt >avc_log.te
生成的avc_log.te对应的内容例如下:
#============= platform_app ==============
allow platform_app app_data_file:file execute;
第四步:根据抓取的生成的te文件确定需要添加的文件名
此时========platform_app.te========
表示需要在platform_app.te这个文件下添加提示的te语句
allow platform_app app_data_file:file execute;
第五步:编译打包
重新对Android源代码进行编译打包生成img文件
第六步:将ubuntu下编译的镜像刷写进入机器中
android侧常用刷写指令
fastboot devices:列出所有已经进入fastboot模式的设备
fastboot erase system 擦除设备指定的分区
fastboot flash system system.img 将指定的image文件刷入设备的指定分区
fastboot reboot:重启设备
第七步:验证
开机启动后,找到之前报avc错platform_app对应的进程名:tv.danmaku.bilibilihd
ps -A|grep tv.danmaku.bilibilihd
然后抓取avclog,自己添加的te语句对应的avc log是否出现,若未出现,则修改成功。
logcat -b all --pid=3584|grep avc
或者直接看对应的程序有没有正常运行,若正常运行,则修改成功
2.audit2allow无法使用的问题
2.1 问题
在使用audit2allow工具自动生成avc语句时,可能会出现此问题
$ audit2allow -i avc_audit.txt > avc_audit.te
ValueError: You must specify the -p option with the path to the policy file.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/bin/audit2allow", line 381, in <module>
app.main()
File "/usr/bin/audit2allow", line 365, in main
audit2why.init()
SystemError: <built-in function init> returned a result with an error set
2.2 解决方案
对/usr/bin/audit2allow文件进行修改,具体修改方案如下:
$ cd /usr/bin/
$ sudo gedit audit2allow
//把文件的第362行到365行注销掉,保存即可
2.3 验证
重新执行audit2allow –i avc_denied.txt >avc_deniedte.te语句,若正常生成te,则修改成功