Użyłem przełożonego do zarządzania procesem Gunicorn prowadzącym witrynę Django, chociaż to pytanie może dotyczyć wszystkiego, czym zarządza przełożony. Wcześniej byłem jedyną osobą zarządzającą naszym serwerem i korzystającą z niego, a przełożony działał jako root i korzystałem z sudo, aby uruchamiać go w supervisorctl restart myapp
razie potrzeby.
Teraz nasz serwer musi obsługiwać wielu użytkowników pracujących w różnych witrynach, a każdy projekt musi mieć możliwość zrestartowania własnych procesów gunicorn bez możliwości ponownego uruchomienia procesów innych użytkowników.
Śledziłem ten post na blogu:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
i był w stanie zezwolić użytkownikom innym niż root na korzystanie z supervisorctl, ale teraz każdy może zrestartować procesy kogokolwiek innego. Wygląda na to, że przełożony nie ma możliwości przeprowadzenia kontroli dostępu dla poszczególnych użytkowników.
Czy ktoś ma jakieś pomysły na to, jak zezwolić użytkownikom na ponowne uruchomienie tylko własnych procesów bez rootowania?
EDYCJA: Niektóre rzeczy, o których myśleliśmy, to napisanie skryptu należącego do roota z zestawem bitów suid, który nie zawiera nic oprócz supervisorctl restart myapp
umieszczenia go w katalogu użytkownika, który jest właścicielem myapp
. Internet wydaje się mówić, że taki skrypt jest niepewny, jeśli zostanie źle wykonany. Zastanawialiśmy się także nad stworzeniem niestandardowego demona, który nasłuchuje poleceń określonych użytkowników i ponownie uruchomi proces nadzorczy, jeśli użytkownik ma na to pozwolenie. Ten pomysł wydaje się zbyt skomplikowany, jeśli zadziałałoby prostsze rozwiązanie.
źródło
%sudo ALL=(ALL:ALL) ALL