audit2allow
おそらく許可するルールを生成execheap
するためにcontainer_t
型プロセスを。ロードする前に、常に最初にモジュールを生成して検査することができます。
考えられる問題は、container_t
typeを持つすべてのプロセスが同じ操作を許可されることです。これを回避するには、独自のカスタムタイプを(container_t
テンプレートとして使用して)作成し、execheap
この特別なタイプのみを許可する必要があります。
Dan Walshによるこのブログ投稿では、そのようなカスタムポリシーの記述方法について説明しています。これと組み合わせてaudit2allow
、実際のルールを生成することもできます。基本的な手順は次のとおりです。
たとえば、基本的なコンテナポリシーを作成しますcontainer_execheap
。
policy_module(container_execheap, 1.0)
virt_sandbox_domain_template(container_execheap_t)
virt_sandbox_domain_template
マクロは新しいタイプcontainer_execheap_t
を作成し、新しいタイプをコンテナードメインとして使用できるようにする、Docker操作に必要なルールを作成します。
ポリシーモジュールをコンパイルしてロードします(メイクファイルを含む必要な開発ファイルは、selinux-policy-devel
パッケージで提供する必要があります)。
make -f /usr/selinux/devel/Makefile container_execheap.pp
semodule -i container_execheap.pp
新しいタイプは、寛容なドメインになるように構成できます。
semanage permissive -a container_execheap_t
寛容なドメインの場合、AVC拒否はログに記録されますが、ルールは適用されません。このようにして、後でを使用して不足しているルールを簡単に生成できaudit2allow
ます。
このような新しいコンテキストでコンテナを実行します。 docker run ... --security-opt label:type:container_execheap_t ...
予想されるエラーを生成します。次に、を実行audit2allow
して、の操作を許可するルールを生成しますcontainer_execheap_t
。同じモジュール.te
ファイル(バージョン番号を上げることを忘れないでください)を新しいルールで更新できます。更新されたモジュールをコンパイルしてインストールします。
エラーが発生しなくなったら、カスタムコンテナタイプを強制モードに戻しますsemanage -d container_execheap
。