Sensu 执行脚本 sudo 需要密码

Sensu 执行脚本 sudo 需要密码

我有一个在端点 Linux 机器(Centos 6.6)上触发的 sensu 处理程序。这是我正在使用的脚本:

#!/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 "

以其他用户身份在本地运行此脚本非常顺利,我可以让 puma 正常重启。即使我为 sensu 提供 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

但是脚本启动时仍然会出现错误。

有人知道我哪里设置错了吗?如果您需要更多详细信息或上下文,请告诉我。

答案1

第一个 sudoers 配置sensu ALL = NOPASSWD: /etc/sensu/handlers/puma_restart.sh不会满足您的要求。它为用户sensu分配使用 sudo 调用包装器puma_restart.sh脚本的权限。但是 sudo 命令位于该脚本中,并调用 bash 来执行命令。您需要允许 sensu 用户通过 sudo 调用 bash。

第二个 sudoers 配置sensu ALL=(ALL) NOPASSWD: ALL应该可以工作。这听起来可能是 sudoers 配置的问题。

以下几件事可能有助于您取得进一步的进步:

  • 这些检查是在 sensu 服务器还是客户端上执行?请确保将 sudoers 配置放在执行检查的位置。
  • 将 sudo 调用移出脚本。从脚本内部删除 sudo 调用,并将 sudo 添加到 sensu check 命令:sudo puma_restart.sh第一个 sudoers 配置应该使用此方法。
  • 调试 sudoers 配置。
    • 在 sensu 客户端主机上运行sudo -l -U sensu以查看 sudoers 配置提供哪些权限。启用所有命令的无密码功能后,您应该会得到一些结果,包括以下内容。如果没有,则说明 sudoers 配置存在问题。 User sensu may run the following commands on this host: (root) NOPASSWD: ALL

相关内容