私は以前、カスタムデバイス(/ 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アプリでデバイスにアクセスする必要があるので、私はにデーモンを変更する必要がありますアンドロイドシステムサービス。
で説明したように、私はこのJavaのサービスものdevのファイルにアクセスすることができるようにセットアップSELinuxのポリシーにどのように把握することはできませんよ意図BOOT_COMPLETEDを使用してサービス(スレッド)を起動することができます。
[更新]この目的のために特権デーモンを使用し続けました。私のJavaサービスはソケット経由でデーモンに接続します。私はよりよい解決策を持っていません。
は、カーネルおよび設定でSELinuxのサポートを追加します。
実際には、このデーモンのポリシーの開発中に、プロセスを起動するコンポーネントがプロセスのドメインを設定する必要があることに気付きました。今、私はinit * .rcがデーモン用のドメインをセットアップできる場所であることを発見しました。私は、Javaベースのアンドロイドサービスのためのドメインを設定する場所を見つけることができませんでした。 – GPS
誰かがそれを見ているなら、私はネイティブデーモンをinit.rcから開始し、アンドロイドのLinuxソケットを通して私の特権のないJavaサービスからそれと通信することに決めました。 – GPS
ここにinit.rcの 'dervice'コマンドの構文があります https://stackoverflow.com/questions/8905593/whats-language-of-init-rc-in-android –