如何排查并解决SEAndroid 的审计不通过

Android 5.0 之后,SEAndroid所有的部分均为Enforcing模式;如果当某个操作不被SEAndroid允许时,例如对文件进行write,该如何排查出信息,同时,在sepolicy中,添加上相应的allow语句,将权限开放出去;

1:SEAndroid不允许时,log记录在哪里?
SEAndroid的审计不通过时,log记录在dmesg 中,dmesg是kernel的log,如果想要获取该log,可以使用如下命令:
adb shell su -c dmesg    ----- 获取kernel log

2: 查看SEAndroid 不允许的log
SEAndroid 审计不通过的log,带有"avc:" 所以,用如下命令即可搜集到审计不同的log:

adb shell su -c dmesg | grep 'avc:'  ---- 得到审计不通过的log信息

如果有审计不通过的,会得出如下类似的信息:
<5> type=1400 audit: avc:  denied  { read write } for  pid=177
comm="rmt_storage" name="mem" dev="tmpfs" ino=6004 scontext=u:r:rmt:s0
tcontext=u:object_r:kmem_device:s0 tclass=chr_file
不被允许的操作是:read 和write
访问者是:u:r:rmt:s0
被访问者是:u:object_r:kmem_device:s0
操作对象是:chr_file

相当于在sepolicy 策略语言中,缺乏这样的语句allow rmt kmem_device:chr_file {read write}

TIP:
pid=177 表示访问者所在的进程,comm中给的是一个提示,表示当这个denial发生时,什么正在运行;

3:如何消除这样的不通过
很简单,可以直接在sepolicy中加上这样的策略语句;
例如上处avc不通过,可以在/external/sepolicy/ 目录下,新建一个test.te
在test.te 中写入, allow rmt kmem_device:chr_file {read write},
重新编译策略语言,刷机即可;

但是当avc很多时,人工去看容易出错且慢,我们可以使用工具来完成这项工作;

selinux/policycoreutils/audit2allow环境搭建:
测试电脑的配置是:unbutu 12.04
step 1:在 ubuntu中安装policycoreutils
sudo apt-get install policycoreutils

step 2 : 使用audit2allow 工具完成策略语言的添加:
adb shell su -c dmesg | audit2allow

例如上诉avc语句就会输出:
#============= rmt ==============
allow rmt kmem_device:chr_file { read write };

TIP:
1: 要知道,audit2allow是policycoreutils中的工具之一
2:如果在ubuntu 14.04 或者更新的版本中,可以直接将策略语句插入到编译好的sepolicy中
命令如下:
adb shell su -c dmesg | audit2allow -p out/target/product/<device>/root/sepolicy

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值