无需注销或使用子 shell 即可更新组

无需注销或使用子 shell 即可更新组

我正在尝试在 Elastic MapReduce 流上运行 Docker,但遇到了权限问题。在我的引导脚本中,我需要“hadoop”用户成为“docker”组的一部分(如AWS Docker 基础知识页面):

sudo usermod -a -G docker hadoop

但我无法注销或生成子 shell(使用 newgrp)。有没有办法强制组设置在我当前的 shell 会话中生效?

答案1

不 - 除非该hadoop进程以 root 身份运行,否则你可以做一些gdb 诡计改变欧盟身份证,但不是小组。但我想这对你的情况没有帮助。

什么可以帮助就是暂时地允许用户访问该组可以访问的hadoop文件。docker

示例:hadoop用户需要对目录具有写访问权限/foo,但是docker目前只有组可以对其进行写入:

$ ls -ld /foo/
drwxrwx--- 2 root docker 4096 3月10日 00:42 /foo/

大多数文件系统支持ACL如今:

$ sudo setfacl -mg:docker:rwx /foo

现在hadoop用户将能够写入/foo

我知道,这不是你问的,但由于没有可能改变正在运行的进程的 EGID,也许它可以在 ACL 的帮助下以相反的方式工作。

答案2

我花了一段时间才弄清楚如何在 EMR 上的 Hadoop Streaming 上运行 Docker。事实证明,运行该作业的用户是yarn而不是hadoop。因此,引导脚本需要包含以下几行:

sudo useradd -r yarn # create 'yarn' since it does not exist yet
sudo usermod -a -G docker yarn

请注意,我手动创建yarn用户,因为当引导脚本运行时,Hadoop 尚未安装

相关内容