Можете ли вы запустить процесс в контейнере 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 не ожидается ввода пароля, все должно выполняться нормально, и вы должны быть в порядке.