SELinuxで個々のプログラムの特定の危険な動作を安全に許可

SELinuxで個々のプログラムの特定の危険な動作を安全に許可

フックとメモリ操作によってプログラムの動作を変更する.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

audit2allowexecheapタイプの処理を許可するルールを作成できますcontainer_t。いつでもモジュールを最初に作成してロードする前に確認できます。

考えられる問題の1つは、種類のcontainer_tあるすべてのプロセスが同じことを実行できることです。これを回避するには、独自のカスタムタイプ(container_tテンプレートとして使用)を作成し、execheapこの特殊タイプのみを許可できます。

このブログ投稿著者:Dan Walshがこれらのカスタムポリシーを作成する方法を説明します。これを組み合わせてaudit2allow実際のルールを作成することもできます。基本的な手順は次のとおりです。

  1. 次のデフォルトのコンテナポリシーを作成しますcontainer_execheap

    policy_module(container_execheap, 1.0)
    
    virt_sandbox_domain_template(container_execheap_t)
    

    virt_sandbox_domain_templateマクロは新しいタイプを生成し、container_execheap_t新しいタイプをコンテナドメインとして使用できるようにDocker操作に必要なルールを生成します。

  2. ポリシーモジュールをコンパイルしてロードします(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

  3. 次の新しいコンテキストでコンテナを実行します。docker run ... --security-opt label:type:container_execheap_t ...

  4. 予想されるエラーを生成します。次に実行audit2allowして、これらの操作を許可するルールを作成しますcontainer_execheap_t。同じモジュール.teファイルを新しいルールで更新できます(バージョン番号を増やすことを忘れないでください)。更新されたモジュールをコンパイルしてインストールします。

  5. エラーが発生しなくなった場合は、カスタムコンテナタイプを再試行モードに切り替えますsemanage -d container_execheap

おすすめ記事