docker 容器中的 root 和非 root 用户是什么?它对安全性有何影响?

What is root an non root user in docker containers and how it really affect security?

我正在阅读 freecodecamp 中的一本书,其中谈到了 docker,我阅读的部分是关于创建 Javascript 使用节点作为基础图像的图像和将默认用户设置为 node

user 指令

作者提到 user 指令设置为 node 出于安全问题,因此最好尽可能以非根用户身份 运行

FROM node:lts-alpine

EXPOSE 3000

USER node

RUN mkdir -p /home/node/app

WORKDIR /home/node/app

COPY ./package.json .
RUN npm install

COPY . .

CMD [ "npm", "run", "dev" ]

有两点我不明白:

1 - 什么是镜像的 root 用户和非 root 用户?

2 - 指令保护的安全问题是什么???

没有适用于所有可能的 Docker 容器的通用答案,但一个非常典型和常见的安排是您的基本容器仅包含 root 用户。

然后您可以使用 运行 adduser (on Debian-based platforms; or look at the more primitive useradd 实用程序和相关实用程序(如 groupaddchsh 等)创建一个新的普通用户。

当然,如果容器已经设置了一个普通的非root用户账户,你只需要在Dockerfile中用USER关键字指定那个账户名,就像在你的问题。

运行把一切都变成 root 的风险是有据可查的;例如,您不希望自己创建的简单用户脚本能够错误地删除系统文件。如果脚本 运行 是一项将其暴露给糟糕的 Internet 的服务,您 绝对 不希望入侵者找到一种方法来利用您的脚本来轻松获得 root 立即访问。也许搜索 最小权限原则 以获得更多背景信息。例如,参见 Wikipedia's exposition.