限制用户可以通过主管重新启动哪些进程?

dav*_*gan 15 linux user-permissions supervisord

我已经使用主管来管理运行 Django 站点的 Gunicorn 进程,尽管这个问题可能与主管管理的任何事情有关。以前我是唯一管理和使用我们服务器的人,主管只是以 root 身份运行,我会supervisorctl restart myapp在需要时使用 sudo 运行。

现在我们的服务器要支持多个用户在不同的站点工作,而且每个项目都需要能够重启自己的gunicorn进程,而不能重启其他用户的进程。

我关注了这篇博文:

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

并且能够允许非 root 用户使用 supervisorctl,但现在任何人都可以重新启动其他人的进程。从表面上看,supervisor 没有办法进行每个用户的访问控制。

任何人对如何允许用户在没有 root 的情况下仅重启他们自己的进程有任何想法吗?

编辑:我们认为有些事情大约包括通过编写与根SUID位集,其中包含什么,但所拥有的脚本supervisorctl restart myapp,并把它在谁拥有用户的目录myapp。互联网似乎在说,如果操作不当,这样的脚本是不安全的。我们还考虑编写一个自定义守护进程,它会监听来自特定用户的命令,并在用户有权限的情况下重新启动主管进程。如果一个更简单的解决方案可行,这个想法似乎过于复杂。

lar*_*sks 34

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

alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2
Run Code Online (Sandbox Code Playgroud)

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