linux – 限制用户可以使用supervisor重启哪些进程?

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

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

我关注这篇博文:

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

并且能够允许非root用户使用supervisorctl,但现在任何人都可以重启其他人的进程.从它的外观来看,主管没有办法进行每用户访问控制.

任何人都有任何关于如何允许用户只重新启动自己的进程而没有root的想法?

编辑:我们考虑过的一些事情包括编写一个root所拥有的脚本,suid位设置除了supervisorctl重启myapp之外什么都没有,并把它放在拥有myapp的用户的目录中.互联网似乎在说如果做错了这样的脚本是不安全的.我们还考虑编写一个自定义守护程序,该守护程序侦听来自特定用户的命令,并在用户具有权限时重新启动管理程序进程.如果一个更简单的解决方案可行,这个想法似乎过于复杂.

解决方法

您可以使用sudo代替自定义脚本来完成同样的事情.也就是说,给定默认的supervisord配置,其中只有root可以运行supervisorctl,你可以将这样的条目放入/ etc / sudoers:
alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2

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

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...