Я використовував супервізор, щоб керувати процесом 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
. Здається, в Інтернеті йдеться про те, що такий сценарій є небезпечним, якщо його роблять неправильно. Ми також розглядали можливість створення користувацького демона, який слухає команди від конкретних користувачів і перезапускає процес супервізора, якщо користувач має дозвіл. Ця ідея здається надмірно складною, якби спрацювало простіше рішення.