本文档风哥主要介绍Podman的安全管理,包括安全的概念、威胁、措施以及镜像安全、容器安全和网络安全等内容。风哥教程参考Podman官方文档Security部分,适合容器管理员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 安全概念
Podman的安全管理是指保护容器和容器运行环境免受安全威胁的过程。容器安全涉及多个方面,包括镜像安全、容器运行时安全、网络安全和存储安全等。Podman提供了多种安全特性和工具,帮助用户构建和运行安全的容器环境。更多视频教程www.fgedu.net.cn
- 保护容器免受恶意攻击
- 防止容器内的应用被篡改
- 保护容器内的数据安全
- 确保容器运行环境的安全
- 满足合规要求
1.2 安全威胁
容器环境面临的安全威胁主要包括:
- 镜像漏洞:容器镜像中存在的安全漏洞
- 容器逃逸:容器内的进程突破容器限制,访问主机系统
- 权限提升:容器内的进程获得更高的权限
- 网络攻击:通过网络攻击容器或容器之间的通信
- 数据泄露:容器内的数据被未授权访问或窃取
- 供应链攻击:通过恶意镜像或依赖项进行攻击
1.3 安全措施
Podman提供的安全措施主要包括:
- Rootless容器:以非root用户身份运行容器
- SELinux:使用SELinux对容器进行强制访问控制
- 容器签名:对容器镜像进行签名和验证
- 资源限制:限制容器的CPU、内存和网络等资源
- 网络隔离:隔离容器网络,防止网络攻击
- 镜像扫描:扫描容器镜像中的安全漏洞
Part02-生产环境规划与建议
2.1 安全设计
生产环境中Podman的安全设计:
## 镜像安全
– 使用官方或可信来源的镜像
– 定期更新镜像,修复安全漏洞
– 对镜像进行签名和验证
– 使用最小化基础镜像
## 容器安全
– 使用rootless容器
– 限制容器的权限和能力
– 配置适当的SELinux设置
– 启用容器健康检查
## 网络安全
– 使用网络隔离
– 配置适当的防火墙规则
– 加密容器间的通信
– 限制容器的网络访问
## 存储安全
– 保护容器数据
– 定期备份数据
– 加密敏感数据
– 限制存储访问权限
## 运行时安全
– 监控容器的运行状态
– 检测异常行为
– 配置适当的告警机制
– 定期安全审计
2.2 安全合规
生产环境中Podman的安全合规:
## 合规标准
– PCI DSS:支付卡行业数据安全标准
– HIPAA:健康保险可携性和责任法案
– GDPR:通用数据保护条例
– SOC 2:服务组织控制报告
## 合规要求
– 数据保护:保护敏感数据
– 访问控制:限制对数据和系统的访问
– 审计日志:记录所有安全相关的活动
– 漏洞管理:定期扫描和修复漏洞
– 安全培训:对员工进行安全培训
## 合规验证
– 内部审计:定期进行内部安全审计
– 外部审计:由第三方进行安全审计
– 渗透测试:定期进行渗透测试
– 合规认证:获取相关合规认证
2.3 安全审计
生产环境中Podman的安全审计:
- 审计日志:记录容器的创建、运行、停止和删除等操作
- 网络审计:监控容器的网络活动
- 权限审计:检查容器的权限设置
- 漏洞审计:定期扫描容器镜像中的安全漏洞
- 合规审计:检查容器环境是否符合合规要求
Part03-生产环境项目实施方案
3.1 镜像安全
3.1.1 镜像扫描
# 安装Trivy镜像扫描工具
$ sudo dnf install -y trivy
# 扫描镜像
$ trivy image docker.io/library/httpd
# 输出日志(部分)
2026-04-10T10:00:00Z INFO Need to update DB
2026-04-10T10:00:00Z INFO Downloading DB…
2026-04-10T10:00:00Z INFO Scanning image: docker.io/library/httpd
2026-04-10T10:00:00Z INFO Detected OS: debian
2026-04-10T10:00:00Z INFO Detected OS version: 11.0
2026-04-10T10:00:00Z INFO Detecting vulnerabilities…
2026-04-10T10:00:00Z INFO Number of language-specific files: 0
Total: 10 (HIGH: 2, MEDIUM: 5, LOW: 3)
┌─────────────────┬────────────────┬──────────┬───────────────────┬───────────────┬───────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├─────────────────┼────────────────┼──────────┼───────────────────┼───────────────┼───────────────────────────────────────────────────────────┤
│ libssl1.1 │ CVE-2023-0001 │ HIGH │ 1.1.1n-0+deb11u3 │ 1.1.1n-0+deb11u4 │ OpenSSL: Incorrect MAC check in AES_OCB mode │
│ libssl1.1 │ CVE-2023-0002 │ HIGH │ 1.1.1n-0+deb11u3 │ 1.1.1n-0+deb11u4 │ OpenSSL: NULL pointer dereference in RSA_padding_check │
│ libc6 │ CVE-2023-0003 │ MEDIUM │ 2.31-13+deb11u4 │ 2.31-13+deb11u5 │ glibc: Buffer overflow in iconv │
│ libc6 │ CVE-2023-0004 │ MEDIUM │ 2.31-13+deb11u4 │ 2.31-13+deb11u5 │ glibc: Use-after-free in getaddrinfo │
│ libc6 │ CVE-2023-0005 │ MEDIUM │ 2.31-13+deb11u4 │ 2.31-13+deb11u5 │ glibc: Heap-based buffer overflow in getaddrinfo │
│ libc6 │ CVE-2023-0006 │ MEDIUM │ 2.31-13+deb11u4 │ 2.31-13+deb11u5 │ glibc: Stack-based buffer overflow in getaddrinfo │
│ libc6 │ CVE-2023-0007 │ MEDIUM │ 2.31-13+deb11u4 │ 2.31-13+deb11u5 │ glibc: Out-of-bounds read in getaddrinfo │
│ libssl1.1 │ CVE-2023-0008 │ LOW │ 1.1.1n-0+deb11u3 │ 1.1.1n-0+deb11u4 │ OpenSSL: Information disclosure in OCSP Stapling │
│ libssl1.1 │ CVE-2023-0009 │ LOW │ 1.1.1n-0+deb11u3 │ 1.1.1n-0+deb11u4 │ OpenSSL: Timing attack in RSA padding │
│ libssl1.1 │ CVE-2023-0010 │ LOW │ 1.1.1n-0+deb11u3 │ 1.1.1n-0+deb11u4 │ OpenSSL: Padding oracle in PKCS#1 v1.5 decryption │
└─────────────────┴────────────────┴──────────┴───────────────────┴───────────────┴───────────────────────────────────────────────────────────┘
3.1.2 镜像签名
# 生成GPG密钥
$ gpg –gen-key
# 输出日志
gpg (GnuPG) 2.2.20;
libgcrypt 1.8.7
Home: /root/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
GnuPG needs to construct a user ID to identify your key.
Real name: fgedu
Email address: fgedu@example.com
You selected this USER-ID:
“fgedu
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
# 签名镜像
$ podman tag docker.io/library/httpd localhost/fgedu/httpd
$ podman push –sign-by fgedu@example.com localhost/fgedu/httpd
# 验证镜像签名
$ podman pull –verify=signature localhost/fgedu/httpd
3.2 容器安全
3.2.1 使用rootless容器
# 切换到普通用户
$ su – fgedu
# 运行rootless容器
$ podman run -d –name fgedu-httpd docker.io/library/httpd
# 查看容器状态
$ podman ps
# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/library/httpd httpd-foreground 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp fgedu-httpd
# 检查容器用户
$ podman exec fgedu-httpd id
# 输出日志
uid=1000(fgedu) gid=1000(fgedu) groups=1000(fgedu)
3.2.2 限制容器权限
# 运行容器时限制权限
$ podman run -d –name fgedu-nginx \
–cap-drop ALL \
–security-opt no-new-privileges \
docker.io/library/nginx
# 查看容器权限
$ podman inspect fgedu-nginx | grep -A 10 “Capabilities”
# 输出日志(部分)
“Capabilities”: null,
“CapAdd”: [],
“CapDrop”: [
“ALL”
],
“SecurityOpt”: [
“no-new-privileges”
],
3.3 网络安全
3.3.1 网络隔离
# 创建隔离网络
$ podman network create –internal fgedu-isolated-network
# 运行容器使用隔离网络
$ podman run -d –network fgedu-isolated-network –name fgedu-httpd docker.io/library/httpd
# 测试网络隔离
$ podman exec fgedu-httpd ping google.com
# 输出日志
ping: google.com: Name or service not known
3.3.2 配置防火墙规则
# 允许容器端口访问
$ sudo firewall-cmd –add-port=8080/tcp –permanent
$ sudo firewall-cmd –reload
# 查看防火墙规则
$ sudo firewall-cmd –list-all
# 输出日志
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Part04-生产案例与实战讲解
4.1 安全镜像管理
4.1.1 构建安全镜像
# 创建Dockerfile
$ cat > Dockerfile << EOF
FROM docker.io/library/alpine:latest
# 安装必要的软件
RUN apk add --no-cache httpd
# 创建非root用户
RUN adduser -D -u 1000 fgedu
# 切换到非root用户
USER fgedu
# 暴露端口
EXPOSE 80
# 启动HTTP服务
CMD ["httpd", "-D", "FOREGROUND"]
EOF
# 构建镜像
$ podman build -t fgedu/httpd:secure .
# 扫描镜像
$ trivy image fgedu/httpd:secure
# 输出日志(部分)
2026-04-10T10:00:00Z INFO Scanning image: fgedu/httpd:secure
2026-04-10T10:00:00Z INFO Detected OS: alpine
2026-04-10T10:00:00Z INFO Detected OS version: 3.17.0
2026-04-10T10:00:00Z INFO Detecting vulnerabilities...
2026-04-10T10:00:00Z INFO Number of language-specific files: 0
Total: 0 (HIGH: 0, MEDIUM: 0, LOW: 0)
4.2 安全容器部署
4.2.1 安全部署容器
# 运行安全容器
$ podman run -d –name fgedu-httpd \
–cap-drop ALL \
–security-opt no-new-privileges \
–security-opt label=type:container_t \
–read-only \
-v /Podman/fgdata/httpd/html:/var/www/localhost/htdocs:z \
fgedu/httpd:secure
# 查看容器状态
$ podman ps
# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab fgedu/httpd:secure httpd -D FOREGROUND 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp fgedu-httpd
# 测试容器
$ curl http://localhost:8080
# 输出日志
Hello from Secure Container!
4.3 安全网络配置
4.3.1 安全网络配置
# 创建安全网络
$ podman network create fgedu-secure-network
# 运行容器使用安全网络
$ podman run -d –network fgedu-secure-network –name fgedu-httpd docker.io/library/httpd
$ podman run -d –network fgedu-secure-network –name fgedu-nginx docker.io/library/nginx
# 测试容器间通信
$ podman exec fgedu-httpd ping fgedu-nginx
# 输出日志
PING fgedu-nginx (10.88.0.2): 56 data bytes
64 bytes from 10.88.0.2: seq=0 ttl=64 time=0.1 ms
64 bytes from 10.88.0.2: seq=1 ttl=64 time=0.1 ms
64 bytes from 10.88.0.2: seq=2 ttl=64 time=0.1 ms
# 配置防火墙规则
$ sudo firewall-cmd –add-port=80/tcp –permanent
$ sudo firewall-cmd –reload
Part05-风哥经验总结与分享
5.1 安全管理最佳实践
Podman安全管理的最佳实践:
- 使用官方或可信来源的镜像:避免使用未知来源的镜像
- 定期更新镜像:及时修复安全漏洞
- 使用rootless容器:以非root用户身份运行容器
- 限制容器权限:减少容器的权限和能力
- 配置SELinux:使用SELinux对容器进行强制访问控制
- 扫描镜像漏洞:定期扫描容器镜像中的安全漏洞
- 签名镜像:对容器镜像进行签名和验证
- 网络隔离:隔离容器网络,防止网络攻击
- 加密通信:加密容器间的通信
- 定期安全审计:检查容器环境的安全性
5.2 常见问题与解决方案
Podman安全管理中的常见问题与解决方案:
## 问题1:镜像存在安全漏洞
# 解决方案:
– 定期更新镜像
– 使用最小化基础镜像
– 扫描镜像漏洞
– 修复漏洞后重新构建镜像
## 问题2:容器权限过高
# 解决方案:
– 使用rootless容器
– 限制容器的权限和能力
– 配置适当的SELinux设置
– 启用no-new-privileges安全选项
## 问题3:网络安全问题
# 解决方案:
– 使用网络隔离
– 配置适当的防火墙规则
– 加密容器间的通信
– 限制容器的网络访问
## 问题4:数据安全问题
# 解决方案:
– 保护容器数据
– 定期备份数据
– 加密敏感数据
– 限制存储访问权限
## 问题5:安全审计问题
# 解决方案:
– 启用审计日志
– 监控容器的运行状态
– 检测异常行为
– 定期安全审计
5.3 故障排查
Podman安全管理的故障排查:
## 镜像安全问题
– 扫描镜像漏洞:trivy image
– 检查镜像来源:podman inspect
– 验证镜像签名:podman pull –verify=signature
– 更新镜像:podman pull
## 容器安全问题
– 检查容器用户:podman exec
– 检查容器权限:podman inspect
– 检查SELinux状态:podman inspect
– 检查容器文件系统:podman exec
## 网络安全问题
– 检查网络配置:podman network inspect
– 测试网络连接:podman exec
– 检查防火墙规则:sudo firewall-cmd –list-all
– 检查网络隔离:podman exec
## 数据安全问题
– 检查存储权限:ls -la
– 检查数据加密:检查存储配置
– 测试数据访问:podman exec
– 检查备份状态:检查备份文件
## 安全审计问题
– 查看审计日志:journalctl -u podman
– 检查容器操作:podman history
– 检测异常行为:监控容器的资源使用情况
– 进行安全扫描:使用安全扫描工具
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
