SELinux AVC日志问题在Android 10上的解决方法

8次阅读
没有评论

*

问题描述

使用 Android 10 并尝试启用 SELinux AVC 日志时未能成功。无论设置 setenforce 是 0 还是 1,都未能通过 /proc/kmsglogcat 获取 SELinux 攻击日志(AVC 日志)。虽然可以看到有关 setenforce 更改的通知消息,但并未看到任何 AVC 访问拒绝的日志记录。

潜在解决方案

解决方案 1 – 检查 SELinux 配置和权限

首先,请检查您的设备 SELinux 配置是否允许日志记录。您需要确保 auditd 和相关日志文件确实可以写入。如果 /sys/fs/selinux/enforce 设置为 0,这将禁用 SELinux,默认情况下 avc 日志会被抑制。

检查当前设置:

cat /sys/fs/selinux/enforce

修改配置(仅限 root 用户):

若需要永久开启 AVC 日志,请使用以下命令切换:

echo 1 > /sys/fs/selinux/enable

确保 /etc/apparmor.d/policy 或其他相关文件不存在对 auditd 写入限制。

解决方案 2 – 检查日志记录配置

如果在设备启动时已启用日志,那么您需要检查日志记录配置以确保 auditd 守护进程正在运行并且没有错误。

使用以下命令检查守护进程状态:

ps aux | grep auditd

如果未运行或有问题,请重新启动服务:

systemctl restart auditd.service

或者,如果设备支持 setenforce 0 来临时启用所有策略以查看是否因为策略不匹配导致问题:

解决方案 3 – 检查 Ramoops 配置(如果有)

对于 RAMoops 日志存储,确保它配置为正确记录 AVC 违规事件。

首先确认文件系统挂载选项中未关闭日志:

cat /etc/fstab | grep ramoops

如果需要修改,请编辑并重新挂装载入:

mount -o remount,log=ramoops <device>

解决方案 4 —— 检测 SELinux 日志位置和日志文件名(新版本)

在较新的 Android 设备上,AVC 违规记录可能位于 /sys/fs/selinux/enforce 文件中或直接由 auditd 守护进程管理。检查其他已知路径:

cat /var/log/audit/audit.log 

解决方案 5 – 使用 dumpselinux 工具进行排查

如果上述方法均无效,使用 dump-selinux 或类似工具获取详细信息,以诊断潜在的策略问题:

  1. 启动审计日志功能
    sh
    echo 1 > /sys/module/audit/parameters/enabled

  2. 重启设备或重新加载相关驱动程序

  3. 查找详细的 AVC 违规报告
    根据实际策略文件进行修改和添加例外规则至 /etc/selinux/config 文件中。

总结与注意事项

  1. 通过上述方法排查 AVC 日志问题。
  2. 检查 SELinux 策略配置是否足够开放以允许日志记录功能。
  3. 如果开发或修补 Android 设备,请注意 SELinux 内核模块及相关内核参数的正确性。

由于 SELinux 默认为部分设备上的“强制模式”,确保所有应用程序遵循安全策略。通过逐步方法和尝试不同方案最终确定问题所在。如果依然失败,那么可能是因为某些限制机制(如 sePolicy 设置)阻止了日志记录过程;或者存在配置错误导致无法正确启用 AVC 记录。

正文完