我有一个敏感的处理程序,在一个终结点Linux机器上被触发(Centos 6.6。这里是我正在使用的脚本:
#!/bin/bash --login sudo -n -u deploy bash --login -c "cd /var/www/vhosts/sc/current; pwd; BUNDLE_GEMFILE=/var/www/vhosts/sc/current/Gemfile RAILS_ENV=production bundle exec pumactl -F /var/www/vhosts/sc/shared/config/puma.rb stop " sudo -n -u deploy bash --login -c "cd /var/www/vhosts/sc/current; pwd; BUNDLE_GEMFILE=/var/www/vhosts/sc/current/Gemfile RAILS_ENV=production bundle exec pumactl -F /var/www/vhosts/sc/shared/config/puma.rb start "
作为另一个用户在本地运行这个脚本工作正常,我可以让美洲狮重新启动。 即使我给了一个shell并在端点上执行脚本。
当它从sensu服务器触发时,我得到的输出:
{"timestamp":"2016-04-18T16:45:17.581962-0500","level":"info","message":"handler output","handler":{"type":"pipe","command":"/bin/sh /etc/sensu/handlers/puma_restart.sh","name":"puma_restart"},"output":["sudo: a password is required\n","sudo: a password is required\n"]}
我认为这可能是sudoers的一个问题,所以这是我的设置:
Defaults:sensu !requiretty Defaults:sensu secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin sensu ALL = NOPASSWD: /etc/sensu/handlers/puma_restart.sh
我也尝试设置所有命令的sudo NOPASSWORD,如:
sensu ALL=(ALL) NOPASSWD: ALL
但是,脚本被解雇的时候我还是得到了错误。
任何人有一个想法,我已经设置错了? 如果您需要更多的细节或上下文,请让我知道。
第一个sudoersconfiguration与sensu ALL = NOPASSWD: /etc/sensu/handlers/puma_restart.sh不会做你想做的。 那为sensu用户分配权限以用sudo调用包装器puma_restart.sh脚本。 sudo命令虽然在这个脚本里面,并且调用bash来执行命令。 你需要让sensu用户通过sudo调用bash。
第二个sudoersconfigurationsensu ALL=(ALL) NOPASSWD: ALL应该工作。 这听起来像sudoersconfiguration可能是一个问题。
有几件事可能会让你更进一步:
sudo puma_restart.sh第一个sudoersconfiguration应该使用这种方法。 sudo -l -U sensu ,查看sudoersconfiguration提供的权限。 无密码启用所有你的命令,你应该回来的东西,包括以下内容。 如果不是这是一个sudoersconfiguration问题。 User sensu may run the following commands on this host: (root) NOPASSWD: ALL