У меня есть следующая «архитектура» пользователей:
- root-доступ отключен.
- Пользователь admin имеет доступ только к своему домашнему каталогу.
- Apache работает как корневая служба (только root имеет доступ к файлам веб-сервера)
- Я установил Jenkins CI, который собирает мой проект с правами «администратора».
Я хотел бы скопировать последние файлы сборки в папку на моем веб-сервере в качестве действия после сборки. Как мне это сделать, если доступ к моему целевому каталогу есть только у пользователя «root»? Может быть, моя «архитектура пользователей» изначально неверна?
решение1
Может быть, моя «архитектура пользователей» изначально неверна?
Да. Не хочу вас расстраивать, но это оно. Вот как это следует изменить:
- Запустите Apache как его собственный пользователь, желательно в chroot. Это называется принципом минимальных привилегий — идея заключается в ограничении ущерба, который может быть нанесен в случае, если что-то будет скомпрометировано. Предположим, что что-товоляскомпрометируйтесь и работайте оттуда. Нет никаких причин, по которым вам следует запускать Apache как привилегированный пользователь.
- Запустите Jenkins CI как его собственный пользователь. Применяется тот же принцип.
- Предоставьте какой-либо способ, чтобы файлы попали в каталог веб-сервера. Например, вы можете добавить пользователя Jenkins в группу Apache. Это должно предоставить серверу сборки Jenkins доступ к каталогу веб-сервера. Еще более безопасным способом было бы запустить задание cron или таймер systemd от имени пользователя Apache и использовать его для копирования файлов. Почему это безопаснее? Если Jenkins скомпрометирован, злоумышленник не получит доступа к каталогам вашего веб-сервера.