1. 首页 > Podman教程 > 正文

Podman教程FG032-Podman容器安全管理进阶

本文档风哥主要介绍Podman容器安全管理进阶,包括安全的概念、安全威胁、安全原则以及镜像安全、容器安全和系统安全等内容。风哥教程参考Podman官方文档Security部分,适合容器管理员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 安全概念

容器安全是指保护容器及其运行环境的安全性,防止未授权访问、数据泄露、恶意攻击等安全问题。Podman容器安全是指保护Podman容器及其运行环境的安全性,包括镜像安全、容器安全、网络安全、存储安全等。更多视频教程www.fgedu.net.cn

安全的作用:

  • 保护数据:防止数据泄露和篡改
  • 保护系统:防止系统被攻击和破坏
  • 保护应用:防止应用被恶意利用
  • 合规要求:满足行业和地区的合规要求
  • 业务连续性:确保业务的正常运行

1.2 安全威胁

Podman容器面临的安全威胁主要包括:

  • 镜像安全威胁:恶意镜像、镜像漏洞、镜像篡改
  • 容器安全威胁:容器逃逸、权限提升、恶意代码执行
  • 网络安全威胁:网络攻击、数据窃听、网络隔离失效
  • 存储安全威胁:数据泄露、数据篡改、存储隔离失效
  • 系统安全威胁:主机漏洞、权限配置不当、安全配置错误

1.3 安全原则

Podman容器安全的基本原则包括:

  • 最小权限原则:容器只拥有必要的权限,减少攻击面
  • 隔离原则:容器之间以及容器与主机之间的隔离
  • 完整性原则:确保容器和镜像的完整性,防止篡改
  • 可审计原则:记录容器的操作和访问日志,便于审计
  • 防御纵深原则:多层次的安全防御,提高安全保障
风哥提示:安全原则是容器安全管理的基础,遵循安全原则可以提高容器的安全性。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 安全策略

生产环境中Podman的安全策略:

# 安全策略

## 镜像安全
– 镜像来源:使用官方或可信的镜像源
– 镜像扫描:定期扫描镜像中的漏洞
– 镜像签名:对镜像进行签名,确保镜像的完整性
– 镜像更新:定期更新镜像,修复已知漏洞

## 容器安全
– 最小权限:容器以非root用户运行
– 权限控制:限制容器的权限和能力
– 资源限制:限制容器的资源使用
– 网络隔离:容器之间的网络隔离

## 网络安全
– 网络访问控制:限制容器的网络访问权限
– 网络加密:加密容器之间的通信
– 网络监控:监控容器的网络活动
– 网络审计:记录容器的网络访问日志

## 存储安全
– 存储隔离:容器之间的存储隔离
– 数据加密:加密敏感数据
– 访问控制:限制存储的访问权限
– 备份策略:定期备份容器数据

## 系统安全
– 系统更新:定期更新主机系统,修复已知漏洞
– 安全配置:配置主机的安全设置
– 访问控制:限制主机的访问权限
– 监控告警:监控主机的安全状态

2.2 安全需求

生产环境中Podman的安全需求:

# 安全需求

## 功能需求
– 镜像安全:确保镜像的安全性和完整性
– 容器安全:确保容器的安全性和隔离性
– 网络安全:确保网络的安全性和隔离性
– 存储安全:确保存储的安全性和隔离性
– 系统安全:确保主机系统的安全性

## 性能需求
– 安全扫描性能:扫描速度快,不影响容器运行
– 安全监控性能:监控开销小,不影响容器性能
– 安全加密性能:加密和解密速度快,不影响容器性能

## 技术需求
– 安全工具:支持多种安全工具,如Trivy、Falco等
– 安全标准:符合行业安全标准,如CIS Docker Benchmark
– 安全集成:与现有安全系统集成
– 安全自动化:支持安全自动化,如CI/CD集成

## 非功能需求
– 可靠性:安全措施可靠,不影响容器的正常运行
– 可维护性:安全配置易于管理和维护
– 可扩展性:安全措施可扩展,适应不同的场景
– 成本效益:安全措施成本合理,效益明显

2.3 安全最佳实践

生产环境中Podman的安全最佳实践:

  • 使用官方镜像:使用官方或可信的镜像源,避免使用未知来源的镜像
  • 定期扫描镜像:使用安全扫描工具定期扫描镜像中的漏洞
  • 容器以非root用户运行:容器以非root用户运行,减少攻击面
  • 限制容器权限:限制容器的权限和能力,只授予必要的权限
  • 网络隔离:为不同的应用创建独立的网络,实现网络隔离
  • 加密通信:加密容器之间以及容器与外部的通信
  • 定期更新:定期更新镜像和主机系统,修复已知漏洞
  • 监控告警:监控容器的安全状态,及时发现和解决安全问题
生产环境建议:在生产环境中,应建立完善的安全管理机制,确保容器的安全性,满足业务需求。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 镜像安全

3.1.1 镜像安全配置

# 镜像安全配置

# 安装Trivy镜像扫描工具
$ sudo dnf install -y trivy

# 扫描镜像
$ trivy image docker.io/library/nginx:latest

# 输出日志
2026-04-10T10:00:00+08:00 INFO Detected OS: debian
2026-04-10T10:00:00+08:00 INFO Detecting Debian vulnerabilities…
2026-04-10T10:00:00+08:00 INFO Number of language-specific files: 0

debian 11.6 (104000d71a2f)
==========================
Total: 10 (UNKNOWN: 0, LOW: 5, MEDIUM: 3, HIGH: 2, CRITICAL: 0)

+———————+——————+———-+——————-+—————+—————————————+
| Library | Vulnerability ID | Severity | Installed Version | Fixed Version | Title |
+———————+——————+———-+——————-+—————+—————————————+
| libc6 | CVE-2022-3715 | MEDIUM | 2.31-13+deb11u4 | 2.31-13+deb11u5 | glibc: GnuTLS vulnerability in |
| | | | | | certificate validation |
| libssl1.1 | CVE-2022-3786 | HIGH | 1.1.1n-0+deb11u3 | 1.1.1n-0+deb11u4 | openssl: Incorrect SSLv2 |
| | | | | | rollback protection |
| zlib1g | CVE-2022-37434 | HIGH | 1.2.11.dfsg-2+deb11u1 | 1.2.11.dfsg-2+deb11u2 | zlib: heap-based buffer overflow |
| | | | | | in inflate() |
+———————+——————+———-+——————-+—————+—————————————+

# 构建安全镜像
$ cat > Dockerfile << EOF FROM docker.io/library/alpine:latest RUN apk add --no-cache nginx && \ rm -rf /var/cache/apk/* && \ adduser -D nginx && \ chown -R nginx:nginx /etc/nginx /var/log/nginx /var/www/html USER nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] EOF # 构建镜像 $ podman build -t fgedu/nginx:secure -f Dockerfile . # 扫描构建的镜像 $ trivy image fgedu/nginx:secure # 输出日志 2026-04-10T10:00:00+08:00 INFO Detected OS: alpine 2026-04-10T10:00:00+08:00 INFO Detecting Alpine vulnerabilities... 2026-04-10T10:00:00+08:00 INFO Number of language-specific files: 0 alpine 3.17.3 (104000d71a2f) ============================= Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0) # 签名镜像 $ podman login docker.io $ podman push fgedu/nginx:secure $ podman image sign docker.io/fgedu/nginx:secure

3.2 容器安全

3.2.1 容器安全配置

# 容器安全配置

# 运行容器,使用非root用户
$ podman run -d –name fgedu-nginx \
–user nginx \
-p 80:80 \
docker.io/library/nginx

# 运行容器,限制权限
$ podman run -d –name fgedu-nginx \
–cap-drop ALL \
–cap-add NET_BIND_SERVICE \
-p 80:80 \
docker.io/library/nginx

# 运行容器,限制资源
$ podman run -d –name fgedu-nginx \
–cpus 1 \
–memory 512m \
–memory-swap 1g \
-p 80:80 \
docker.io/library/nginx

# 运行容器,启用只读文件系统
$ podman run -d –name fgedu-nginx \
–read-only \
-v /tmp:/var/cache/nginx:z \
-p 80:80 \
docker.io/library/nginx

# 运行容器,启用SELinux
$ podman run -d –name fgedu-nginx \
–security-opt label=type:container_t \
-p 80:80 \
docker.io/library/nginx

# 运行容器,启用AppArmor
$ podman run -d –name fgedu-nginx \
–security-opt apparmor=docker-default \
-p 80:80 \
docker.io/library/nginx

3.3 系统安全

3.3.1 系统安全配置

# 系统安全配置

# 启用防火墙
$ sudo systemctl start firewalld
$ sudo systemctl enable firewalld

# 配置防火墙规则
$ sudo firewall-cmd –add-port=80/tcp –permanent
$ sudo firewall-cmd –add-port=443/tcp –permanent
$ sudo firewall-cmd –reload

# 查看防火墙规则
$ sudo firewall-cmd –list-ports

# 输出日志
80/tcp 443/tcp

# 启用SELinux
$ sudo setenforce 1
$ sudo sed -i ‘s/SELINUX=permissive/SELINUX=enforcing/g’ /etc/selinux/config

# 查看SELinux状态
$ sudo sestatus

# 输出日志
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33

# 安装安全更新
$ sudo dnf update -y

# 配置系统限制
$ sudo vi /etc/security/limits.conf

# 添加以下配置
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

# 重启系统
$ sudo reboot

风哥提示:系统安全是容器安全的基础,通过合理的系统安全配置,可以提高容器的安全性。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 安全扫描

4.1.1 安全扫描实战

# 安全扫描实战

# 安装Trivy
$ sudo dnf install -y trivy

# 扫描镜像
$ trivy image docker.io/library/mysql:8.0

# 输出日志
2026-04-10T10:00:00+08:00 INFO Detected OS: debian
2026-04-10T10:00:00+08:00 INFO Detecting Debian vulnerabilities…
2026-04-10T10:00:00+08:00 INFO Number of language-specific files: 0

debian 11.6 (104000d71a2f)
==========================
Total: 15 (UNKNOWN: 0, LOW: 8, MEDIUM: 4, HIGH: 2, CRITICAL: 1)

+———————+——————+———-+——————-+—————+—————————————+
| Library | Vulnerability ID | Severity | Installed Version | Fixed Version | Title |
+———————+——————+———-+——————-+—————+—————————————+
| libc6 | CVE-2022-3715 | MEDIUM | 2.31-13+deb11u4 | 2.31-13+deb11u5 | glibc: GnuTLS vulnerability in |
| | | | | | certificate validation |
| libssl1.1 | CVE-2022-3786 | HIGH | 1.1.1n-0+deb11u3 | 1.1.1n-0+deb11u4 | openssl: Incorrect SSLv2 |
| | | | | | rollback protection |
| zlib1g | CVE-2022-37434 | HIGH | 1.2.11.dfsg-2+deb11u1 | 1.2.11.dfsg-2+deb11u2 | zlib: heap-based buffer overflow |
| | | | | | in inflate() |
| openssl | CVE-2022-3602 | CRITICAL | 1.1.1n-0+deb11u3 | 1.1.1n-0+deb11u4 | openssl: X.509 Email Address |
| | | | | | Buffer Overflow |
+———————+——————+———-+——————-+—————+—————————————+

# 扫描容器
$ podman run -d –name fgedu-mysql \
-e MYSQL_ROOT_PASSWORD=fgedu123 \
docker.io/library/mysql:8.0

$ trivy container fgedu-mysql

# 输出日志
2026-04-10T10:00:00+08:00 INFO Detected OS: debian
2026-04-10T10:00:00+08:00 INFO Detecting Debian vulnerabilities…
2026-04-10T10:00:00+08:00 INFO Number of language-specific files: 0

debian 11.6 (104000d71a2f)
==========================
Total: 15 (UNKNOWN: 0, LOW: 8, MEDIUM: 4, HIGH: 2, CRITICAL: 1)

# 扫描文件系统
$ trivy fs /Podman/app

# 输出日志
2026-04-10T10:00:00+08:00 INFO Detected OS: linux
2026-04-10T10:00:00+08:00 INFO Detecting Linux vulnerabilities…
2026-04-10T10:00:00+08:00 INFO Number of language-specific files: 0

Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

4.2 安全加固

4.2.1 安全加固实战

# 安全加固实战

# 运行容器,使用非root用户
$ podman run -d –name fgedu-nginx \
–user nginx \
-p 80:80 \
docker.io/library/nginx

# 运行容器,限制权限
$ podman run -d –name fgedu-nginx \
–cap-drop ALL \
–cap-add NET_BIND_SERVICE \
-p 80:80 \
docker.io/library/nginx

# 运行容器,限制资源
$ podman run -d –name fgedu-nginx \
–cpus 1 \
–memory 512m \
–memory-swap 1g \
-p 80:80 \
docker.io/library/nginx

# 运行容器,启用只读文件系统
$ podman run -d –name fgedu-nginx \
–read-only \
-v /tmp:/var/cache/nginx:z \
-v /var/log/nginx:/var/log/nginx:z \
-p 80:80 \
docker.io/library/nginx

# 运行容器,启用SELinux
$ podman run -d –name fgedu-nginx \
–security-opt label=type:container_t \
-p 80:80 \
docker.io/library/nginx

# 运行容器,启用AppArmor
$ podman run -d –name fgedu-nginx \
–security-opt apparmor=docker-default \
-p 80:80 \
docker.io/library/nginx

# 运行容器,禁用特权模式
$ podman run -d –name fgedu-nginx \
–privileged=false \
-p 80:80 \
docker.io/library/nginx

# 运行容器,禁用IPC命名空间共享
$ podman run -d –name fgedu-nginx \
–ipc=private \
-p 80:80 \
docker.io/library/nginx

4.3 安全监控

4.3.1 安全监控实战

# 安全监控实战

# 安装Falco
$ sudo dnf install -y falco

# 启动Falco
$ sudo systemctl start falco
$ sudo systemctl enable falco

# 查看Falco状态
$ sudo systemctl status falco

# 输出日志
● falco.service – Falco: Container Native Runtime Security Monitor
Loaded: loaded (/usr/lib/systemd/system/falco.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2026-04-10 10:00:00 CST; 1min ago
Docs: https://falco.org/docs/
Process: 12345 ExecStart=/usr/bin/falco –daemon (code=exited, status=0/SUCCESS)
Main PID: 12346 (falco)
Tasks: 8 (limit: 12345)
Memory: 100.0M
CPU: 1.0%
CGroup: /system.slice/falco.service
└─12346 /usr/bin/falco –daemon

# 查看Falco日志
$ sudo journalctl -u falco

# 输出日志
Apr 10 10:00:00 fgedu.net.cn falco[12346]: Falco version 0.34.1 (x86_64)
Apr 10 10:00:00 fgedu.net.cn falco[12346]: Falco initialized with configuration file /etc/falco/falco.yaml
Apr 10 10:00:00 fgedu.net.cn falco[12346]: Loading rules from file /etc/falco/falco_rules.yaml
Apr 10 10:00:00 fgedu.net.cn falco[12346]: Loading rules from file /etc/falco/falco_rules.local.yaml
Apr 10 10:00:00 fgedu.net.cn falco[12346]: Starting internal webserver, listening on port 8765

# 测试Falco
$ podman run -it –name fgedu-test –privileged docker.io/library/alpine sh

# 在容器中执行敏感操作
# touch /etc/passwd

# 查看Falco告警
$ sudo journalctl -u falco | grep -A 10 “Warning”

# 输出日志
Apr 10 10:05:00 fgedu.net.cn falco[12346]: 10:05:00.000000000: Warning Container with privileged container created (user=root container_id=7890123456ab container_name=fgedu-test image=docker.io/library/alpine:latest)
Apr 10 10:05:00 fgedu.net.cn falco[12346]: 10:05:00.000000000: Warning File below /etc opened for writing (user=root container_id=7890123456ab container_name=fgedu-test image=docker.io/library/alpine:latest file=/etc/passwd command=sh)

生产环境建议:在生产环境中,应建立完善的安全监控机制,及时发现和解决安全问题,确保容器的安全性。from Podman视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 安全管理

Podman容器安全管理的最佳实践:

  • 镜像管理:使用官方或可信的镜像源,定期扫描镜像中的漏洞
  • 容器管理:容器以非root用户运行,限制容器的权限和能力
  • 网络管理:为不同的应用创建独立的网络,实现网络隔离
  • 存储管理:加密敏感数据,限制存储的访问权限
  • 系统管理:定期更新主机系统,配置主机的安全设置
  • 监控管理:监控容器的安全状态,及时发现和解决安全问题
  • 审计管理:记录容器的操作和访问日志,便于审计
  • 应急管理:制定安全应急响应计划,及时处理安全事件

5.2 安全审计

Podman容器安全审计:

# 安全审计

## 审计日志配置
– 启用系统审计:sudo systemctl start auditd
– 配置审计规则:sudo vi /etc/audit/rules.d/audit.rules
– 重启审计服务:sudo systemctl restart auditd

## 审计规则示例
# 审计容器相关操作
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/podman -k podman

# 审计容器文件访问
-a always,exit -F arch=b64 -S open,openat -F dir=/var/lib/containers -k container_files

# 审计网络相关操作
-a always,exit -F arch=b64 -S socket,connect -k network

## 查看审计日志
$ sudo aureport
$ sudo ausearch -k podman

## 容器操作审计
$ podman events –filter type=container

## 镜像操作审计
$ podman events –filter type=image

## 网络操作审计
$ podman events –filter type=network

5.3 安全故障排查

Podman容器安全故障排查:

# 安全故障排查

## 镜像安全问题
– 检查镜像来源:podman inspect | grep -A 10 “RepoTags”
– 扫描镜像漏洞:trivy image
– 检查镜像签名:podman image trust show
– 查看镜像历史:podman history

## 容器安全问题
– 检查容器权限:podman inspect | grep -A 10 “Capabilities”
– 检查容器用户:podman inspect | grep -A 10 “User”
– 检查容器网络:podman inspect | grep -A 20 “Networks”
– 检查容器存储:podman inspect | grep -A 20 “Mounts”

## 网络安全问题
– 检查网络配置:podman network inspect
– 检查防火墙规则:sudo firewall-cmd –list-all
– 检查网络连通性:ping
– 检查网络流量:sudo tcpdump -i

## 存储安全问题
– 检查存储权限:ls -la
– 检查存储隔离:podman inspect | grep -A 20 “Mounts”
– 检查数据加密:查看存储加密配置
– 检查备份状态:查看备份配置和状态

## 系统安全问题
– 检查系统更新:sudo dnf check-update
– 检查SELinux状态:sudo sestatus
– 检查防火墙状态:sudo systemctl status firewalld
– 检查系统日志:sudo journalctl -xe

风哥提示:容器安全管理是确保Podman系统正常运行的重要环节,通过合理的安全配置和管理,可以提高容器的安全性,防止安全事件的发生。建议建立完善的安全管理机制,确保容器的安全性,满足业务需求。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息