限制用户可以使用主管重启的进程?


14

我曾经使用主管来管理运行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。互联网似乎在说,如果处理不当,这种脚本是不安全的。我们还考虑编写一个自定义守护程序,该守护程序侦听来自特定用户的命令,并在用户具有权限的情况下重新启动管理程序。如果可以使用更简单的解决方案,则此想法似乎过于复杂。

Answers:


33

您可以使用sudo您的自定义脚本来完成同样的事情。也就是说,在默认supervisord配置下,只有root可以运行supervisorctl,您可以将这样的条目放入/etc/sudoers

alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2

这将允许alicesudo /usr/bin/supervisorctl restart app1root用户身份运行而无需提供密码,并且将允许bob重新启动app2


啊,太好了。这正是我一直在寻找的东西。谢谢你的帮助!
davidscolgan 2012年

1
记住,你应该添加此字符串像规则%sudo ALL=(ALL:ALL) ALL
ПавелТявин
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.