web-dev-qa-db-ja.com

ROMをルートするのではなく、ソースコードから特定のアプリケーションへのルートアクセスを許可する方法

Android ROMソースから)をコンパイルしています。1つのアプリケーションをプレインストールし、root権限で実行させます。

ROM全体をルート化せずに、この特定のアプリケーションへのルートアクセスを許可するにはどうすればよいですか?

8
Charles Liu

うまくいけば、ルートは必要ありません...

一般的なストックAndroid ROMは、 最小特権の原則 に沿って、ごく一部のものにルート特権を提供します。代わりに、アプリには必要な正確な権限が付与されます。

このアプリにroot権限が必要なのはなぜですか?最初に すべての内部の非公開Android権限 のリストを調べて、それらの1つが希望どおりに機能するかどうかを確認する必要があります。システムアプリを構築しているため、他のアプリでは通常使用できないsignature権限を使用することもできます。 Android ROMを構築するときに使用したキーでアプリが署名されていることを確認するだけです。その後、ROMを使用して、または個別に配布できます。また、必要な権限にアクセスできます。

この方法で行うことの利点は次のとおりです。

  • アプリが危険にさらされているかバグがある場合、影響は限られています。
  • 実際のJavaコードにはこれらの権限があるため、手間のかかるコマンドラインを作成する必要はありません。

したがって、この方法でタスクを実行できる場合は、実行してください。

しかし、本当にそうするなら...

Rootが本当に必要な場合、物事はトリッキーになります。

3つのオプションがあります。優先順に:

  • 新しいシステムサービスを追加します。
  • 必要なことだけを行う代替のsetuid-rootバイナリを追加します。
  • suバイナリを変更して、誰が呼び出しているかを正確に確認します。

本当にrootが必要な場合は、 新しいシステムサービスを追加 します。これはルートとして実行できます。次に、適切な追加のAPIを追加して、アプリがそのAPIを呼び出せるようにします。また、権限をsignatureレベルにして、システムアプリのみが呼び出すことができるようにします。これは、Androidランドでこれを行うためのアーキテクチャ上「正しい」方法です。

2番目または3番目のオプションでは、必要なコマンドラインツールを作成する必要がありますが、そのようなツールが呼び出し元を確認するための安全な方法はわかりません。どのアプリからもこの機能を呼び出せるようにしても問題ありません。その場合は、新しいsetuid-root実行可能ファイルが適しています。しかし、私が言うように、私はそれを実行している他のアプリを停止する方法を知りません。

10
Adrian Taylor