本文目录导读:

- Docker 容器配置 Capabilities
- Kubernetes Pod YAML 配置
- Docker Compose 配置
- Podman 容器配置
- 实用脚本示例
- Containerd 配置
- 检查容器 Capabilities
- 常用 Capabilities 列表
- 安全最佳实践
在Shell脚本中配置容器Capabilities,主要取决于你使用的容器运行时(如Docker、Podman、containerd等),以下是几种常见场景的配置方法:
Docker 容器配置 Capabilities
添加/删除 Capabilities
#!/bin/bash # 添加capabilities docker run --cap-add=NET_ADMIN --cap-add=SYS_TIME nginx # 删除所有capabilities后再添加特定的 docker run --cap-drop=ALL --cap-add=NET_RAW nginx # 使用完整的capability列表 docker run \ --cap-add=CHOWN \ --cap-add=DAC_OVERRIDE \ --cap-add=NET_RAW \ --cap-add=SYS_ADMIN \ nginx
脚本中的动态配置
#!/bin/bash
# 定义capabilities列表
CAPS=(
"NET_ADMIN"
"SYS_PTRACE"
"SYS_ADMIN"
)
# 构建参数
CAP_ARGS=""
for cap in "${CAPS[@]}"; do
CAP_ARGS="$CAP_ARGS --cap-add=$cap"
done
# 运行容器
docker run $CAP_ARGS myapp
Kubernetes Pod YAML 配置
在shell脚本中生成配置
#!/bin/bash
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: capability-pod
spec:
containers:
- name: test-container
image: nginx
securityContext:
capabilities:
add: ["NET_ADMIN", "SYS_TIME"]
drop: ["ALL"]
EOF
Docker Compose 配置
# docker-compose.yml
version: '3.8'
services:
app:
image: nginx
cap_add:
- NET_ADMIN
- SYS_PTRACE
cap_drop:
- ALL
在shell脚本中调用:
#!/bin/bash docker-compose up -d
Podman 容器配置
#!/bin/bash # Podman语法与Docker类似 podman run --cap-add=NET_RAW --cap-drop=ALL nginx # 或者使用完整的capabilities podman run --cap-add=ALL --cap-drop=MKNOD nginx
实用脚本示例
带参数运行的脚本
#!/bin/bash
# 用法: ./run_with_caps.sh [--all|--minimal|--custom] [command]
MODE=${1:-"minimal"}
COMMAND=${2:-"bash"}
case $MODE in
"all")
echo "授予所有capabilities"
docker run --cap-add=ALL -it --rm ubuntu:latest $COMMAND
;;
"minimal")
echo "最小capabilities配置"
docker run --cap-drop=ALL --cap-add=NET_RAW --cap-add=CHOWN -it --rm ubuntu:latest $COMMAND
;;
"custom")
echo "自定义capabilities"
docker run \
--cap-add=NET_ADMIN \
--cap-add=SYS_PTRACE \
--cap-add=SYS_ADMIN \
-it --rm ubuntu:latest $COMMAND
;;
*)
echo "未知模式: $MODE"
exit 1
;;
esac
Containerd 配置
#!/bin/bash # 使用ctr命令行工具 ctr run --rm \ --cap-add=NET_ADMIN \ --cap-add=SYS_TIME \ docker.io/library/nginx:latest \ test-container
检查容器 Capabilities
#!/bin/bash # 检查运行中的容器的capabilities docker exec <container_id> cat /proc/1/status | grep CapEff # 或者使用capsh工具(需在容器内安装) docker run --rm ubuntu bash -c "apt-get update && apt-get install -y libcap2-bin && capsh --print"
常用 Capabilities 列表
| Capability | 用途 |
|---|---|
| CHOWN | 修改文件所有者 |
| DAC_OVERRIDE | 忽略文件权限检查 |
| NET_RAW | 使用原始套接字 |
| NET_ADMIN | 网络管理操作 |
| SYS_ADMIN | 系统管理操作 |
| SYS_PTRACE | 跟踪系统调用 |
| SYS_TIME | 设置系统时间 |
| SYS_MODULE | 加载/卸载内核模块 |
安全最佳实践
#!/bin/bash # 推荐的最小权限原则 docker run \ --cap-drop=ALL \ --cap-add=NET_BIND_SERVICE \ --cap-add=CHOWN \ --cap-add=SETUID \ --cap-add=SETGID \ nginx
配置Capabilities时,请遵循最小权限原则,只授予容器运行所需的最小capability集合,不要随意使用--cap-add=ALL(除非必要)。