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

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

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

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

我关注了这篇博文:

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

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

有人知道如何允许用户在没有 root 权限的情况下仅重启自己的进程吗?

编辑:我们考虑过的一些事情包括编写一个由 root 拥有的脚本,该脚本设置了 suid 位,只包含 ,并将supervisorctl restart myapp其放在拥有 的用户的目录中myapp。互联网似乎在说,如果操作不当,这样的脚本是不安全的。我们还考虑编写一个自定义守护进程,该守护进程监听特定用户的命令,并在用户有权限的情况下重新启动主管进程。如果有更简单的解决方案可行,这个想法似乎过于复杂。

答案1

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

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

这将允许以 root 身份alice运行sudo /usr/bin/supervisorctl restart app1而无需提供密码,并且允许bob重新启动app2

相关内容