中国のx86タブレットへのrootアクセスを取得しようとしています。 adbで私はルートを持っています。 「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ビットは無視されているようです)。通常のシェルです。
Setuidビットが機能するのを妨げているのは何ですか? 「nosuid」マウントフラグはなく、「setenforcepermissive」でselinuxを無効にしようとしました。
/ systemパーティションは「nosuid」オプションでマウントされ、Androidアプリケーションがsetuidプログラムを実行できないようにします。suidオプションを使用して、一時的にマウント解除して再度マウントできます。
adb Shell mount -o rw,remount /system
http://www.androidauthority.com/Android-4-3-new-security-features-253244/
/ systemパーティションは、接合子によって生成されたプロセスのnosuidにマウントされ、Androidアプリケーションがsetuidプログラムを実行できないようにします。