フックとメモリ操作によってプログラムの動作を変更する.soファイルをロードするDockerコンテナ内で実行されるプログラムがあります。 SELinuxはこの動作をブロックし、監査ログに次のメッセージを表示します。
type=AVC msg=audit(1548166862.066:2419): avc: pid=11171 comm="myProgram" scontext=system_u:system_r:container_t:s0:c426,c629 tcontext=system_u:system_r:container済み: c426、c629 tclass=プロセス権限=0
audit2allow
私はこの特定の動作を他の場所で許可したくないので(非常に危険である可能性があるため)、これを行うことを非常に躊躇します。
- できるだけ安全な方法でこれらの特定の動作を許可するようにSELinuxにどのように指示しますか?
- 後で同じプログラムを実行するより多くのDockerコンテナを作成する方法でこれを実行できますか?
ベストアンサー1
audit2allow
execheap
タイプの処理を許可するルールを作成できますcontainer_t
。いつでもモジュールを最初に作成してロードする前に確認できます。
考えられる問題の1つは、種類のcontainer_t
あるすべてのプロセスが同じことを実行できることです。これを回避するには、独自のカスタムタイプ(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操作に必要なルールを生成します。ポリシーモジュールをコンパイルしてロードします(makefileを含む必要な開発ファイルは
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
。