我正在尝试允许组中的用户deployer
在没有密码的情况下重新启动主管组;这是我的内容/etc/sudoers.d/deploy
:
%deployer ALL=(ALL:ALL) NOPASSWD:/usr/sbin/service nginx stop,/usr/sbin/service nginx start,/usr/bin/supervisorctl stop gname\:*,/usr/bin/supervisorctl start gname\:*
这是为了让组中的用户deployer
能够重新启动 nginx 和主管组gname
。它适用于 nginx,但不适用于主管。
我尝试过多种组合:
/usr/bin/supervisorctl stop gname,/usr/bin/supervisorctl start gname
/usr/bin/supervisorctl stop gname*,/usr/bin/supervisorctl start gname*
/usr/bin/supervisorctl stop gname\:,/usr/bin/supervisorctl start gname\:
/usr/bin/supervisorctl stop gname\:\*,/usr/bin/supervisorctl start gname\:\*
但我无法让它工作...为什么它不起作用?
- Debian GNU/Linux 8
- Linux 版本 4.5.5-x86_64
- Supervisor 版本 3.0
答案1
这看起来可能是由于您允许的命令中的空格,例如supervisorctl stop gname
等等。
虽然我现在无法测试,但首先我会尝试转义空格,例如
%deployer ALL=(ALL:ALL) NOPASSWD:/usr/sbin/service\ nginx\ stop,/usr/sbin/service\ nginx\ start,/usr/bin/supervisorctl\ stop\ gname\:*,/usr/bin/supervisorctl\ start\ gname\:*
如果失败,您可以将命令放入一个脚本中,并supercontrol.sh
使用针对不同命令的不同 cmd 选项进行调用,并NOPASSWD
仅在该脚本上指定。
%deployer ALL=(ALL:ALL) NOPASSWD:/path/to/supercontrol.sh
希望这可以帮助。