*
问题描述
使用 Android 10 并尝试启用 SELinux AVC 日志时未能成功。无论设置 setenforce
是 0 还是 1,都未能通过 /proc/kmsg
或 logcat
获取 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
或类似工具获取详细信息,以诊断潜在的策略问题:
-
启动审计日志功能:
sh
echo 1 > /sys/module/audit/parameters/enabled -
重启设备或重新加载相关驱动程序。
-
查找详细的 AVC 违规报告:
根据实际策略文件进行修改和添加例外规则至/etc/selinux/config
文件中。
总结与注意事项
- 通过上述方法排查 AVC 日志问题。
- 检查 SELinux 策略配置是否足够开放以允许日志记录功能。
- 如果开发或修补 Android 设备,请注意 SELinux 内核模块及相关内核参数的正确性。
由于 SELinux 默认为部分设备上的“强制模式”,确保所有应用程序遵循安全策略。通过逐步方法和尝试不同方案最终确定问题所在。如果依然失败,那么可能是因为某些限制机制(如 sePolicy
设置)阻止了日志记录过程;或者存在配置错误导致无法正确启用 AVC 记录。