Docker 容器安全加固:如何通过非 Root 用户运行应用

舞姬之光

舞姬之光

2026-06-21

683人浏览

原创

非 root 运行需构建阶段创建固定 uid 用户、精准设置文件归属、严格 user 指令顺序,并运行后验证进程身份与权限边界,缺一不可。

docker 容器安全加固:如何通过非 root 用户运行应用

让应用在 Docker 容器里以非 root 用户运行,不是加个 USER 就算完成,而是从构建起点就切断默认高权路径。关键在于用户存在、权限匹配、运行验证三者闭环,缺一不可。

创建确定 UID 的专用用户

容器不读宿主机 /etc/passwd,必须在构建阶段显式创建。推荐固定 UID ≥ 1001(避开系统用户范围),不配 shell 和 home 目录,减少攻击面:

  • Debian/Ubuntu 镜像:RUN adduser --disabled-password --gecos '' --uid 1001 appuser
  • Alpine/CentOS 镜像:RUN addgroup -g 1001 -f appgroup && adduser -S -u 1001 -G appgroup appuser
  • 若基础镜像已带非 root 用户(如 node:alpinenode),优先复用,但需确认其 UID/GID 与挂载目录一致

精准设置文件归属,避免启动失败

COPY 或 ADD 后,应用目录、日志路径、临时目录等必须对目标 UID 可读写。错误做法是递归 chown 整个 /;正确做法是聚焦最小必要集:

Docker Desktop
Docker Desktop

Docker Desktop 可用于构建容器化 PHP 开发环境,适合 Laravel、Symfony、WordPress 等项目统一运行依赖。

下载
  • 推荐直接在 COPY 中控制归属:COPY --chown=1001:1001 . /app
  • 配套提前建好工作目录并赋权:RUN mkdir -p /app /var/log/myapp /tmp && chown -R 1001:1001 /app /var/log/myapp /tmp
  • 多阶段构建中,最终镜像只保留二进制、配置、启动脚本,剔除源码、.git、构建缓存等无关内容

USER 指令位置必须严格守序

USER 只影响其后的指令(CMD、ENTRYPOINT、后续 RUN),不会回溯修改之前文件的所有者。顺序错一步,轻则启动报错,重则权限失效:

  • ✅ 正确示例:先安装依赖、再复制并设权、最后切换用户
  • ❌ 错误示例:USER appuser 放在 RUN apt-get install 前,导致安装失败
  • 多阶段构建中,仅最终运行阶段需设 USER;构建阶段仍可用 root 安装依赖或编译

运行后必须手动验证是否真生效

不能只看 Dockerfile 写了 USER 就认为加固完成。启动容器后需进入确认实际进程身份和权限边界:

  • 检查进程 UID:docker exec -it ps aux | grep your-app,USER 列应为 1001 或用户名
  • 尝试以 root 进入:docker exec -u 0 -it sh,应被拒绝(除非启用 user namespace remap)
  • 测试越权操作:docker exec -u 1001 touch /etc/test,应返回 Permission denied

非 root 是安全基线,不是终点。生产环境建议叠加 --cap-drop=ALL --cap-add=NET_BIND_SERVICE--read-only--security-opt no-new-privileges,Kubernetes 中还可配合 securityContext.runAsNonRoot: true 强制兜底。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

355

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

617

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

1194

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

428

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

324

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

190

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1030

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

1823

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

322

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习