容器安全加固需实施只读根文件系统、非root用户运行和最小化能力权限。1. 使用--read-only或readOnlyRootFilesystem:true限制文件系统写入;2. 通过USER指令或runAsUser设置非root用户;3. 用--cap-drop=ALL移除默认能力,按需添加如NET_BIND_SERVICE;4. 结合最小镜像、资源限制和敏感目录只读挂载,构建安全运行环境。

容器安全加固是 Linux 运维中非常关键的一环,尤其是在多租户或生产环境中。通过限制容器的权限和文件系统访问,可以有效降低因应用漏洞或配置错误导致的安全风险。以下是针对容器进行基本安全加固的核心措施,重点包括启用只读根文件系统和最小化运行权限。
1. 启用只读根文件系统
将容器的根文件系统设为只读,能防止攻击者在容器内写入恶意文件或修改系统配置。
实现方式:
- 使用 Docker 时添加 --read-only 参数:
docker run --read-only -d myapp:latest
- 若应用需要写入某些路径(如日志、缓存),可通过临时文件系统挂载允许写入:
docker run --read-only --tmpfs /tmp --tmpfs /var/log myapp:latest
- 在 Kubernetes 中,通过 Pod 安全上下文配置:
readOnlyRootFilesystem: true
2. 限制容器运行权限(非 root 用户)
默认情况下,容器以内置 root 用户运行,一旦被突破,攻击者将拥有较高权限。应强制容器使用非特权用户运行。
操作建议:
- 在镜像的 Dockerfile 中创建普通用户并切换:
USER appuser
- 运行容器时指定用户 ID:
docker run -u 1001 myapp:latest
- Kubernetes 中设置运行用户:
runAsUser: 1001
runAsNonRoot: true
3. 禁用不必要的能力(Capabilities)
Linux Capabilities 决定了进程能执行哪些特权操作。容器默认会丢弃部分能力,但仍可能保留一些不必要的权限。
建议做法:
- 移除所有能力,仅按需添加:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp:latest
- Kubernetes 中配置:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
4. 其他基础加固建议
除了上述核心措施,还可结合以下实践提升安全性:
- 使用最小化基础镜像(如 distroless 或 Alpine)
- 避免使用 --privileged 模式
- 限制 CPU 和内存资源,防 DoS
- 挂载敏感主机目录时使用只读模式(如 /proc, /sys)
- 定期更新镜像基础系统和软件包
基本上就这些。只读文件系统 + 非 root 用户 + 能力限制,构成了容器基础安全的三大支柱。配合合理的镜像管理和运行时策略,能显著提升整体安全性。









