首页 > 解决方案 > 以root用户身份运行docker镜像,以非root用户身份运行服务

问题描述

从安全的角度来看,我试图了解两者之间的区别

在第二个选项中,将有一个以 root 身份运行并以非 root 用户身份启动服务的启动脚本。

这两个是等价的吗?考虑到启动脚本以 root 身份运行,第二个选项是否容易受到攻击?启动服务后是否退出(或不退出)是否重要?

对不起,如果这个问题已经被问及并得到了回答。

标签: dockerdocker-compose

解决方案


真正重要的是,一旦您的服务启动并运行,它就不会以 root 身份运行。(这在 Docker 中没有那么重要,但“不要成为 root”仍然被认为是最佳实践。)您提出的两个选项都是有效的方法。

您的第二个选项“以 root 身份启动然后放弃特权”在 Docker 中并不常见,但它在精神上与大多数 Unix 守护程序所做的相匹配。官方 Hashicorp 领事形象是我所知道的一件事,它实际上是这样做的。特别是,它希望以挂载的某些数据目录启动,因此chown -R consul在守护程序正确启动之前,它以 root 身份使用数据目录。我希望这是这种模式的一个非常典型的用法。

如果您不需要进行这种预启动设置,USER那么在您的末尾指定一些任意的非 root 在Dockerfile机制上更容易并选中相同的“不要成为 root”框。

关于尝试以当前主机用户身份运行容器,或尝试针对主机文件系统运行打包在 Docker 中的工具,存在许多 SO 问题。这很尴尬,因为 Docker 的一个关键设计目标是将容器与这些主机细节隔离开来。如果您需要选择运行容器进程的用户,您需要标准docker run -u选项并且需要第一个选项。


推荐阅读