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 - 或者,安装 - container-tools模块,它提供一组容器软件包,包括- udica:- dnf module install -y container-tools - # dnf module install -y container-tools- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 启动 ubi8 容器,它使用只读权限挂载 - /home目录,以及具有读取和写入的权限的- /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 - 请注意,现在容器使用 - container_tSELinux 类型运行。这个类型是 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