Как отбросить привилегии в сценарии внутри неинтерактивной оболочки?

Я использую Docker для создания образов, которые можно запускать как контейнеры. Я настраиваю свой образ как пользователь root, включая настройку томов и другие вещи. Но как только я получил все, что настроил, я хотел бы отбросить привилегии непривилегированному пользователю для запуска моего фактического приложения. Вот что я пытаюсь сделать в настоящее время:

# Do privileged stuff
su myuser -c "myapplicationcommand $@"

однако, когда эти контейнеры развертываются, я, по-видимому, работаю в неинтерактивной оболочке, потому что я получаю это ошибка:

su: must be run from a terminal

очевидно, что команда "su"должна выполняться в интерактивной оболочке. Поэтому мой вопрос: Как я могу отбросить привилегии из неинтерактивной оболочки, чтобы мое приложение могло работать как некорневой пользователь внутри моего контейнера Docker?

26
задан dsw88
10.05.2023 1:22 Количество просмотров материала 2369
Распечатать страницу

3 ответа

старый вопрос, но я не вижу много хороших ответов, поэтому добавляю это обновление в надежде, что оно поможет другим:

вы можете использовать параметры docker run-t и docker exec-it для выделения pty в сеансе docker exec. Здесь есть хороший вопрос и ответ на это: https://github.com/docker/docker/issues/8631

это более простой: и вам не нужно изменять способ создания или запуска контейнера. С docker exec вы можете просто используйте опцию-u для входа в контейнер от имени других пользователей и избегайте использования su. например,

$ docker exec -u root -it small_hypatia bash

$ docker exec -u someone-else -it small_hypatia bash

Также см. Более общий ответ на решение "su: должен запускаться из терминала" здесь. В частности, полезно знать, как можно использовать' ssh-t 'и' ssh-tt'. Python pty выделяют милый Хак также может быть использован, чтобы получить Су работает на кого-то с той же проблемой. https://stackoverflow.com/questions/36944634/su-command-in-docker-returns-must-be-run-from-terminal/41872292#41872292

1
отвечен gaoithe 2023-05-11 09:10

обычно su не зависит от tty. Однако, если есть что-то на пути использования su, возможно, вы могли бы сделать то же самое с sudo.

0
отвечен Christopher Cox 2023-05-11 11:27

можно использовать

RUN adduser myuser
USER myuser
RUN foo
CMD bar

оба foo (во время сборки) и bar (во время выполнения) будут работать как myuser.

0
отвечен Sean McLaughlin 2023-05-11 13:44

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх