9.2. カスタムコンテナーの SELinux ポリシーを作成して使用
udica
ユーティリティーを使用すると、カスタムコンテナー用の SELinux セキュリティーポリシーを生成できます。
前提条件
-
コンテナーを管理する
podman
ツールがインストールされている。そうでない場合は、dnf install podman
を使用します。 - カスタムの Linux コンテナー - この例では ubi8 です。
手順
udica
パッケージをインストールします。dnf install -y udica
# dnf install -y udica
Copy to Clipboard Copied! Toggle word wrap Toggle overflow udica
を含むコンテナーソフトウェアパッケージセットを提供するcontainer-tools
モジュールをインストールします。dnf module install -y container-tools
# dnf module install -y container-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /home
ディレクトリーを読み取り権限でマウントする ubi8 コンテナーと、読み取りおよび書き込みの権限で/var/spool
ディレクトリーをマウントします。コンテナーはポート 21 を公開します。podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
# podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーは、SELinux のタイプが
container_t
で実行されることに注意してください。このタイプは、SELinux ポリシー内のすべてのコンテナーの汎用ドメインであり、シナリオに対して厳密すぎるか緩すぎる可能性があります。新しいターミナルを開き、
podman ps
コマンドを入力して、コンテナーの ID を取得します。podman ps
# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37a3635afb8f registry.access.redhat.com/ubi8:latest bash 15 minutes ago Up 15 minutes ago heuristic_lewin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーの JSON ファイルを作成し、
udica
を使用して JSON ファイルの情報に基づいてポリシーモジュールを作成します。podman inspect 37a3635afb8f > container.json udica -j container.json my_container
# podman inspect 37a3635afb8f > container.json # udica -j container.json my_container Policy my_container with container id 37a3635afb8f created! […]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、次のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前の手順の
udica
の出力で提案されているように、ポリシーモジュールを読み込みます。semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
# semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを停止し、
--security-opt label=type:my_container.process
オプションを使用して再起動します。podman stop 37a3635afb8f podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
# podman stop 37a3635afb8f # podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンテナーが、
my_container.process
タイプで実行されることを確認します。ps -efZ | grep my_container.process
# ps -efZ | grep my_container.process unconfined_u:system_r:container_runtime_t:s0-s0:c0.c1023 root 2275 434 1 13:49 pts/1 00:00:00 podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash system_u:system_r:my_container.process:s0:c270,c963 root 2317 2305 0 13:49 pts/0 00:00:00 bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が、マウントポイント
/home
および/var/spool
へのアクセスを許可していることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux がポート 21 へのバインドのみを許可していることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow