Обновление группы без выхода из системы или подоболочки

Я пытаюсь запустить Docker для потоковой передачи Elastic MapReduce, но у меня возникли проблемы с разрешением. В моем скрипте начальной загрузки мне нужно, чтобы пользователь hadoop был частью группы docker (как описано на странице Основы AWS Docker):

sudo usermod -a -G docker hadoop

но я не могу выйти из системы или создать подоболочку (с newgrp). Есть ли способ заставить настройки группы вступить в силу в моем текущем сеансе оболочки?

2 ответа

Нет - если только hadoop Если процесс запущен от имени пользователя root, то вы можете сделать некоторую хитрость GDB, чтобы изменить EUID, но не группу. Но я думаю, это не поможет в вашем случае.

Что может помочь, так это временно разрешить hadoop доступ пользователей к файлам, предназначенным для docker группа для доступа.

Пример: hadoop пользователю нужен доступ на запись к /foo каталог, но только docker группа может в настоящее время написать это:

$ ls -ld / foo /
drwxrwx --- 2 корневых докера 4096 10 марта 00:42 /foo/

В настоящее время большинство файловых систем поддерживают ACL:

$ sudo setfacl -mg: docker: rwx / foo

Теперь hadoop пользователь сможет писать в /foo,

Я знаю, это не то, что вы просили, но, поскольку нет возможности изменить EGID запущенного процесса, возможно, он работает наоборот с помощью ACL.

Мне потребовалось некоторое время, чтобы понять, как запустить Docker на Hadoop Streaming на EMR. Оказывается, что пользователь, который запускает задание, yarn и не hadoop, Таким образом, скрипт начальной загрузки должен иметь следующие строки:

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

Обратите внимание, что я создаю вручную yarn пользователь, потому что при запуске скрипта начальной загрузки Hadoop еще не установлен

Другие вопросы по тегам