我正在尝试获取我的中国 x86 平板电脑的 root 访问权限。使用 adb,我拥有 root 权限。我复制了一个“sh”二进制文件并设置了 setuid 位,然后从 adb 中它按预期工作:
1|shell@x98air3g_c5j8:/ $ which su.sh
/system/xbin/su.sh
shell@x98air3g_c5j8:/ $ ls -al /system/xbin/su.sh
-rwsr-sr-x root shell 395004 2016-01-02 17:39 su.sh
shell@x98air3g_c5j8:/ $ mount | grep system
/dev/block/by-name/system /system ext4 ro,seclabel,noatime,data=ordered 0 0
shell@x98air3g_c5j8:/ $ su.sh
#
但是,当通过平板电脑本身调用相同的二进制文件时(在终端仿真器中),它不会保留 root 权限(setuid 位似乎被忽略)。只是普通的 shell。
是什么阻止了 setuid 位工作?没有“nosuid”挂载标志,我尝试使用“setenforce permissive”禁用 selinux。
答案1
/system 分区使用“nosuid”选项挂载,阻止 Android 应用程序执行 setuid 程序。您可以暂时卸载并使用 suid 选项重新挂载:
adb shell mount -o rw,remount /system
答案2
http://www.androidauthority.com/android-4-3-new-security-features-253244/
/system 分区现在为 zygote 生成的进程安装了 nosuid,从而阻止 Android 应用程序执行 setuid 程序。