Обмежте, які процеси користувач може перезапустити з супервізором?


14

Я використовував супервізор, щоб керувати процесом Gunicorn, який працює на сайті Django, хоча це питання може стосуватися будь-якого, яким керує супервізор. Раніше я був єдиною людиною, яка керувала та використовувала наш сервер, а супервізор просто запускався як root, і я використовував судо для запуску, supervisorctl restart myappколи потрібно.

Тепер наш сервер повинен підтримувати декілька користувачів, які працюють на різних сайтах, і кожен проект повинен мати можливість перезапустити власні процеси, які не мають можливості перезапустити процеси інших користувачів.

Я дотримувався цієї публікації в блозі:

http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/

і змогла дозволити користувачам, які не користуються коренем, використовувати supervisorctl, але тепер будь-хто може перезапустити будь-які інші процеси. З огляду на це, у супервізора немає способу контролю доступу користувачів.

У когось є ідеї, як дозволити користувачам перезапустити лише власні процеси без root?

EDIT: Деякі речі, про які ми думали, включають написання сценарію, що належить root, з набором біт suid, який не містить нічого, окрім того, supervisorctl restart myappі занесення його до каталогу користувача, якому належить myapp. Здається, в Інтернеті йдеться про те, що такий сценарій є небезпечним, якщо його роблять неправильно. Ми також розглядали можливість створення користувацького демона, який слухає команди від конкретних користувачів і перезапускає процес супервізора, якщо користувач має дозвіл. Ця ідея здається надмірно складною, якби спрацювало простіше рішення.

Відповіді:


33

Ви можете використовувати sudoзамість власного сценарію, щоб виконати те саме. Тобто, враховуючи supervisordконфігурацію за замовчуванням , в якій може працювати лише корінь supervisorctl, ви можете поставити такий запис у /etc/sudoers:

alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2

Це дозволить aliceзапустити sudo /usr/bin/supervisorctl restart app1як root без необхідності введення пароля, і це дозволить bobперезапустити app2.


Ах, чудово. Це саме та річ, яку я шукав. Спасибі за вашу допомогу!
davidscolgan

1
майте на увазі, що ви повинні додати цей рядок після таких правил, як%sudo ALL=(ALL:ALL) ALL
Павел Тявин
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.