Android抓取系统logcat以及selinux对其影响

Android kk 之前,要读system/bin/logcat 只需要READ_LOG的权限就可以了。

Android kk 之后 ,  Google正式有限制的启用SELinux来增强安全防患。但是kk版本之后Google只是有限制的启用SELinux,即只针对netd, installd, zygote, vold以及他们直接fork出的child process 使用enforcing mode(强制模式,会对访问进行拒绝) , 但不包括zygote fork的普通app。

Android L   之后 , Google全面开启SELinux,所有的权限都使用enforcing mode。


另外为了限制user版本root使用权限,针对 su 有做特殊的处理(Android KK 之后就已经对 user版本的root有了严重的限制)。


这几天在做Android抓取系统log的APK,用Runntime获取su的process去execute一个logcat命令 的时候报了avc:dined的错误。

后来发现就是selinux的限制引起的。

于是就想通过添加系统服务的方式,启动系统服务区执行一个shell然后在通过shell去执行logcat。

然后就报错被告知我的系统服务被selinux告知需要一个domain.现在正通过添加selinux的domain和规则来尝试。

如果成功将在下个博客中添加 系统服务的添加,以及selinux相关的东西。




已搞定。详见下一篇博客。


### SElinux Root权限配置及问题解决 #### 1. SElinux基础概念 SElinux是一种基于Linux的安全模块,它提供了更细粒度的访问控制机制。即使拥有root权限,也无法绕过SElinux的限制[^1]。 #### 2. 常见Root权限相关问题 在Android开发过程中,可能会遇到由于SElinux导致的各种权限不足问题。例如,在某些场景下,尽管进程具有root权限,但由于SElinux策略的限制,仍然无法完成特定操作[^2]。 #### 3. 解决方案概述 以下是针对SElinux中与root权限相关问题的具体解决方案: ##### (1)调试确认SELinux问题 当怀疑某个问题是由于SElinux引起的时,可以通过以下步骤进行排查: - **检查DAC权限**:使用`ls -l`命令检查目标文件或目录的属主和权限。如果DAC(Discretionary Access Control)允许该操作,则可能是SElinux策略显式拒绝了当前操作[^3]。 ##### (2)临时禁用SElinux强制模式 为了进一步确认问题是否由SElinux引起,可以将设备切换至Permissive模式: ```bash setenforce 0 ``` 此命令会暂时关闭SElinux的强制访问控制功能。如果在此状态下操作成功,则说明问题确实是由SElinux策略引发的[^3]。 ##### (3)捕获并分析AVC日志 通过抓取系统的AVC(Access Vector Cache)日志,可以获得关于被拒绝的操作的详细信息。常用的方法包括: - 执行以下命令导出日志: ```bash adb shell dmesg | grep avc > avc_log.txt ``` - 或者直接从Logcat中提取相关信息: ```bash adb logcat | grep avc ``` 通过对这些日志的解析,能够定位具体的权限缺失项[^3]。 ##### (4)生成并应用新的策略规则 利用工具`audit2allow`可以根据捕捉到的日志自动生成所需的策略规则。例如: ```bash adb shell dmesg | grep avc | audit2allow ``` 得到的结果可以直接嵌入到现有的SElinux政策文件中[^5]。 ##### (5)调整策略文件路径 对于Android系统而言,其默认的SElinux策略存储位置通常位于`system/sepolicy`目录下。如果有新增加或者修改过的策略需求,可以在项目的`BoardConfig.mk`文件里指定额外的策略目录: ```makefile BOARD_SEPOLICY_DIRS += \ <root>/device/manufacturer/device-name/sepolicy ``` 同时,还可以通过内核参数设定启动时加载的状态为Permissive而非Enforcing状态,以便于测试阶段减少干扰因素的影响: ```makefile BOARD_KERNEL_CMDLINE := androidboot.selinux=permissive ``` 这一步骤有助于开发者更加便捷地发现潜在的问题所在[^4]。 #### 4. 实际案例分享 假设某应用程序需要读写WiFi数据文件夹内的内容,但在实际运行期间却遭遇到了“denied”的错误提示。经过初步调查后得知是因为缺乏必要的搜索(`search`)权限所致。此时可根据报错消息手动添加相应条目至policy文件之中,亦或是借助自动化脚本来简化流程处理过程[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值