AOSP SELinux策略构建文件顺序与checkpolicy语法错误排查
AOSP SELinux 策略构建问题解答
1. 文件包含顺序与M4预处理文件
官方构建的包含顺序(由build/sepolicy.mk管控)
- 基础定义文件:先加载
security_classes、initial_sids、global_macros,这些是SELinux的核心基础类和SID定义 - 属性与宏:接着加载
attributes、type_attrs、te_macros、policy_capabilities,定义通用属性和可复用宏 - MLS配置(若启用):加载
mls相关文件,处理多级安全策略 - 域规则文件:按系统域→核心服务域→应用域→自定义域的顺序加载各类
*.te文件 - 上下文文件:最后处理
file_contexts、genfs_contexts等上下文配置(注意:这类文件不进policy.conf,单独编译)
需要M4预处理的文件
- 所有带
.m4后缀的文件,比如macros.m4、genfs_contexts.m4,以及vendor/device目录下的自定义m4文件 - M4用于处理宏替换、条件编译(比如根据设备架构/型号生成差异化策略),预处理后会生成对应的
.te或.conf文件供后续编译
2. .te文件优先级排序(保障最高安全性)
SELinux策略中后加载的文件规则优先级更高(后定义的规则会覆盖前序冲突规则),因此按以下顺序加载以保障安全:
- 系统通用域规则:
domain.te、base.te,定义所有域的通用约束 - 核心系统服务域:
system_server.te、servicemanager.te,这类高权限域的规则先定义,后续自定义规则可针对性收紧 - 普通应用域:
app.te、untrusted_app.te,定义应用的基础权限 - Vendor/Device自定义域:针对硬件服务、定制应用的规则,放在这里可覆盖系统默认规则
- 安全强化规则:
neverallow规则、审计规则必须放在最后,确保这类安全约束不会被后续规则意外放宽
3. Checkpolicy语法错误与EOF问题排查
关于sid/genfscon语法错误
sid、genfscon是**上下文配置文件(如genfs_contexts、file_contexts)**的关键字,不属于policy.conf的语法范畴!checkpolicy仅编译策略规则(.te生成的policy.conf),上下文文件需用sefcontext_compile单独处理,把这些内容放进policy.conf必然报错。
EOF处语法错误排查步骤
- 检查文件完整性:确认
policy.conf没有被截断,所有代码块(如{})都已闭合,比如某个allow规则的{后没写} - 调试错误位置:执行
checkpolicy -M -C -c 35 -d policy.conf,-d参数会输出更详细的错误位置,而非仅提示EOF - 验证M4预处理结果:单独对所有m4文件执行
m4 input.m4 > output.te,查看输出是否有宏展开异常、语法遗漏 - 回归官方构建流程:不要手动拼接
policy.conf,用AOSP原生的make sepolicy生成标准输入文件,手动修改容易引入格式错误 - 放弃修改checkpolicy源码:这类错误基本是输入文件问题,而非工具本身bug,修改源码无法解决根本问题
内容的提问来源于stack exchange,提问作者Shyam R
相关产品推荐
相关产品推荐

