9.2. カスタムコンテナーの SELinux ポリシーを作成して使用
udica ユーティリティーを使用すると、カスタムコンテナー用の SELinux セキュリティーポリシーを生成できます。
前提条件
-
コンテナーを管理する
podmanツールがインストールされている。そうでない場合は、dnf install podmanを使用します。 - カスタムの Linux コンテナー - この例では ubi8 です。
手順
udicaパッケージをインストールします。dnf install -y udica
# dnf install -y udicaCopy to Clipboard Copied! Toggle word wrap Toggle overflow udicaを含むコンテナーソフトウェアパッケージセットを提供するcontainer-toolsモジュールをインストールします。dnf module install -y container-tools
# dnf module install -y container-toolsCopy 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 bashCopy 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_lewinCopy 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 bashCopy 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 bashCopy 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