9.2. カスタムコンテナーの SELinux ポリシーを作成して使用
カスタムコンテナーの SELinux セキュリティーポリシーを生成するには、以下の手順を行います。
前提条件
-
コンテナーを管理する
podman
ツールがインストールされている。そうでない場合は、yum install podman
コマンドを使用します。 - カスタムの Linux コンテナー - この例では ubi8 です。
手順
udica
パッケージをインストールします。# yum install -y udica
udica
を含むコンテナーソフトウェアパッケージセットを提供するcontainer-tools
モジュールをインストールします。# yum module install -y container-tools
/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
コンテナーは、SELinux のタイプが
container_t
で実行されることに注意してください。このタイプは、SELinux ポリシー内のすべてのコンテナーの汎用ドメインであり、シナリオに対して厳密すぎるか緩すぎる可能性があります。新しいターミナルを開き、
podman ps
コマンドを入力して、コンテナーの ID を取得します。# 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
コンテナーの JSON ファイルを作成し、
udica
を使用して JSON ファイルの情報に基づいてポリシーモジュールを作成します。# podman inspect 37a3635afb8f > container.json # udica -j container.json my_container Policy my_container with container id 37a3635afb8f created! […]
または、次のようになります。
# podman inspect 37a3635afb8f | udica my_container Policy my_container with container id 37a3635afb8f created! Please load these modules using: # semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil} Restart the container with: "--security-opt label=type:my_container.process" parameter
前の手順の
udica
の出力で提案されているように、ポリシーモジュールを読み込みます。# semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
コンテナーを停止し、
--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
検証
コンテナーが、
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
SELinux が、マウントポイント
/home
および/var/spool
へのアクセスを許可していることを確認します。[root@37a3635afb8f /]# cd /home [root@37a3635afb8f home]# ls username [root@37a3635afb8f ~]# cd /var/spool/ [root@37a3635afb8f spool]# touch test [root@37a3635afb8f spool]#
SELinux がポート 21 へのバインドのみを許可していることを確認します。
[root@37a3635afb8f /]# yum install nmap-ncat [root@37a3635afb8f /]# nc -lvp 21 … Ncat: Listening on :::21 Ncat: Listening on 0.0.0.0:21 ^C [root@37a3635afb8f /]# nc -lvp 80 … Ncat: bind to :::80: Permission denied. QUITTING.
関連情報
-
システム上の
udica (8)
およびpodman (1) の
man ページ - udica - コンテナーの SELinux ポリシーの生成
- コンテナーの構築、実行、および管理