You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LineageOS自定义守护进程如何不修改系统SEPolicy绕过sys_ptrace的neverallow限制

问题解答

错误原因

你当前的写法不生效是因为SEPolicy的neverallow规则是全局累加生效,不存在覆盖逻辑:

  • 系统system/sepolicy/private/domain.te中定义的neverallow已经明确禁止了除列出的vold/llkd等域外的所有domain获取sys_ptrace权限
  • 你新增自定义neverallow只是额外新增了一条规则,并不会抵消系统原有neverallow的限制
  • 你为valord添加的allow规则和系统原有neverallow冲突,所以编译阶段的SEPolicy合规检查会直接报错

不修改系统SEPolicy源码的可行方案

方案1:替换实现逻辑,避免使用sys_ptrace(最优)

绝大多数进程监控场景不需要用到ptrace能力,你可以改为读取/proc文件系统获取进程运行信息,仅需要为valord添加对应proc文件的读取权限即可,完全不会触发sys_ptrace相关的neverallow限制,示例规则参考:

allow valord proc:file r_file_perms;
allow valord proc:dir r_dir_perms;

方案2:运行时动态修改SEPolicy(适用于必须用ptrace的场景)

编译阶段的neverallow检查仅针对静态编译进rom的SEPolicy规则,你可以放弃在静态规则中加权限,改为开机阶段动态注入权限:

  1. 删掉你之前写的allow valord self:global_capability_class_set sys_ptrace规则,以及你新增的自定义neverallow规则
  2. 在init的开机执行脚本中加入如下命令(需要rom支持supolicy工具,userdebug/eng版本默认自带,user版本如果有root权限也可以手动集成):
supolicy --live 'allow valord self global_capability_class_set sys_ptrace'

该命令会在系统启动后动态修改运行时的SEPolicy规则,不会触发编译阶段的neverallow检查,也能解决你日志中提到的权限拒绝问题。

方案3:利用userdebug/eng版本的豁免规则

如果你编译的是userdebug或者eng版本,可以将valord加入到userdebug_or_eng的豁免域列表中,只需要在你的自定义规则中添加如下声明即可:

userdebug_or_eng(`
  allow valord self:global_capability_class_set sys_ptrace;
')

因为系统原有neverallow规则中已经对userdebug_or_eng标记的规则做了例外适配,这种写法在userdebug/eng版本编译时不会触发neverallow报错,同时也不需要修改系统源码。

内容的提问来源于stack exchange,提问作者user6012107

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:06:03