사용자가 감독자로 다시 시작할 수있는 프로세스를 제한합니까?


14

Django 사이트를 실행하는 Gunicorn 프로세스를 관리하기 위해 감독자를 사용했지만이 질문은 감독자가 관리하는 모든 것과 관련이 있습니다. 이전에는 서버를 관리하고 사용하는 유일한 사람이었으며 관리자는 루트 권한으로 실행했으며 supervisorctl restart myapp필요할 때 sudo를 사용하여 실행 했습니다.

이제 우리 서버는 다른 사이트에서 작업하는 여러 사용자를 지원해야하며 각 프로젝트는 다른 사용자의 프로세스를 다시 시작하지 않고도 자체 gunicorn 프로세스를 다시 시작할 수 있어야합니다.

나는이 블로그 게시물을 따랐다.

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

루트가 아닌 사용자가 supervisorctl을 사용하도록 허용했지만 이제는 누구나 다른 사람의 프로세스를 다시 시작할 수 있습니다. 외관상으로, 감독자는 사용자 별 액세스 제어를 수행 할 방법이 없습니다.

누구나 루트없이 자신의 프로세스 만 다시 시작할 수있게하는 방법에 대한 아이디어가 있습니까?

편집 : 우리가 생각한 것은 루트가 소유 한 스크립트를 아무것도 포함하지 않는 suid 비트 세트로 스크립트를 작성하고 소유 한 supervisorctl restart myapp사용자의 디렉토리에 넣는 것입니다 myapp. 인터넷은 그러한 스크립트가 잘못 수행되면 안전하지 않다고 말하는 것 같습니다. 또한 특정 사용자의 명령을 수신하고 사용자에게 권한이있는 경우 감독자 프로세스를 다시 시작하는 사용자 지정 데몬 작성을 고려했습니다. 더 간단한 솔루션이 효과가 있다면이 아이디어는 지나치게 복잡해 보입니다.

답변:


33

sudo사용자 지정 스크립트 대신 사용 하여 동일한 작업을 수행 할 수 있습니다 . 즉, supervisordroot 만 실행할 수 있는 기본 구성이 주어지면 다음 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 app1bob있으며 다시 시작할 수 app2있습니다.


아, 훌륭합니다. 이것은 내가 찾던 종류입니다. 당신의 도움을 주셔서 감사합니다!
davidscolgan

1
다음 과 같은 규칙 %sudo ALL=(ALL:ALL) ALL
뒤에이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.