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
实用程序和相关实用程序(如 groupadd
和 chsh
等)创建一个新的普通用户。
当然,如果容器已经设置了一个普通的非root用户账户,你只需要在Dockerfile
中用USER
关键字指定那个账户名,就像在你的问题。
运行把一切都变成 root
的风险是有据可查的;例如,您不希望自己创建的简单用户脚本能够错误地删除系统文件。如果脚本 运行 是一项将其暴露给糟糕的 Internet 的服务,您 绝对 不希望入侵者找到一种方法来利用您的脚本来轻松获得 root
立即访问。也许搜索 最小权限原则 以获得更多背景信息。例如,参见 Wikipedia's exposition.
我正在阅读 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
实用程序和相关实用程序(如 groupadd
和 chsh
等)创建一个新的普通用户。
当然,如果容器已经设置了一个普通的非root用户账户,你只需要在Dockerfile
中用USER
关键字指定那个账户名,就像在你的问题。
运行把一切都变成 root
的风险是有据可查的;例如,您不希望自己创建的简单用户脚本能够错误地删除系统文件。如果脚本 运行 是一项将其暴露给糟糕的 Internet 的服务,您 绝对 不希望入侵者找到一种方法来利用您的脚本来轻松获得 root
立即访问。也许搜索 最小权限原则 以获得更多背景信息。例如,参见 Wikipedia's exposition.