我曾经使用主管来管理运行Django站点的Gunicorn进程,尽管这个问题可能与主管所管理的任何事情有关。以前,我是唯一管理和使用我们服务器的人,主管仅以root用户身份运行,我将supervisorctl restart myapp
在需要时使用sudo运行。
现在,我们的服务器必须支持在不同站点上工作的多个用户,并且每个项目都需要能够重新启动自己的gunicorn进程,而又不能重新启动其他用户的进程。
我关注了这篇博客文章:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
并允许非root用户使用超级用户,但现在任何人都可以重新启动其他任何人的进程。从外观上看,主管无法进行每个用户的访问控制。
任何人都对如何允许用户仅在没有root用户的情况下重新启动自己的进程有任何想法?
编辑:我们考虑过的一些事情包括编写一个由root拥有的脚本,其suid位集不包含任何内容supervisorctl restart myapp
,并将其放置在拥有者的用户目录中myapp
。互联网似乎在说,如果处理不当,这种脚本是不安全的。我们还考虑编写一个自定义守护程序,该守护程序侦听来自特定用户的命令,并在用户具有权限的情况下重新启动管理程序。如果可以使用更简单的解决方案,则此想法似乎过于复杂。