本文目录导读:

在Shell脚本中配置容器安全上下文主要涉及以下几个层面,这里按不同的使用场景分别说明:
Docker 容器的安全上下文
通过 docker run 参数配置
#!/bin/bash # 只读根文件系统 docker run \ --read-only \ --tmpfs /tmp \ --tmpfs /var/run \ -d nginx:latest # 使用特定用户运行 docker run \ --user 1000:1000 \ -d nginx:latest # 禁止提升权限 docker run \ --security-opt no-new-privileges:true \ -d nginx:latest # 移除所有能力 docker run \ --cap-drop ALL \ --cap-add NET_BIND_SERVICE \ -d nginx:latest # 使用 seccomp 策略 docker run \ --security-opt seccomp=/path/to/seccomp/profile.json \ -d nginx:latest # 完整的生产级配置 docker run \ --read-only \ --tmpfs /tmp:rw,noexec,nosuid,size=65536k \ --tmpfs /var/run:rw,noexec,nosuid,size=65536k \ --tmpfs /var/log:rw,noexec,nosuid,size=65536k \ --user 1000:1000 \ --security-opt no-new-privileges:true \ --cap-drop ALL \ --cap-add NET_BIND_SERVICE \ --cap-add CHOWN \ --cap-add SETGID \ --cap-add SETUID \ --security-opt seccomp=default \ -d your-image:tag
Docker Compose 配置
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
- CHOWN
user: "1000:1000"
read_only: true
tmpfs:
- /tmp:rw,noexec,nosuid,size=65536k
- /var/run:rw,noexec,nosuid,size=65536k
- /var/log:rw,noexec,nosuid,size=65536k
# 应用配置的脚本 #!/bin/bash docker-compose up -d
Kubernetes Pod 安全上下文
Docker 级别的配置
#!/bin/bash
# 创建 Pod 并指定安全上下文
kubectl run secure-pod \
--image=nginx:latest \
--dry-run=client \
-o yaml > pod.yaml
# 修改 YAML 添加安全上下文
cat > pod.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 2000
supplementalGroups: [3000, 4000]
seccompProfile:
type: RuntimeDefault
seLinuxOptions:
level: "s0:c123,c456"
containers:
- name: nginx
image: nginx:latest
securityContext:
allowPrivilegeEscalation: false
privileged: false
readOnlyRootFilesystem: true
runAsNonRoot: true
capabilities:
drop: ["ALL"]
add: ["NET_BIND_SERVICE"]
procMount: Default
seccompProfile:
type: RuntimeDefault
EOF
# 应用配置
kubectl apply -f pod.yaml
容器运行时安全配置
Pod 安全标准 (Pod Security Standards)
#!/bin/bash
# 应用受限模式 (Restricted)
kubectl label --overwrite ns default \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/audit=restricted \
pod-security.kubernetes.io/warn=restricted
# 创建符合受限标准的部署
cat > secure-deployment.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: secure-app
spec:
replicas: 3
selector:
matchLabels:
app: secure-app
template:
metadata:
labels:
app: secure-app
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: your-image:latest
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
resources:
limits:
memory: "128Mi"
cpu: "500m"
EOF
kubectl apply -f secure-deployment.yaml
自动化安全配置脚本
#!/bin/bash
set -euo pipefail
SECURITY_CONFIG() {
local IMAGE=$1
local CONTAINER_NAME=$2
echo "启动安全容器: $CONTAINER_NAME"
docker run -d \
--name "$CONTAINER_NAME" \
--restart unless-stopped \
--cap-drop ALL \
--cap-add NET_BIND_SERVICE \
--cap-add CHOWN \
--cap-add SETGID \
--cap-add SETUID \
--security-opt no-new-privileges:true \
--security-opt seccomp=default \
--pids-limit 100 \
--memory "256m" \
--cpus "0.5" \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=32m \
--tmpfs /var/run:rw,noexec,nosuid,size=32m \
--user 1000:1000 \
"$IMAGE"
echo "安全上下文已应用"
}
# 检查容器安全状态
CHECK_CONTAINER_SECURITY() {
local CONTAINER_ID=$1
echo "容器安全配置检查:"
# 检查特权模式
if docker inspect --format='{{.HostConfig.Privileged}}' "$CONTAINER_ID"; then
echo "❌ 容器运行在特权模式"
else
echo "✅ 非特权模式"
fi
# 检查是否可提升权限
if docker inspect --format='{{.HostConfig.SecurityOpt}}' "$CONTAINER_ID" | grep -q "no-new-privileges"; then
echo "✅ 禁止权限提升"
else
echo "❌ 允许权限提升"
fi
# 检查只读文件系统
if docker inspect --format='{{.HostConfig.ReadonlyRootfs}}' "$CONTAINER_ID"; then
echo "✅ 只读文件系统"
else
echo "❌ 非只读文件系统"
fi
}
# 使用示例
# SECURITY_CONFIG "nginx:latest" "secure-nginx"
# CHECK_CONTAINER_SECURITY "container_id"
最佳实践检查脚本
#!/bin/bash
SECURITY_AUDIT() {
local IMAGE=$1
echo "安全配置审计: $IMAGE"
# 检查容器镜像
echo "1. 检查镜像扫描结果..."
docker scan "$IMAGE" || echo "⚠️ 建议使用 docker scan 扫描漏洞"
# 检查基础镜像
echo "2. 检查基础镜像..."
local BASE_IMAGE=$(docker inspect --format='{{.Config.Image}}' "$IMAGE")
echo "基础镜像: $BASE_IMAGE"
# 检查非root用户
echo "3. 检查用户配置..."
local USER=$(docker inspect --format='{{.Config.User}}' "$IMAGE")
if [ -z "$USER" ] || [ "$USER" == "root" ]; then
echo "❌ 建议设置非root用户"
else
echo "✅ 用户: $USER"
fi
# 生成安全报告
cat << EOF
安全配置建议:
- 使用最小基础镜像 (如 alpine, distroless)
- 设置明确的工作目录
- 添加非root用户运行
- 移除不必要的工具和权限
- 配置健康检查
- 设置资源限制
- 使用只读文件系统
- 应用 seccomp 和 AppArmor 策略
- 定期更新基础镜像
- 使用多阶段构建减少攻击面
EOF
}
# SECURITY_AUDIT "your-image:tag"
关键安全配置说明
#!/bin/bash echo "安全上下文配置关键点:" cat << 'SECURITY_GUIDE' 1. 用户权限: - 使用非root用户 (--user 1000:1000) - 设置 runAsNonRoot: true 2. 能力限制: - 移除所有能力 (--cap-drop ALL) - 只添加必要能力 (--cap-add NET_BIND_SERVICE) 3. 文件系统: - 使用只读根文件系统 (--read-only) - 挂载必要的 tmpfs 目录 4. 系统调用过滤: - 使用 seccomp 策略 - 禁止权限提升 (--security-opt no-new-privileges:true) 5. 资源限制: - 设置内存限制 (--memory "256m") - 设置 CPU 限制 (--cpus "0.5") - 限制进程数 (--pids-limit 100) 6. 网络策略: - 使用网络策略限制通信 - 只暴露必要端口 7. 日志和监控: - 限制日志文件大小 - 配置容器审计日志 SECURITY_GUIDE
使用建议
- 分层配置:从最严格的配置开始,按需放宽
- 测试验证:在生产环境前充分测试安全配置
- 定期审计:定期检查容器安全配置
- 最小权限:遵循最小权限原则
- 更新维护:保持镜像和运行时更新
脚本可以根据你的具体需求进行调整和组合使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播