Eu usei o supervisor para gerenciar um processo Gunicorn executando um site do Django, embora essa pergunta possa pertencer a qualquer coisa sendo gerenciada pelo supervisor. Anteriormente, eu era a única pessoa gerenciando e usando nosso servidor, e o supervisor apenas executava como root e usava o sudo para executar supervisorctl restart myapp
quando necessário.
Agora, nosso servidor precisa oferecer suporte a vários usuários que trabalham em sites diferentes, e cada projeto precisa poder reiniciar seus próprios processos gunicorn sem poder reiniciar os processos de outros usuários.
Eu segui esta postagem no blog:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
e foi capaz de permitir que usuários não raiz usassem supervisorctl, mas agora qualquer um pode reiniciar os processos de qualquer outra pessoa. Pelo que parece, o supervisor não tem como executar o controle de acesso por usuário.
Alguém tem alguma idéia de como permitir que os usuários reiniciem apenas seus próprios processos sem raiz?
EDIT: Algumas coisas que pensamos incluem escrever um script de propriedade root com o conjunto suid bit que não contém nada além de supervisorctl restart myapp
colocá-lo no diretório do usuário que possui myapp
. A internet parece estar dizendo que esse script é inseguro se feito de maneira errada. Também consideramos escrever um daemon personalizado que escuta comandos de usuários específicos e reinicia o processo do supervisor se o usuário tiver permissão. Essa idéia parece excessivamente complicada se uma solução mais simples funcionar.