@kogotag

Как решать конфликты прав между пользователем, выполняющим деплой, и рутом, создающим файлы через docker?

Конкретная ситуация: у меня есть гитхаб-раннер, который скачивает код с гитхаба, копирует его в контейнер, делает в нём билд, и выплёвывает в какую-то папку, скажем, в /home/user/site_front/dist. Гитхаб-раннер действует от лица user, у него есть sudo без пароля только на докер. Все файлы в dist принадлежат, разумеется, root, поскольку их туда закинул докер. Затем тот же гитхаб раннер, копирует файлы из dist в /home/user/site_nginx/dist и запускает докер уже в /home/user/site_nginx, который имеет volume на папку dist. И вот как только мне понадобилось поудалять файлы из обоих упомянутых папок, чтобы сделать новые, у меня возникают конфликты: пользователь гитхаб-раннера не может удалить файлы, принадлежащие руту.

Мне не хочется расшаривать судо без пароля на команды удаления, перемещения, копирования и изменения владельца на пользователя гитхаб-раннера..

Ну и собственно вопрос состоит в том, как решать такие конфликты. Я пытался сводить всё к тому, чтобы действия над файлами всегда производились уже внутри контейнера, но в этой ситуации уже начинают идти неудобные костыли. И вообще, может стоит всё-таки дать судо без пароля на юзера? Может использовать другой способ разворачивания, какую-нибудь другую программу? В таком случае порекомендуйте...
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 3
@rPman
Причина проблем в том что github-runner запускает docker из под root с помощью sudo, а дальше все права файлов будут рутовые.

Необходимо разрешить github-runner запускать docker без sudo (добавить в группу docker, погугли подробности, там есть еще нюансы) тогда все остальное так же можно будет разрулить правами доступа
Ответ написан
Griboks
@Griboks
Рассказываю секретный лайфак сисадмина. Абсолютно все программы нужно всегда запускать под root, чтобы не возникало никаких конфликтов.
А если у вас нет доступа к root, то и программы запускать вы не имеете права - зовите вашего сисадмина.
Ответ написан
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Поставьте rootless для docker
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы