构建带宽容SELinux策略的AOSP User版:Pixel 4a适配方案咨询
AOSP 13 User构建默认开启SELinux宽容模式的解决办法
方法1:修改init进程的SELinux初始化逻辑
Android启动时由init进程负责加载SELinux策略,直接修改它的源码就能强制开启宽容模式:
- 找到
system/core/init/selinux.cpp文件,定位到SelinuxInitialize函数 - 注释掉原本根据构建类型设置enforcing的代码,直接添加一行
selinux_setenforce(0) - 注意user构建存在
SELINUX_ENFORCING宏定义,要确保修改后的代码不受该宏限制
方法2:调整SELinux全局策略规则
不想改动init源码的话,可通过修改策略文件实现:
- 找到Pixel 4a对应的策略目录
device/google/sunfish/sepolicy - 在
sepolicy/common/global_sepolicy.te中添加permissive *;,这条规则会让所有域都进入宽容模式 - 若编译时出现neverallow冲突,需逐一排查并注释掉对应的neverallow规则(比如禁止设置permissive的相关规则)
方法3:让内核cmdline参数在user构建中生效
user构建下系统会重置androidboot.selinux参数,修改init的cmdline处理逻辑即可:
- 打开
system/core/init/selinux.cpp,找到解析selinux cmdline参数的代码段 - 删除对user构建的判断分支,直接保留参数生效的逻辑
- 这样即使是user构建,也会读取
androidboot.selinux=permissive参数来开启宽容模式
注意事项
- 以上修改都会破坏user构建的原生安全性,仅适合有特殊需求的场景使用
- 修改后要确保所有文件都在AOSP源码树内,避免编译失败
- 刷入镜像后可通过
getenforce命令验证SELinux状态是否为Permissive
内容的提问来源于stack exchange,提问作者Mehran Alidoost Nia
相关产品推荐
相关产品推荐

