SeLinux:有关system_app的权限问题

 

SELinux 即Security-Enhanced Linux,由美国国家安全局(NSA)发起,Android 4.4引入,L相对较为全面成熟,具体的信息如博客:

https://blog.csdn.net/bsxiaomage/article/details/51126826 作者 lansehai2014

Selinux的两种模式分别为:1.Enforcing表示seLinux已经打开;.Permissive表示seLinux已经关闭;可以通过adb命令查看设备Selinux权限:

1.查看Selinux的打开状态

adb shell getenforce

2.Permissive模式关闭Selinux

adb shell setenforce 0

3.Enforcing模式打开Selinux

adb shell setenforce 1

再进行一些读写操作时候,可能出现报错停运的问题,抓取log可以发现类似下面信息:

01-01 07:03:04.176 4545 4545 E libc : Access denied finding property "logd.logpersistd.enable" 01-01 07:03:04.175 4545 4545 W ndroid.settings: type=1400 audit(0.0:505): avc: denied { open } for path="/dev/__properties__/u:object_r:logpersistd_logging_prop:s0" dev="tmpfs" ino=293 scontext=u:r:system_app:s0 tcontext=u:object_r:logpersistd_logging_prop:s0 tclass=file permissive=0 01-01 07:03:04.178 4545 4545 W libc : Unable to set property "persist.logd.logpersistd.buffer" to "": error code: 0x18 01-01 07:03:04.179 4545 4545 D AndroidRuntime: Shutting down VM --------- beginning of crash 01-01 07:03:04.184 4545 4545 E AndroidRuntime: FATAL EXCEPTION: main 01-01 07:03:04.184 4545 4545 E AndroidRuntime: Process: com.android.settings, PID: 4545

主要权限相关的信息,主要查找标红位置:

avc: denied { open } for path="/dev/__properties__/u:object_r:logpersistd_logging_prop:s0" dev="tmpfs" ino=293 scontext=u:r:system_app:s0 tcontext=u:object_r:logpersistd_logging_prop:s0 tclass=file permissive=0

相关信息代表的含义如下:

avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类别 permissive=0

可以发现是有关system_app的权限问题,此时可以查看设备的selinux权限是否打开?如果未打开可以用adb shell setenforce 1设置权限再去验证是否报错

代码端修改:

1.提取log信息:allow 源类型 目标类型:访问类别 {权限};

2.在文件alps/device/mediatek/sepolicy/basic/non_plat/system_app.te里添加对应的selinux权限:

allow system_app logpersistd_logging_prop:file { open };

获取权限的代码容易出错,可以使用audit2allow生成。

3.audit2allow使用

1).新建文档Myselinux,并将权限log复制进去(两次,一般第一次识别不了)

avc: denied { open } for path="/dev/__properties__/u:object_r:logpersistd_logging_prop:s0" dev="tmpfs" ino=293 scontext=u:r:system_app:s0 tcontext=u:object_r:logpersistd_logging_prop:s0 tclass=file permissive=0 avc: denied { open } for path="/dev/__properties__/u:object_r:logpersistd_logging_prop:s0" dev="tmpfs" ino=293 scontext=u:r:system_app:s0 tcontext=u:object_r:logpersistd_logging_prop:s0 tclass=file permissive=0

2).命令生成代码

audit2allow -i Myselinux

3).重新打开Myselinux就可以拿到生成的代码

allow system_app logpersistd_logging_prop:file { open };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值