LINUX.ORG.RU

Как это сделать правильно?

 


0

1

Всем привет!

Есть простенький веб-сервис, который по команде от гитхаба (https://developer.github.com/webhooks/) должен делать git pull && make.

Веб-сервис выполняется в контексте httpd_t, а для того, чтобы сделать git pull нужно достаточно много прав (как минимум, доступ к хомяку), которых не хочется давать всему httpd_t.

Как настроить SELinux так, чтобы он позволял такое повышение прав только для очень ограниченных действий? Примерно как sudo, которое можно настроить на запуск только определённых команд. Но sudo не изменяет контекст.

Я бы запилил таблицу в БД куда бы постились «ивенты» из веба, а на крон у пользака которому по правам доступно что-то большее, повесил бы задачу которая чекает эти новые ивенты и выполняет их. Так еще и лог вести можно, что выполнилось и когда.

deep-purple ★★★★★
()

Напиши демона и прикрути ZeroMQ (или RabbitMQ). Либо используй REST. Сайт будет дергать демона, а демон будет делать pull. Это если ты хочешь сделать правильно.

Black_Roland ★★★★
()
Ответ на: комментарий от deep-purple

Спасибо, но бд - это явно черезчур в моём случае, а крон - не реалтайм, даже если «* * * * *». По крону можно было бы и «холостой» git pull раз в минуту делать без всяких гитхабовских вебхуков, но это не то, что хочется.

Pythagoras ★★
() автор топика
Последнее исправление: Pythagoras (всего исправлений: 3)
Ответ на: комментарий от Black_Roland

Если делать отдельного демона, который умеет делать только git pull && make, то тогда его можно сразу в интернет выставлять без лишних посредников.

Получается, средствами selinux эта задача нормально не решается?

Pythagoras ★★
() автор топика
Ответ на: комментарий от Pythagoras

Апдейт приложения максимум через минуту после отправки команды это так критично?

Оно собираться может будет даже дольше. Я бы точно потерпел.

Ну и БД для примера. Дело твое, пиши в файл.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от deep-purple

Дело твое, пиши в файл.

Еще и inotify можно прикрутить, тогда реалтайм получится.

Black_Roland ★★★★
()
#!/bin/sh

echo 'HTTP/1.0 200 OK'
echo

# cd /path && git pull && make
nc -kl 8080 -c build.sh

Простейший демон :)

Фишка использования демона и API к нему в том, чтобы извне не было прямого доступа к сервису с привилегированным доступом. Просто запусти демона (пусть даже на PHP) от выделенного пользователя или в PHP-FPM с выделенным пользователем. Если на этом серваке не крутится других сайтиков то спокойно можешь ослаблять политики SELinux. Ничего страшного не будет.

Black_Roland ★★★★
()
Последнее исправление: Black_Roland (всего исправлений: 2)

Прошу прощения. Вопрос к ТС и тем кто отвечал:

А зачем может понадобиться httpd доступ к хомяку? Почему он не может в своей выделенной папочке делать свое дело?

Quickern ★★
()
Ответ на: комментарий от Black_Roland

Правильные контексты на директорию с репозиторием и через setsebool разрешить exec. audit2allow, если не достаточно.

Пробовал, но ему очень много нужно. В частности, доступ к хомяку (для ~/.gitconfig и ~/.ssh/id_rsa), чего как-то неправильно делать.

Pythagoras ★★
() автор топика
Ответ на: комментарий от Quickern

А зачем может понадобиться httpd доступ к хомяку? Почему он не может в своей выделенной папочке делать свое дело?

git pull читает ~/.gitconfig и ~/.ssh/id_rsa.

Pythagoras ★★
() автор топика
Ответ на: комментарий от Black_Roland

Простейший демон :)

Наверное, так в итоге и сделаю. Спасибо.

Pythagoras ★★
() автор топика
Ответ на: комментарий от Quickern

Поэтому что если всё разрешить, то теряется весь смысл SELinux. Он очень многого хочет. А ещё я слышал, что когда кто-нибудь запускает audit2allow --all, на Земле умирает один котёнок.

Pythagoras ★★
() автор топика
Ответ на: комментарий от yurikoles

httpd_enable_homedirs либо установлена, либо нет, неважно какой пользователь.

Вообще меня вполне устраивает вариант решения с отдельным веб-сервером, который изначально выполняется в нормальном контексте и by design не умеет ничего, кроме этой конкретной задачи.

Pythagoras ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.