1

我浏览了几篇关于 Docker 最佳实践的文章,并认识到以非特权用户身份运行容器具有一些明显的安全优势。所以我的第一个问题是:为什么要使用USER指令来构建你的图像?也就是说,为什么不简单地将镜像构建为root,而run将容器构建为受限用户?在那种情况下,它似乎USER是多余的。

故事并没有就此结束。我尝试了各种用例USER。当我基于 debian 快照构建映像时,我放置USER在所有相关apt-get安装之后。到目前为止,一切都很好。但是,当我尝试在USER的主目录中创建内容时,权限问题就会浮出水面——无论我是否明确地USER为封闭的父目录分配和分组权限。

每当我遇到一个不能以明显方式工作的功能时,我都会问自己,它是否值得保留。USER那么,考虑到您可能可以从容器外部以用户限制的方式(至少从权限的角度来看)做所有事情,是否有任何实际的理由来保留?

4

1 回答 1

2

以非 root 用户(Docker 或其他)身份运行的主要原因之一是作为额外的安全层:即使您的应用程序以某种方式受到损害,它也无法覆盖其自己的源代码或它所服务的静态内容给最终用户。我通常会包含一个USER指令,但仅在最后包含一个指令,以便它只影响docker run命令的(默认)用户。

FROM some-base-image
...
# Do all installation as root
...
# And pick an alternate user for runtime only
USER something
CMD ["the_app"]

“主目录”并不是真正的 Docker 概念。例如,将您的应用程序存储在/app(root 拥有的模式 0755)中是非常典型的。

于 2020-05-16T11:24:27.357 回答