2016-08-22 4 views
1

システムアプリからsdcardまたはmntフォルダにnfs shareをマウントする必要がありますが、mountはルートアクセス権が与えられている場合にのみ動作します。これどうやってするの? (これは、ルートなしでは動作しない1つのプログラムだけではありません。たとえば、自分のシステムでカスタム復旧をフラッシュするのにddをrootにする必要があります)。/system/xbinフォルダにコピーします。 suを実行しようとすると"Permission denied"が表示されますが、adb shellルートは正常に動作します(xbinフォルダで実行できます)。 root権限でシステムアプリケーションを実行するために追加する権限は?ありがとう。Androidでシステムアプリのルートを動作させるにはどうすればよいですか?

プラットフォームキーで構築および署名されたシステムおよびシステムアプリ。私がテストしているアプリケーションは、Manifest.xml

+0

スーパースーパーまたは同等のものをインストールする必要があります。 – ElefantPhace

+0

supersuがインストールされていますが、apkはありません。私は他のアプリがルートを得ることを望んでいない、私はいくつかのプラットフォームアプリケーションのルートを取得したい。 – don11995

答えて

0

唯一の解決策は、ルートプロセスとしてinitによって起動されたサーバーバイナリです。私はLocalSocket経由でjava側から接続できるシンプルなサーバーバイナリを書いて、いくつかのコマンドを送ることができます。システムの起動時にサーバーのバイナリを起動するには、私はinit.rcスクリプトに次の行を追加します。java側で

service suservice /system/bin/suservice 
    class core 
    user root 
    group root 
    socket suservice stream 0600 system system 

を私は、コールバックインタフェースを介して動作し、何か間違っている場合、このサービスまたはエラーからのデータを受信し、簡単なライブラリを書きました。

system:systemとして起動したアプリだけが、このローカルソケットを使用してrootコマンドを実行できます。ユーザーのアプリはPermission deniedとなります。

P.S.サーバーバイナリはすでにrootとして実行されているため、suはバイナリを実行するか保持する必要はありません。今、システムからバイナリsuを完全に削除できます。

+0

こんにちは、あなたの解決策は私に正しい方向を指摘しています。私はすべてをセットアップしましたが、Java側で「権限拒否エラー」を受け取りました。どんな考え?テスト目的のために、ソケットアクセス権を "0666 system system"に設定して、私のアプリケーションを通常のアプリケーションとしてデバッグできるようにしました。多くのthx! – FiniteElement

+0

こんにちは、SELinuxを最初に無効にしてください。ほとんどのルート操作をブロックする可能性があるからです。これは、rootユーザーとしてシェル内の "setenforce 0"コマンドで無効にすることができます。「Permission denied」メッセージが表示される前にlogcatに「[audit]」メッセージが表示された場合、SELinuxで問題が発生し、「suservice」のSELinuxパーミッションを追加し、カーネルを再コンパイルして再リフレッシュする必要があります。 – don11995

+0

私のソケット許可は何とか0600としてとどまっていることが分かりました。代わりにリカバリモードからフラッシュブートする必要がありました。しかし、今私は別のエラーが表示されます。 "接続拒否"。私のSELinuxは許可されており、 "[監査]"関連のメッセージはありません。 SElinuxは問題ではないと思います。 Netstatは、私のソケットがアクティブであることを示しています。 "unix 2 [] STREAM 9238/dev/socket/tcpdump_nc" – FiniteElement

1

suで提供されているように、あなたがそれを呼び出すルートユーザーまたはシェルユーザーであることを確認するための制限があります。このチェックは次の場所にありますhttps://android.googlesource.com/platform/system/extras/+/master/su/su.c#85

このチェックにはシステムUID(AID_SYSTEM)をいつでも追加できます。ただし、システムUIDを持つすべてのアプリケーション/プロセスにブランケットルート特権を付与することで、セキュリティ上のリスクが発生します。これらのリスクに同意し、簡単な解決策が必要な場合は、システムユーザをsu.cでこの行に追加します。

あなたのユースケースを再評価し、アプリケーションが必要なアクションのみを実行するための機能を公開するネイティブデーモン/サービスを作成する可能性があります。ネイティブデーモン自体のPOSIX機能と同様に、より高いレベルのアンドロイドパーミッションでこれを強制することができます。

+0

ああ、申し訳ありません、これを私の投稿に追加するのを忘れました。私はsuファイルに既にAID_SYSTEMを追加していますが、その後はsetgidとsetuid関数で "操作が許可されていません"というエラーが出ました。 rootとして既に実行しているアプリやサービスだけが問題なくこの機能を実行できます。 – don11995

+0

これで進歩はありますか? – shlatchz

関連する問題