Как выполнить задание cron как пользователь не-root в Ubuntu внутри Docker - PullRequest
1 голос
/ 31 января 2020

Это Dockerfile изображения, которое я пытаюсь создать. Пользователь, не являющийся root, имитирует пользователя хоста на локальном компьютере.

FROM ubuntu:bionic
RUN apt-get -yqq update && apt-get -yqq install cron passwd openssl strace
RUN groupadd -g 1000 hostuser && useradd -l -u 1000 -m -s /bin/bash -p $(openssl passwd -1 test1) -g hostuser hostuser
COPY hello-cron /etc/cron.d/hello-cron
RUN sudo chmod 0644 /etc/cron.d/hello-cron
COPY hello-cron-root /etc/cron.d/hello-cron-root
RUN sudo chmod 0644 /etc/cron.d/hello-cron-root
RUN touch /var/log/cron.log
COPY cron.allow /etc/cron.allow
#CMD /usr/sbin/cron -L 15 && tail -f /var/log/cron.log
CMD strace /usr/sbin/cron -f -L 15

Это файл hello-cron:

* * * * * hostuser echo "Hello World" >> /var/log/cron.log 2>&1

Это файл hello-cron - root:

* * * * * root echo "Hello World Root" >> /var/log/cron.log 2>&1

Это файл cron.allow:

hostuser

Когда я создаю и выполняю ТОЛЬКО образ, задание, выполненное в root, дает некоторый вывод. Strace не сильно помог. Есть идеи?

К сожалению, я не могу использовать Alpine или что-то еще. Мне нужно сделать эту работу, используя Ubuntu Bioni c.

1 Ответ

0 голосов
/ 31 января 2020

Пока это единственное, что работает в этой настройке:

FROM ubuntu:bionic
RUN apt-get -yqq update && apt-get -yqq install cron passwd openssl sudo
RUN groupadd -g 1000 hostuser && useradd -l -u 1000 -m -s /bin/bash -p $(openssl passwd -1 test1) -g hostuser hostuser
COPY hello-cron-root /etc/cron.d/hello-cron-root
RUN sudo chmod 0644 /etc/cron.d/hello-cron-root
RUN touch /var/log/cron.log
COPY cron.allow /etc/cron.allow
COPY hostuser-run /usr/local/bin/hostuser-run
RUN chmod +x /usr/local/bin/hostuser-run
CMD /usr/sbin/cron -L 15 && tail -f /var/log/cron.log

Это hostuser-run:

#!/usr/bin/env bash

sudo -H -s -u 'hostuser' echo "We are running as $USER"

Это файл hello-cron- root:

* * * * * root /usr/local/bin/hostuser-run >> /var/log/cron.log 2>&1

Подводя итог - учитывая, что только root задания cron работают под docker, чтобы выполнять вещи под другим пользователем, используйте вспомогательный скрипт с sudo -u.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...