2015-11-18 25 views
7

私は以前、カスタムデバイス(/ dev/mydev0)にアクセスするためのスタンドアロンデーモンを作成していました。 AOSPのソースを見て、私はそれを動作させるためにファイルを以下に設定ポリシーを必要と考え出し:AndroidシステムサービスのSELinuxポリシー定義:設定方法?

含む新しいファイルdevice.te:

# service flash_recovery in init.rc 
type mydevsrvc_type, domain; 
type mydevsrvc_type_exec, exec_type, file_type; 

init_daemon_domain(mydevsrvc_type) 

allow mydevsrvc_type mydev_device:chr_file rw_file_perms; 

を含む

type mydev_device, dev_type; 

新しいファイルmydevsrvc.teを追加するfile_contextsを編集:

/dev/mydev[0-9]* u:object_r:mydev_device:s0 

編集したservice_contextsを追加する:

mydevsrvc     u:object_r:mydevsrvc_type:s0 

そして、これらの行含まれるようにinit.flo.rcを編集して、デーモンを開始しました:

service mydevsrvc /system/bin/mydevsrvc 
    class main 
    user system 
    group system 
    seclabel u:r:mydevsrvc_type:s0 
    oneshot 

を、私はAndroidアプリでデバイスにアクセスする必要があるので、私はにデーモンを変更する必要がありますアンドロイドシステムサービス。

a previous question

で説明したように、私はこのJavaのサービスものdevのファイルにアクセスすることができるようにセットアップSELinuxのポリシーにどのように把握することはできませんよ意図BOOT_COMPLETEDを使用してサービス(スレッド)を起動することができます。

[更新]この目的のために特権デーモンを使用し続けました。私のJavaサービスはソケット経由でデーモンに接続します。私はよりよい解決策を持っていません。

は、カーネルお​​よび設定でSELinuxのサポートを追加します。

+0

実際には、このデーモンのポリシーの開発中に、プロセスを起動するコンポーネントがプロセスのドメインを設定する必要があることに気付きました。今、私はinit * .rcがデーモン用のドメインをセットアップできる場所であることを発見しました。私は、Javaベースのアンドロイドサービスのためのドメインを設定する場所を見つけることができませんでした。 – GPS

+0

誰かがそれを見ているなら、私はネイティブデーモンをinit.rcから開始し、アンドロイドのLinuxソケットを通して私の特権のないJavaサービスからそれと通信することに決めました。 – GPS

+0

ここにinit.rcの 'dervice'コマンドの構文があります https://stackoverflow.com/questions/8905593/whats-language-of-init-rc-in-android –

答えて

3

許可を与えるためにあなたのueventd.rcファイルまたは特定のプロジェクトでの行を追加します。多くのため

。私のようなSEPolicyのnoobsが似たような答えを探しているので、ここに投稿してください。

私のサービスを実装しているJavaアプリケーションからデバイスファイルにアクセスできるようにする必要がありました。

私は新しいファイルで、私のsepolicyディレクトリで以下のルールを追加するために必要な:また

allow system_app mydev_device:chr_file rw_file_perms;

system_appドメインでの私のサービスアプリケーションの実行を行うために必要な。このためには、次のことが必要です:

  1. Androidのインストール中にpriv_appにインストールしてください。
  2. プラットフォームキーで署名
  3. マニフェストで共有ユーザーIDを宣言する:android.uid.system。これがなければ、アプリはドメインplatform-appで実行され、対応するSEPolicyルールの変更でもデバイスファイルにアクセスできませんでした。しかし、私がデバッグするのをやめた理由は分かりません。

mydevsrvc_typeドメインでサービスアプリを実行することもできます。私はそれをどうやって行うのか、それがうまくいくかどうかは分かりませんでした。

2

はここにあなたのAndroidデバイス上でSELinuxを実装するために必要な手順の概要です。 initから起動した各サービス(プロセスまたはデーモン)に、独自のドメインを付与します。 これらのサービスを識別する方法は次のとおりです。 init..rcファイルを確認し、すべてのサービスを検索します。 init:Warning!という形式の警告を調べます。サービス名にはSELinuxドメインが定義されている必要があります。修正してください! dmesg出力にあります。 ps -Zを確認する|どのサービスがinitドメインで実行されているかを確認するgrep init出力。 すべての新しいプロセス、ドライバ、ソケットなどにラベルを付けます。適用するポリシーと適切に相互作用するように、すべてのオブジェクトに適切なラベルを付ける必要があります。ラベル名作成の例については、AOSPで使用されているラベルを参照してください。 すべてのラベルを完全にカバーし、権限を絶対最小限に制限する研究所セキュリティポリシー。 理想的には、OEMはAOSPのポリシーから始まり、独自のカスタマイズのために構築します。 https://source.android.com/security/selinux/implement.html

+3

私はこのテキストを見ました。私はinit * .rcからアンドロイドサービスを起動する方法を理解できませんでしたか?私のサービスを起動するためにinit.rcにどの行を追加することができますか? また、BOOT_COMPLETEDを使用してサービスを開始した場合、このサービスのドメインをどのようにマークしますか? – GPS

+0

@Suzan Mak Aもっと知りたい=) – HenriqueMS

0

は、おそらく私は最終的に答えを考え出した

関連する問題