如何将本地用户添加到我的 docker 容器中?

Posted

技术标签:

【中文标题】如何将本地用户添加到我的 docker 容器中?【英文标题】:How do I add the local users to my docker container? 【发布时间】:2021-12-18 02:20:32 【问题描述】:

我想知道如何将我的服务器的本地用户添加到 docker 容器中。我不需要导入他们的文件,我只需要为我系统中的每个用户在 docker 容器中使用新的主目录的用户名/密码/权限。例如,假设我的 docker 容器包含以下用户:

主机系统: 管理员:谁拥有对所有的 root 访问权限和 rw 访问权限 bob:一个普通的非 sudo 用户 joe:另一个普通的非 sudo 用户

那么Doc​​ker Container必须有用户: 管理员:谁拥有对所有的 root 访问权限和 rw 访问权限 bob:一个普通的非 sudo 用户 joe:另一个普通的非 sudo 用户

Docker容器和系统都是linux,虽然系统是red hat,容器是ubuntu。

编辑:如果可能,我不想挂载 /etc/ 文件,因为这会造成@caveman

指出的双向安全漏洞

【问题讨论】:

【参考方案1】:

您必须使用-v 安装所有相关的Linux 文件,例如/etc/passwd/etc/shadow/ect/group/etc/sudoers。虽然由于安全风险我不推荐这样做,但如果有人在容器中获得 root 访问权限,他们可以在主机上添加用户或更改密码,因为他的挂载方式是双向的。

文件列表并不详尽,例如,您还必须确保容器中存在 shell 可执行文件。测试时,我必须创建一个从 /usr/bin/zsh/bin/bash 的符号链接,例如,因为我的用户配置了 docker 映像中不存在的 zsh shell。

如果您想使用这些用户与挂载的文件进行交互,您还必须确保禁用用户命名空间重新映射,或者通过--userns=host 标志指定要使用与主机相同的用户命名空间。同样,不推荐,因为它是一项安全功能,因此请小心使用。

注意:完成所有这些操作后,您可以使用su - username 切换到所有现有用户。 -u 选项不起作用,因为 docker 在挂载之前会检查 /etc/passwd 文件并会报错。

【讨论】:

这正是我正在寻找的响应,但是如果 root 用户创建 /etc/passwd 等的副本而不是使用 RUN cat /etc/passwd >> /etc/ 挂载它们怎么办密码?这是否有助于减轻这种双向安全风险? 会,但这确实意味着您将 /ect/passwd 文件包含在 docker 映像中。因此,只有在您始终在运行容器的机器上构建 docker 映像时,这才有效。另请记住,root 用户可以窃取与主机相同的密码哈希,但如果您想保留相同的密码,则无法绕过该密码 另一个不太优雅的解决方案是在创建后将所有需要的文件从主机复制到正在运行的容器中。可以使用docker cp 命令和 bash 脚本来启动容器并执行复制。

以上是关于如何将本地用户添加到我的 docker 容器中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 lua-cjson 添加到我的 nginx lua 容器中?

Plesk:如何将域端口 80 和 443 重定向到我的 Docker 容器?

如何访问Docker容器中的根文件夹

如何将一个端口从 Elastic Beanstalk 映射到我的 Flask 应用程序的 Docker 容器?

如何将本地docker 镜像上传到我的私有仓库

如何使用 docker-compose.yml 和 ecs-cli 将 EBS 卷附加到我的容器