赞
踩
SELinex调试
当SELinux处于enforcing模式下时某些程序的执行会失败,在这里总结此类问题的总体分析方法。
1、首先排除DAC权限的问题,使用“ls –l”检查相关文件的属主和权限。如果DAC的权限许可,则就是SELinux的策略显式地拒绝了当前操作的执行。
2、通过“setenforce 0”命令进入permissive模式(getenforce命令查看模式)。此操作可暂时关闭selinux强制访问控制,可直接进行调试,若此时操作还是不允许,则与selinux无关。重启后还原成默认模式。
3、通过“dmesg | grep avc”查看 AVC log,从分析失败操作相应的AVC Denied Msg入手区分问题的根源,以下为一条拒绝信息:
type=1400 audit(1392617891.300:4): avc: denied { write } for pid=1639 comm="fsck.exfat"name="log" dev="tmpfs" ino=1300 scontext=u:r:vold:s0tcontext=u:object_r:log_device:s0 tclass=dir
4、通过log信息可知,源域类型为vold,目标域类型为log_device,客体类别为dir,需要的权限为write,可在device/softwinner/wing-common/sepolicy下添加以下策略:
allow vold log_device:dir { write }
5、以上处理即可允许该操作,若需要自定义新的域类型。从Log中的comm="fsck.exfat"可找到应用名称,然后通过find命令找找到应用所在,然后通过命令“ls -Z /system/bin/fsck.exfat”查看安全上下文,fsck.exfat为system_file类型:
-rwxr-xr-x root shell u:object_r:system_file:s0fsck.exfat
6、添加以下策略及定义:
type newtype, domain; #定义新的域类型
permissive newtype;
type newtype_exec, file_type, exec_type;
domain_auto_trans(vold, newtype_exec, newtype) #域转换宏
unconfined_domain(newtype)
/system/bin/fsck.exfat u:object_r:newtype_exec:s0
allow newtype_exec log_device:dir { write }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。