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.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...