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

如何为自行编译的AOSP user版本获取root shell权限

自行编译AOSP user版本获取root shell的最优方案

核心优势:仅做最小源码侵入修改,完全保留user版本原有性能、安全策略等所有原生特性,不依赖第三方工具,稳定性最高。

具体实现步骤如下:

  • 第一步:修改adbd的降权逻辑
    adbd默认在user版本下会自动从root权限降为shell权限,是root shell获取的核心阻断点。
    定位到源码路径 system/core/adb/daemon/main.cpp,找到如下代码段:

    if (ALLOW_ADBD_ROOT && getuid() == 0 && !__android_log_is_debuggable()) {
        drop_privileges(kAidShell, kAidShell, 0);
    }
    

    注释掉drop_privileges调用即可,修改后:

    if (ALLOW_ADBD_ROOT && getuid() == 0 && !__android_log_is_debuggable()) {
        // 跳过降权逻辑,保留adbd的root权限
        // drop_privileges(kAidShell, kAidShell, 0);
    }
    

    同时在你的设备板级配置文件device/[厂商]/smarc_mx8mq/BoardConfig.mk中添加:

    ALLOW_ADBD_ROOT := true
    
  • 第二步:配置SELinux权限
    user版本默认SELinux为Enforcing模式,需要添加规则允许adbd持有root权限,在设备SEPolicy目录下的adbd.te文件中添加:

    allow adbd self:capability { setuid setgid sys_admin };
    allow adbd devpts:chr_file rw_file_perms;
    

    以上规则仅开放必要权限,不会过度放宽系统安全限制。

  • 第三步:编译烧录验证
    正常执行user版本编译流程:

    source build/envsetup.sh
    lunch smarc_mx8mq-user
    make -j$(nproc)
    

    烧录新镜像后,执行以下命令即可获取root shell:

    adb root
    adb shell
    

补充说明

你当前实测根分区无nosetuid挂载参数,不影响root权限获取。如果需要修改系统分区内容,在root shell下执行以下命令即可重新挂载为可读写:

mount -o remount,rw /

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:01