Android内核type=1400 AVC权限拒绝问题求助:如何修复该报错?
解决Android内核中SELinux AVC权限拒绝问题
首先,先把你遇到的报错信息贴出来方便分析:
type=1400 audit(506975.539:15): avc: denied { read write } for pid=5920 comm="print" name="prn0" dev="tmpfs" ino=1600 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0
报错核心解析
- 发起请求的是未受信任的应用进程(
scontext=u:r:untrusted_app:s0:c512,c768),也就是你的print程序 - 目标是字符设备文件
prn0,它的SELinux上下文被标记为device类型(tcontext=u:object_r:device:s0) - SELinux拒绝了这个进程对该设备的读写权限(
denied { read write }) - 当前系统处于强制模式(
permissive=0),所以权限拒绝会直接生效
修复方案
方案1:临时测试(快速验证问题)
如果只是想确认是不是SELinux导致的问题,可以临时开启宽容模式,重启后失效:
# 全局临时关闭SELinux强制模式 setenforce 0 # 或者仅针对untrusted_app域设置宽容,不影响其他进程 semanage permissive -a untrusted_app
⚠️ 注意:这只是测试手段,不能作为生产环境的最终解决方案,会降低系统安全性。
方案2:添加自定义SELinux策略(永久修复,推荐)
这是生产环境下的标准修复方式,通过添加最小权限的策略规则来允许进程访问设备:
- 生成初始策略模板
利用系统的审计日志自动生成策略文件:
audit2allow -a -M untrusted_app_print
执行后会得到两个文件:untrusted_app_print.te(策略源码)和untrusted_app_print.pp(编译后的模块)
- 优化策略规则(可选但推荐)
打开untrusted_app_print.te,你会看到自动生成的规则,大概如下:
module untrusted_app_print 1.0; require { type untrusted_app; type device; class chr_file read write; } allow untrusted_app device:chr_file { read write };
可以根据实际需求调整权限(比如只需要读就删掉write),遵循最小权限原则。
- 编译并加载策略
# 编译策略模块 checkmodule -M -m -o untrusted_app_print.mod untrusted_app_print.te semodule_package -o untrusted_app_print.pp -m untrusted_app_print.mod # 加载模块,永久生效(重启后依然保留) semodule -i untrusted_app_print.pp
方案3:调整设备文件的SELinux上下文(适用于自定义设备)
如果prn0是你自己添加的设备,可能它的上下文被错误标记为device,可以调整为应用可访问的上下文:
# 临时调整上下文 chcon u:object_r:app_data_file:s0 /dev/prn0 # 永久设置上下文,添加到文件上下文规则中 echo "/dev/prn0 u:object_r:app_data_file:s0" >> /etc/selinux/targeted/contexts/files/file_contexts.local restorecon -v /dev/prn0
⚠️ 注意:系统默认设备不建议修改上下文,仅适用于你自行添加的设备。
内容的提问来源于stack exchange,提问作者Deepak Nasir
相关产品推荐
相关产品推荐

