5.16. 在 Podman 中配置预执行钩子
您可以创建插件脚本来定义对容器操作的精细控制,特别是阻止未经授权的操作,如拉取、运行或列出容器镜像。
注意
文件 /etc/containers/podman_preexec_hooks.txt
必须由管理员创建,可为空。如果 /etc/containers/podman_preexec_hooks.txt
不存在,插件脚本将不能执行。
以下规则适用于插件脚本:
- 必须是 root 所有且不可写。
-
必须位于
/usr/libexec/podman/pre-exec-hooks
和/etc/containers/pre-exec-hooks
目录中。 - 按顺序和字母顺序执行。
-
如果所有插件脚本都返回零值,则
podman
命令执行了。 -
如果任何插件脚本返回一个非零值,则表示失败。
podman
命令退出,并返回第一个失败的脚本的非零值。 红帽建议使用以下命名约定,按正确的顺序执行脚本:
DDD_name.lang
,其中:-
DDD
是表示脚本执行顺序的十进制数。如有必要,前面使用一个或多个零。 -
name
是插件脚本的名称。 -
lang
(可选)是给定编程语言的文件扩展名。例如,插件脚本的名称可以是:001-check-groups.sh
.
-
注意
插件脚本在创建时是有效的。在插件脚本之前创建的容器不会受到影响。
先决条件
-
container-tools
元数据包已安装。
流程
创建名为
001-check-groups.sh
的脚本插件。例如:#!/bin/bash if id -nG "$USER" 2> /dev/null | grep -qw "$GROUP" 2> /dev/null ; then exit 0 else exit 1 fi
- 该脚本检查用户是否在指定的组中。
-
USER
和GROUP
是 Podman 设置的环境变量。 -
001-check-groups.sh
脚本提供的退出码将被提供给podman
二进制文件。 -
podman
命令退出,并返回第一个失败的脚本的非零值。
验证
检查
001-check-groups.sh
脚本是否正常工作:$ podman run image ...
如果用户不在正确的组中,则会出现以下错误:
external preexec hook /etc/containers/pre-exec-hooks/001-check-groups.sh failed