Как скопировать файлы в качестве действия Jenkins «после сборки», если у меня нет прав на доступ к целевому каталогу

Как скопировать файлы в качестве действия Jenkins «после сборки», если у меня нет прав на доступ к целевому каталогу

У меня есть следующая «архитектура» пользователей:

  1. root-доступ отключен.
  2. Пользователь admin имеет доступ только к своему домашнему каталогу.
  3. Apache работает как корневая служба (только root имеет доступ к файлам веб-сервера)
  4. Я установил Jenkins CI, который собирает мой проект с правами «администратора».

Я хотел бы скопировать последние файлы сборки в папку на моем веб-сервере в качестве действия после сборки. Как мне это сделать, если доступ к моему целевому каталогу есть только у пользователя «root»? Может быть, моя «архитектура пользователей» изначально неверна?

решение1

Может быть, моя «архитектура пользователей» изначально неверна?

Да. Не хочу вас расстраивать, но это оно. Вот как это следует изменить:

  1. Запустите Apache как его собственный пользователь, желательно в chroot. Это называется принципом минимальных привилегий — идея заключается в ограничении ущерба, который может быть нанесен в случае, если что-то будет скомпрометировано. Предположим, что что-товоляскомпрометируйтесь и работайте оттуда. Нет никаких причин, по которым вам следует запускать Apache как привилегированный пользователь.
  2. Запустите Jenkins CI как его собственный пользователь. Применяется тот же принцип.
  3. Предоставьте какой-либо способ, чтобы файлы попали в каталог веб-сервера. Например, вы можете добавить пользователя Jenkins в группу Apache. Это должно предоставить серверу сборки Jenkins доступ к каталогу веб-сервера. Еще более безопасным способом было бы запустить задание cron или таймер systemd от имени пользователя Apache и использовать его для копирования файлов. Почему это безопаснее? Если Jenkins скомпрометирован, злоумышленник не получит доступа к каталогам вашего веб-сервера.

Связанный контент