Можете ли вы запустить процесс в контейнере Docker от имени пользователя root, в то время как пользователь по умолчанию для вызова exec не является пользователем root?

Я в основном пытаюсь бежать crond -f от имени пользователя root, если у пользователя по умолчанию будет что-то другое.

Поскольку выполняемые crontabs используют конфиденциальную информацию из других файлов на изображении, я хочу предоставить root-доступ к этим файлам, запустить процесс crond, а затем переключить пользователя на вновь созданный. Таким образом, cronjobs сможет получить необходимую им информацию, защищая конфиденциальные файлы в контейнере от любого, кто может получить доступ exec.

попробовал пару вещей, как это:

USER root

CMD ["./runCrons.sh"]

USER newuser

Но при этом процесс crond запускается не как root, а как newuser.

Если у кого-то есть решение, это спасет меня от копания и экспериментов.

1 ответ

При создании образа Docker создайте пользователя, который принадлежит к группе sudo и может запускать все команды sudo без пароля.

Рассмотрим приведенный ниже пример, который создает образ докера под названием test с пользователем myuser с помощью sudo pass:

$ cat Dockerfile

FROM debian:latest
ENV user_name myuser
RUN apt-get update
RUN apt-get install -y sudo
RUN useradd --create-home -s /bin/bash ${user_name}
RUN echo "${user_name} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${user_name}
WORKDIR /home/${user_name}
USER ${user_name}
CMD /bin/bash

Затем создайте изображение:

docker build -t test,

Теперь, чтобы исправить проблемы с правами cron для обычного пользователя, убедитесь, что все команды, используемые в скриптах cron, начинаются с sudo, как показано ниже.

CMD ["sudo ./runCrons.sh"]

Поскольку при использовании sudo не ожидается ввода пароля, все должно выполняться нормально, и вы должны быть в порядке.

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