もっとまたは一部を要約し、整理し、いくつかのSELinux、コンテンツネットワークのほとんどのソースのAndroidシステム関連の問題の開発にあまり経験。
1は、を特に参照して、オンラインにSELinux、この情報の多くの基本的な概念を理解します:
http://jingpin.jikexueyuan.com/article/55398.html
http://blog.csdn.net/innost/article/details/19299937/
http://blog.csdn.net/luoshengyang/article/details/37613135
http://www.2cto.com/kf/201504/390742.html
http://www.th7.cn/system/lin/201512/147098.shtml
2、応答ステータスのSELinux
2.1特定の方法、問題が当局によって引き起こされているかどうかを確認し、SELinuxを手動でオフにすることができる
:SELinuxのステータスを確認
SELinuxのステータスパラメータがEnabledにON状態であれば1)は/ usr / sbinに/ sestatus -v ##。
SELinuxのステータス:有効
)2 getenforceは##ものコマンドで確認することができます
近隣のSELinux 2.2:
一時的に閉鎖(再起動しない):
setenforce 0 ##に配置されたのSELinuxなる許可モード
## setenforce 1設けることがSELinuxの強制モード
3、dmesgのログを把握し、システムは、政策の欠如を変換し、
:dmesgのログ
をdmesg | grepをするrpcServer
[8.132704]のinit: 'rpcServer'-サービスを開始しています...
[12.936186]は= 1400監査を入力します(1,449,623,772.120:13です):AVC:読み取り拒否された{174} PID = COMM = "rpcServer"名= "mmcblk0p1" DEV = "tmpfsの" イノ= 8105 scontext = U:R:rpcServer:S0 tcontext = U:object_r:block_device:S0 TCLASS = blk_file許容= 0
このログ上記の例で、あなたはそれが何を意味するのか理解できるようにする必要があります:読み取り権限対象の元プロセス(scontext)ニーズ(tcontext)属性TCLASSプロセス
我々は、特定のデバイス属性のLS -Zは、ps -Z、LS -lなどに関連するファイルを見ることができます
4、必要な権限を追加する方法(これは、処理するために3つのクラスに分けることができます)
1)第1のタイプは比較的簡単で、他のツールによって欠落方針(.TEファイル)に対応する変換モジュールは、audit2allow
sepolicy / rpcServer.teに追加:
allowrpcServer block_deviceを:blk_fileを読んで、それぞれ上記許可scontext tcontext:読み取りTCLASS
2)第二のカテゴリーは、いくつかのポリシーがミックスに追加があると、システムは最政策の転換は、一般的にこの権限が大きすぎるように、デバイスのファイルのアクセス権を持っているプロセスであるため、時間のエラーをコンパイルし、グーグルます(neverallow外部/ sepolicy下)セキュリティポリシーは、競合をしたいです。この場合、我々はあなたが本当に、解決することができます必要なものを元のプロセスの特定のデバイス・ファイルのパーミッションがどの見つける必要があり
、コメントを追加しました:
最初sepolicy / file_contexts定義さmmcblk0p1デバイスノードで:は/ dev /ブロック/ mmcblk0p1 U :object_r:rpc_block_device:S0
sepolicy / rpcServer.te権限でデバイスノードを追加:rpcServerのrpc_block_deviceを許可:読み取りblk_file。
3)
ファイルには、我々は動作しませんマッピングします。その場合には、ターゲットデバイスに、一致していない元のプロセス(ルート、ラジオ、システムなど)のプロパティと。このケースでは、適切な属性内init.rcとueventd.rcを変更する必要があります。
私はここでダウンチェックし、問題の一例です:
vmodemドライバはSOエイブルopentheのパーティションNVM NVMのデフォルト値は問題がpermissionmisマッチでIS期待されていません。:
vmodemドライバコンテキストは「無線」ではないと ブロックデバイスノードは、「ルート」である
mmcblk0p1 NVM計算静的モデムが使用されるので、マウントするrpcServerない権限、第rpcServer及び機器mmcblk0p1は、無線特性の同じセットに設定されている。
ueventd.rcファイル中:
は/ dev /ブロック/ラジオラジオmmcblk0p1 0660
の/ dev / vmodem 0660ラジオラジオ
init.rcとinit.ptest.rcファイル、システム/ binに/ rpcServerユーザー、グループ、ルート・ラジオに属性:
chownコマンドラジオラジオ/ SYS /クラス/その他/ vmodem / modem_state
-サービスrpcServer /システム/ binに/ rpcServer
ソケットmsmSockストリーム660無線システム
コアクラス
ユーザラジオ
グループラジオ
:カーネルと権利rpcServer mmcblk0p1装置に加え
sepolicy / file_contexts定義mmcblk0p1デバイスノードにおいて:は/ dev /ブロック/ mmcblk0p1
U:object_r:rpc_block_device:S0
sepolicy / kernel.teで:allowkernel rpc_block_device:blk_file読む;
sepolicy / rpcServer.te:許可
rpcServerのrpc_block_device:読み取りblk_fileを。
上記2例を解決する第三の異なるプラットフォーム、対応するデバイス及びプロセス属性に応じて特定の分析を必要としながら、同じルーチンです。以下は、ローカルサービスに追加され、次のように実行しないのSELinuxにつながるの理由:
図1は、init.rcに追加されました:
サービスXXX /システム/ binに/ XXX
クラスのメイン
ユーザーroot
機械・ブートコンパイルバーン、我々は次のプロンプトでカーネルログ、サービスxxxは起動できませんが見つかりました:
[20.076354s] [PID:1、CPU 7に、init]のinit:サービスxxxはSELinuxのドメインが定義されている必要はありません。
プロンプト説明が起動することはできませんセルフサービスのXXX、その結果、SELinuxのドメインを定義されていません。この問題を解決するために、私たちは変更または、次のようにsepolicyファイルを追加します。
seplicy / file_contextsファイルを変更し、以下を追加:
/システム/ binに/ XXX U:object_r:xxx_exec:S0
新しいxxx.teファイル、および次の行を追加します。
新しいプロセスの実装のためのドメイン権限増やす必要
タイプXXXを;、ドメイン
型xxx_execの、exec_type、FILE_TYPEは、
このフィールドの有効
init_daemon_domain(xxxは)
時間のデバッグを節約するために、次の方法を使用することができ、原則的にはフル・コンパイルを必要とSELinuxの問題を修正し、検証する
ブートイメージをコンパイルする
バーンブートイメージを
adbの再マウントが実行
adbのシェルrestoreconコマンドを実行しますシステム/ binに/ xxx部分
のサービスは、カーネルログに成功したスタートXXXであるかどうかを確認するために、マシンを再起動します