2012年02月09日

Androidのadbのメモ(11) adbdのsecureモード

KZM-A9-Dualボードなどの評価ボードに自分でビルドしたAndroidを載せるときにはadbdがroot権限で実行できるようになっていますが、市販のAndorid端末ではそうなっていません。この違いについて調べました。



secureモードのadbd

system/core/adb/adb.c: adb_mainを見ると

secure == 1 のとき

  • groupの追加
        /* add extra groups:
        ** AID_ADB to access the USB driver
        ** AID_LOG to read system logs (adb logcat)
        ** AID_INPUT to diagnose input issues (getevent)
        ** AID_INET to diagnose network issues (netcfg, ping)
        ** AID_GRAPHICS to access the frame buffer
        ** AID_NET_BT and AID_NET_BT_ADMIN to diagnose bluetooth (hcidump)
        ** AID_SDCARD_RW to allow writing to the SD card
        ** AID_MOUNT to allow unmounting the SD card before rebooting
        ** AID_NET_BW_STATS to read out qtaguid statistics
        */
  • gidの変更。setgid(AID_SHELL)
  • uidの変更。setuid(AID_SHELL)
  • rebootできるcapabilityをセット

secure == 0 のとき

  • uid, gidを変更しない。つまりrootのまま。
  • port 5037 のソケットをlistenする。(用途不明。)

secureモードの判定条件

  • emulatorで動いている。--> secure = 0
  • システムプロパティ "ro.secure" == 1 --> secure = 1
    • ただし、システムプロパティ "ro.debuggable" == 1ならば "adb root" でsecure = 0に切り替えることができる。

市販のAndroid端末では "ro.secure" = 1, "ro.debuggable" = 0になっています。

"ro."で始まるシステムプロパティはread onlyで値を変更することはできません。

システムプロパティ"ro.secure"が設定されていない場合はsecure = 1 になるようにプログラムされています。

KZM-A9-Dualボードで確認

$ adb shell id
uid=0(root) gid=0(root)

ターゲットのルートディレクトリにある/default.propのファイルのro.secure=0をコメントアウトして再起動すると

$ adb shell id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)

ro.debuggable=1 なのでadbdをrootモードで再起動できます。

$ adb root
restarting adbd as root
$ (数秒待つ。)
$ adb shell id
uid=0(root) gid=0(root)


トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード