如何为自行编译的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
相关产品推荐
相关产品推荐

