avc: denied { read } for name="event_count" dev="sysfs" ino=28410 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0
时间: 2025-07-12 21:37:32 浏览: 12
<think>嗯,用户遇到了SELinux的AVC拒绝访问问题,具体是system_suspend上下文试图读取sysfs下的event_count文件被阻止了。我需要帮他解决这个问题。
首先,我得回忆一下SELinux的基本机制。SELinux通过类型强制来限制进程的访问权限,即使是以root身份运行,如果策略不允许,访问也会被拒绝。用户提到的是system_suspend.te这个策略文件,可能需要添加新的规则。
接下来,应该确认AVC拒绝的详细信息,使用ausearch或dmesg获取完整日志,确保问题确实是system_suspend进程尝试读取sysfs_wakeup下的event_count文件。需要检查源类型(scontext)是否是system_suspend,目标类型(tcontext)是否是sysfs_wakeup或相关类型,以及权限是否是read。
然后,考虑现有的策略。用户引用的代码中已经有r_dir_file(system_suspend, sysfs_wakeup),这可能允许目录访问,但文件可能需要单独的权限。可能需要使用allow语句直接赋予读取权限,或者使用现有的宏,比如r_file_perms,如果存在的话。
另外,创建自定义策略模块是个好方法,这样升级时策略不会被覆盖。通过audit2allow生成.te文件,然后编译加载。但用户可能需要手动调整生成的策略,确保遵循最小权限原则。
还有,检查文件系统标签是否正确,确保目标文件的SELinux类型是sysfs_wakeup或其他预期类型,如果不是,可能需要用restorecon或chcon修正标签。
最后,测试后确保修改生效,并且没有其他权限问题。同时提醒用户遵循最小权限原则,避免过度授权。</think>### SELinux AVC拒绝访问事件计数器文件的解决方案
#### 1. 确认AVC拒绝详情
首先需要查看完整的AVC拒绝日志,确认以下关键参数:
- 源上下文(scontext): `system_suspend`
- 目标上下文(tcontext): `sysfs_wakeup` 或相关类型
- 操作权限: `read`
- 目标文件路径: `/sys/.../event_count`
使用命令查看日志:
```bash
ausearch -m avc -ts recent | grep event_count
dmesg | grep avc
```
#### 2. 创建SELinux策略模块
在`system/sepolicy/private/system_suspend.te`中添加策略规则:
```te
# 允许读取sysfs_wakeup类型文件
allow system_suspend sysfs_wakeup:file { read open getattr };
# 或使用预定义宏(如果存在)
r_file_perms(system_suspend, sysfs_wakeup)
```
#### 3. 编译并加载策略
```bash
# 编译策略模块
mmp -B system/sepolicy
# 推送新策略到设备
adb push out/target/product/[设备名]/etc/selinux/* /etc/selinux/
# 或直接重新编译系统镜像
```
#### 4. 验证文件标签
确认目标文件的SELinux标签正确:
```bash
ls -lZ /sys/.../event_count
# 若标签异常,修正标签
restorecon -v /sys/.../event_count
```
#### 5. 临时测试方案
```bash
# 设置宽容模式(仅用于调试)
setenforce 0
# 修改文件标签
chcon -t sysfs_wakeup /sys/.../event_count
```
[引用1]中已有基础权限配置,但需要补充文件级访问权限[^1]。[引用4]说明了SELinux的最小权限原则,建议避免过度授权[^4]。
阅读全文
相关推荐




















