当前位置: 首页 > 知识库问答 >
问题:

是否建议在泊坞窗容器中使用 sudo?

莘欣怿
2023-03-14

我总是被告知以root用户身份登录是不好的做法。然而,这是Docker在其容器中默认做的事情,因此某些包会打印警告。

我应该切换到标准用户并在我的容器中使用sudo吗?或者这并不比在Docker容器中使用root用户有什么好处?

我的容器运行的是php8.1:apache(在Debian 11上),我在我网站的服务器上使用它。它有两个打开的端口和一个共享卷(在< code>/var/www/hmtl/内部的web应用程序)。Sudo确实带来了一些额外的复杂性,比如does文件中多了一些指令,以及一些命令无法访问的环境变量。

共有1个答案

郑光济
2023-03-14

我会主动避免在 Docker 容器中安装 sudo。这是不必要的,并且设置它的最常见示例是主动不安全的。

在Dockerfile的上下文中,您可以根据需要经常使用USER指令来切换用户。

FROM some-base-image-with-a-non-root-user

USER root
RUN apt-get update && apt-get install ...
USER nonroot

Docker容器只运行一个进程。如果出于任何原因(包括root用户)需要以其他用户身份运行它,可以使用<code>docker run-u</code>选项。

docker run --rm -u root ubuntu cat /etc/shadow

# but more often, as the host user
docker run --rm -u $(id -u):$(id -g) -v "$PWD:/data" some-image

您应该避免在“容器内”工作,因为一旦容器退出,您手动更改的任何内容都将丢失。例如,我通常会不鼓励泊坞管理员执行...安装,因为它要求丢失工作。但是,如果您出于任何原因确实需要以 root 身份在容器内进行调试,则 docker exec -u 也是一种选择。

@will-wright-eng链接如何在docker容器内使用sudo?在这里,您可以看到常见的安全错误:

# don't do this, it's not necessary
RUN apt-get update && apt-get install -y sudo

# don't give a user a hard-coded password, that's trivially
# guessable, and recorded in the Dockerfile and history in plain text
RUN useradd docker && echo "docker:docker" | chpasswd

# don't allow the user to do anything anyways, so long as they
# ask nicely first
RUN echo "docker ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

给用户不受限制的sudo访问权限可以让他们有效地成为root用户。礼貌地问会给你一点保护。但是,假设您的代码有一个远程执行漏洞,并且攻击者有某种rootkit,但它实际上涉及到root用户;您可以确保他们会尝试查看sudorootkit升级是否在没有密码的情况下工作。

一些包管理器抱怨以root身份运行(这里想到了Python的< code>pip)。抑制这些警告是可以的。因为您是在Docker映像的隔离环境中运行,所以您不会意外地破坏共享Python安装的“系统”包。

 类似资料:
  • 问题内容: 我正在docker容器内的GCE上运行jenkins实例,并希望从此Jenkinsfile和Github执行多分支管道。我正在为此使用GCE詹金斯教程。这是我的 我总是得到一个错误: 为了使docker在jenkins中工作,我需要更改什么? 问题答案: 看起来像DiD(Docker中的Docker),最近的一期杂志指出这是有问题的。 请参阅“ 在您的CI或测试环境中使用Docker-

  • 我正在开发一个服务,并使用docker compose来旋转服务,如postgres,redis,elasticsearch。我有一个基于RubyOnRails的web应用程序,可以读写所有这些服务。 这是我的docker-compose.yml 我可以ping这个网络中的容器 到目前为止一切顺利。现在,我想在我的主机上运行ruby on rails应用程序,但是能够使用类似< code > Po

  • 我在windows 10 home上工作。 当我运行docker快速启动终端快捷方式或直接运行 start.sh 时,我收到消息: Docker Machine未安装。请重新运行工具箱安装程序,然后重试。看起来“查找vboxmanage.exe”步骤出错…按任意键继续。。。 我尝试重新安装,选择了所有选项,包括NDIS5驱动程序,但我没有帮助。运动学工作正常,但我无法在终端中运行docker。 我

  • 问题内容: 我想这应该很基本,但是我已经尝试过搜索它,并且阅读了docker文档。但是,我仍然无法理解“ Thin Pool ”的确切含义以及它在docker世界中的作用。 问题答案: 短篇故事: 精简池是一种存储源,可按需分配存储空间。它或多或少类似于虚拟内存,它为每个进程提供完整的地址空间。 很长的故事: 脂肪供应 传统的存储分配方法称为“胖”或“厚”配置。 例如,用户声称使用10G存储空间。

  • 如何将多个标签附加到一个 Docker 映像?是否可以使用一个 Docker 文件创建多个标记? 不知何故,这是可能的;例如会得到几个图像,其中一些有多个标签:

  • 什么会阻止 命令完成?它永远不会返回到命令提示符或报告任何类型的错误。相反,它反复在“新”,“已分配”,“就绪”和“开始”之间切换。 这是命令: 这是来自“DevOps 2.1工具包 - Docker群”,维克多·法西奇的一本书,我遇到了一个我无法克服的问题...... 我试图在一群三个节点上运行一个反向代理服务,所有节点都在LinuxMint系统上本地运行,而< code>docker serv