AOSP 9中SELinux策略配置失败及禁用问题求助
听起来你在给AOSP 9添加sierra_config_ip守护进程时遇到了典型的SEPolicy编译验证问题,我来一步步帮你理清思路解决:
为什么禁用SELinux启动参数没用?
首先要明确:AOSP构建阶段的SELinux策略编译与验证是独立于系统启动时的SELinux状态的。你在BOARD_KERNEL_CMDLINE里加enforcing=0只是控制系统启动后的SELinux模式,完全不影响构建过程中对策略规则的检查,所以错误必然会持续出现。
解决"unknown type sierra_config_ip"的问题
你直接在domain.te里添加-sierra_config_ip时出现类型未知,是因为SEPolicy的编译有顺序:公共策略文件(比如domain.te)会在设备自定义策略之前被处理,此时你的sierra_config_ip类型还没被定义,自然会报错。正确的做法是不要修改公共策略文件,而是通过设备级的策略例外来处理。
具体修复步骤
1. 确保自定义SEPolicy文件被正确编译
首先检查你的sierra_config_ip.te和file_contexts是否被纳入构建系统:
- 在设备目录的
sepolicy.mk(或device.mk)中,添加你的SEPolicy目录:BOARD_SEPOLICY_DIRS += device/[你的厂商名]/[你的设备名]/sepolicy # 如果是vendor进程,还要添加vendor策略目录 BOARD_VENDOR_SEPOLICY_DIRS += device/[你的厂商名]/[你的设备名]/sepolicy/vendor - 或者直接指定要包含的te文件:
BOARD_SEPOLICY_UNION += sierra_config_ip.te
这一步是确保你的sierra_config_ip类型能被编译系统识别,避免后续的"unknown type"错误。
2. 针对neverallow违规添加设备级例外
创建一个设备级的例外策略文件(比如sepolicy/sierra_config_ip_exceptions.te),针对你遇到的10处违规逐一处理。举个例子,如果违规是neverallow domain ~{ allowed_domains }:capability BLOCK_SUSPEND;,你可以在例外文件中写:
# 排除sierra_config_ip的neverallow规则 neverallow domain -sierra_config_ip:capability BLOCK_SUSPEND; # 同理处理其他capability或资源的违规,比如NET_ADMIN、NET_RAW neverallow domain -sierra_config_ip:capability NET_ADMIN; neverallow domain -sierra_config_ip:capability NET_RAW;
然后把这个例外文件也添加到BOARD_SEPOLICY_UNION中:
BOARD_SEPOLICY_UNION += sierra_config_ip_exceptions.te
这种方式不会修改公共策略,而且因为设备级策略在公共策略之后编译,所以sierra_config_ip类型已经被定义,不会出现未知类型错误。
3. 标记守护进程为Vendor Domain(可选但推荐)
因为你的守护进程放在/vendor/bin下,属于vendor进程,建议在sierra_config_ip.te中添加vendor域标记:
type sierra_config_ip, domain; permissive sierra_config_ip; type sierra_config_ip_exec, exec_type, file_type, vendor_file_type; # 添加vendor_file_type init_daemon_domain(sierra_config_ip) vendor_domain(sierra_config_ip) # 标记为vendor域
这能让你的进程避开一些针对system域的neverallow规则,减少违规数量。
4. 查看详细违规日志,针对性修复
执行make sepolicy -j$(nproc)来单独编译SEPolicy,获取详细的违规信息。比如日志会告诉你具体是哪条neverallow规则被触发,涉及的资源类型是什么,然后你就可以精准地在例外文件中添加排除规则,或者调整守护进程的权限(比如如果某些capability不是必须的,就从init.rc中移除)。
最后验证
完成上述修改后,重新执行AOSP构建,SEPolicy编译阶段的neverallow违规应该会被解决。如果还有问题,再根据新的日志调整策略即可。
内容的提问来源于stack exchange,提问作者natmendes

