sharedUserIdにrootを指定する方法

5,061 views
Skip to first unread message

藤本健太

unread,
Jul 24, 2011, 7:12:20 PM7/24/11
to 日本Androidの会
藤本です。
いつも、大変参考にさせてもらっております。

今回、sharedUserIdにrootを指定する方法が無いか
皆様のご意見を頂きたく質問させてください。

現在、Android2.3のソースをビルドして
ファイルのパーミッションを任意に変えるアプリを作成しようと思っています。
最初はManifestファイル内にあるsharedUserIdにandroid.uid.systemを当てて、
systemとして権限を変更しようと考えていましたが、
例えば、sdcard内のファイルはsystemではアクセス出来ないため、
rootとして、実行出来ないかと考えました。

そこで、作成アプリのManifestファイルにsharedUserIdとしてandroid.uid.rootと指定し、
PackageManagerService.javaにandroid.uid.systemに倣って以下を追加しました。

mSettings.addSharedUserLP("android.uid.root",
             MULTIPLE_APPLICATION_UIDS
                             ? 0 : FIRST_APPLICATION_UID,
             ApplicationInfo.FLAG_SYSTEM)

ここで、"0"というのはandroid_filesystem_config.hで定義されたrootのUIDです。
以上の改変を行い、ビルドも通ったのですが、
作成したアプリに改変が反映されませんでした。
何故か改変前のレイアウトになっていました。

rootをsharedUserIdとして用いることは不可能なのでしょうか?
どなたか解法を持っている方がいましたらご教授のほど、よろしくお願い致します。 


ohisamallc

unread,
Jul 24, 2011, 9:08:23 PM7/24/11
to android-g...@googlegroups.com
山形のohisamaです。
山形は、蒸し蒸しします。
がんばろう東北。

android1.6しか、知りませんが、
androidのアプリは、サンドボックス内でしか、
動作しません。セキュアです。
jniであっても、守られています。
そこから、逸脱するには、マニフェストの中で
パーミッションを宣言します。
今回は、sd-cardですね。

次の逸脱する方法が、準備されてます。
「他のアプリケーションと同じプロセス内で
実行し、アクセスを共有する。」
具体的には、マニフェストでアプリケーションに
同じ ID を割り当てて
同じ鍵を使って、アプリケーションに署名して、
インストールしる。

この場合、rootの鍵が必要かと。
自分は、この方法は、成功してません。
ですので、存在すらも謎です。

ファイルのパーミッション変更は、システムの
脆弱性そのものです。root獲った携帯で
開発時に使う用途に限定すべき。


藤本です。
いつも、大変参考にさせてもらっております。


今回、sharedUserIdにrootを指定する方法が無いか
皆様のご意見を頂きたく質問させてください。


そこで、作成アプリのManifestファイルにsharedUserIdとしてandroid.uid.rootと指
定し、
PackageManagerService.javaにandroid.uid.systemに倣って以下を追加しました。


rootをsharedUserIdとして用いることは不可能なのでしょうか?
どなたか解法を持っている方がいましたらご教授のほど、よろしくお願い致します。


--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られて
います。
このグループに投稿するには、android-g...@googlegroups.com にメールを
送信してください。
このグループから退会するには、
android-group-j...@googlegroups.com にメールを送信してくださ
い。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja
らこのグループにアクセスしてください。

Nikolay Elenkov

unread,
Jul 24, 2011, 9:52:35 PM7/24/11
to android-g...@googlegroups.com
2011/7/25 藤本健太 <fujimoto....@gmail.com>:

> 藤本です。
> いつも、大変参考にさせてもらっております。
> 今回、sharedUserIdにrootを指定する方法が無いか
> 皆様のご意見を頂きたく質問させてください。
> 現在、Android2.3のソースをビルドして
> ファイルのパーミッションを任意に変えるアプリを作成しようと思っています。
> 最初はManifestファイル内にあるsharedUserIdにandroid.uid.systemを当てて、
> systemとして権限を変更しようと考えていましたが、
> 例えば、sdcard内のファイルはsystemではアクセス出来ないため、
> rootとして、実行出来ないかと考えました。

システム権限を付与したい場合は、通常 'android.uid.system'を指定します。
そのときは、更に、プラットフォーム鍵で署名する必要があります。
( /build/target/product/security/あたりにあります)

また、root化されたデバイスだと、suコマンドでroot権限が取れます。
そのときは、superuser.apkのダイアログが出て、ユーザがUIで
許可する必要があります。

ただ、SDカードはVFATなので、パーミッションは元々ありません。

l.b.

unread,
Jul 24, 2011, 10:05:07 PM7/24/11
to android-g...@googlegroups.com

 村上です。

 もう少し前提条件をはっきり説明していただいたほうがよいかと思います。

 PackageManagerServiceを修正していることから、デバイスに載せるソース全体を修正可能な環境ということでよいでしょうか。
 また作成しているアプリはAndroidのソースに組み込んでビルドし、プラットフォームと同じ署名をされるということでしょうか。

 実現したいことも、ファイル所有者が誰であれ、ファイルパーミッションをUI上から変更したいということですか?

 android.os.Process内のユーザー定義にROOT_UIDが無いことからも、Androidアプリがroot権限で動作するということは
一般的でないのだと考えます。
 ActivityManager等でuidがProcess.SYSTEM_UIDであるかのチェックをしている箇所に比べ、uidが0またはProcess.SYSTEM_UIDで
あるかをチェックしている箇所が少ないことからも、こういう条件で弾かれている可能性がありそうです。

 では。

藤本健太

unread,
Jul 25, 2011, 12:08:14 AM7/25/11
to android-g...@googlegroups.com

ohisama様
Nikolay様
村上様

ご回答くださり、大変ありがとうございます。
村上様のおっしゃるように前提条件がちゃんと説明できてませんでした。
申し訳ございません。

前提としては、村上様が想定したことで合っています。
ActivityManagerなどで弾かれている可能性は考えていませんでした。弾いている箇所がないか調べてみたいと思います。
ありがとうございました。

また、Nikolay 様が言うように、SDカードのファイルシステム上、パーミッションを任意ファイルごとに設定できないことは初めて知りました。
SDカード内で、パーミッションを任意に変更し、ファイラーなどが参照できないようにしてみたかったのですが、
別の手法を考えてみたいと思います。

皆様、大変ありがとうございました。

2011/07/25 11:05 "l.b." <hideaki....@gmail.com>:
Reply all
Reply to author
Forward
0 new messages