零基础也能学会的容器安全加固指南

容器化部署越来越普及,但很多新手搭建完容器后就放着不管,给攻击者留下了可乘之径。容器安全加固并不是复杂的事,只需要调整几个关键参数就能大幅提升安全性。
本文适合完全没接触过安全配置的新手,你只需有一台装好 Docker 的 Linux 服务器(建议 CentOS 7+ 或 Ubuntu 18.04+),跟着下面的步骤敲命令就行。

先检查当前容器的风险点

在动手加固前,先用一条命令看看你的容器是否存在常见安全问题。

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.Ports}}"

这条命令会列出所有运行中的容器 ID、镜像、启动命令和端口映射。
重点关注两点:

  • 是否有很多端口直接暴露到 0.0.0.0 ?
  • 启动时有没有加 --privileged--cap-add=ALL

如果发现 --privileged 参数,说明该容器拥有宿主机内核的全部权限,这是最危险的情况之一。

第一步:避免容器以 root 用户运行

默认情况下,容器内的进程也是 root。
但 Docker 允许用 --user 参数指定一个普通用户运行。

如果镜像本身已经创建了普通用户(比如 nginx 镜像有 nginx 用户),你可以在启动时加上:

docker run -d --user nginx nginx:latest

如果镜像里没有额外用户,建议用宿主机的 UID 1000(假设你有一个普通用户)启动:

docker run -d --user 1000:1000 your-image
避坑提醒:如果容器进程需要写日志文件,确保挂载的目录权限对应用户可写。可以先在宿主机上执行 chown 1000:1000 /path/to/log

第二步:挂载只读文件系统并限制资源

即使容器被攻破,只读文件系统能阻止攻击者写文件。
启动时加 --read-only 参数:

docker run -d --read-only --tmpfs /tmp --tmpfs /var/run your-image

--tmpfs 允许某些临时目录可写(比如 /tmp/var/run),不影响只读的主文件系统。

同时限制 CPU 和内存使用,防止容器耗尽宿主机资源:

docker run -d --read-only --cpus="0.5" --memory="512m" --memory-swap="0" your-image
  • --cpus="0.5":容器最多用 0.5 核
  • --memory="512m":最多 512MB 内存
  • --memory-swap="0":禁止使用 swap(防止内存泄漏时撑爆磁盘)

如果已经在运行的容器,可以用 docker update 动态调整:

docker update --cpus="0.5" --memory="512m" your-container

第三步:使用安全框架检测镜像漏洞

加固不只是运行时,镜像本身也可能藏有高危漏洞。
推荐用开源的 Trivy 扫描镜像。

安装 Trivy(一行命令):

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image your-image:tag

扫描结果会列出 CVE 漏洞编号、严重等级和修复建议。
对于高危漏洞,优先换无漏洞的基础镜像(比如 alpine 系列镜像体积小、漏洞少)。

第四步:验证加固效果

加固完成后,务必用压力测试和权限检测确认效果。

1. 验证资源限制

进入容器安装 stress 工具(如果镜像含包管理),然后跑压力测试:

docker exec -it your-container sh
# 在容器内安装 stress(以 Ubuntu 为例)
apt update && apt install -y stress
stress --cpu 4 --timeout 20

用宿主机 htop 观察是否被限制在 0.5 核内。

2. 验证只读文件系统

在容器内尝试创建一个文件:

docker exec your-container touch /test.txt

如果报错 Read-only file system,说明只读生效。

3. 检查用户权限

docker exec your-container whoami

应该显示 nginx1000,而不是 root

常见问题与避坑说明

Q:加了 --read-only 后容器日志不写了怎么办?
A:把日志目录挂载为 tmpfs:--tmpfs /var/log/myapp;或者挂载宿主机目录并给写入权限。

Q:Trivy 扫描发现很多漏洞,升级镜像很麻烦?
A:至少修复 Critical 级别的漏洞,其他可以后续迭代。也可以改用 docker-slim 精简镜像减少攻击面。

Q:我的容器必须用 --privileged 才能运行,怎么办?
A:尽量不要。如果必须,用 --cap-add 只添加真正需要的 capabilities(比如 --cap-add=NET_ADMIN 用于网络管理),绝不加 ALL

Q:已经启动的容器怎么添加 --user
A:只能删掉旧容器,用新参数重新创建。建议先从 Dockerfile 里固定 USER 指令,一劳永逸。

写在最后

容器安全加固其实就几步:改掉默认 root 用户、限制资源、挂载只读文件系统、扫描镜像漏洞。
做一遍后,你的容器安全度会提升一个档次。
遇到异常时,先看看是不是挂载目录权限问题或 --read-only 挡住了写操作。
如果你正在搭建生产环境的容器,建议把这套流程写进部署脚本,每次启动都自动应用。
坚持这个习惯,就能一直保持较高的安全水位。

分享到:
上一篇
容器镜像优化:从 Dockerfile
下一篇
服务器SSL协议报错怎么办?从诊断到修复的完整教程
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意