Php

在使用 sudo 呼叫的腳本中呼叫 sudo 會提示輸入密碼,即使使用 NOPASSWD

  • August 16, 2012

我正在使用的一個 PHP 程序 ( LConf ) 使用sudo.

我已允許使用者apache執行腳本並使用sudo -u apache /usr/local/LConf/lconf_deploy.sh.

lconf_deploy.sh呼叫時提示我輸入密碼/usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v,但在此行之前或之後呼叫行沒有問題。

在閱讀了很多(在 stackexchange 和網際網路上的其他地方)關於在這種情況下做什麼之後,我已經禁用requiretty並使用NOPASSWD了所有我能想到的會影響這種情況的東西。

# cat /etc/sudoers | grep -v "#"
Defaults    always_set_home
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root    ALL=(ALL)       ALL
apache ALL = NOPASSWD: /usr/local/LConf/lconf_deploy.sh
apache ALL = NOPASSWD: /usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
apache ALL = NOPASSWD: /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
icinga ALL = NOPASSWD: /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v

sudo是否可以在已經“ ”的情況下使用 , 來切換使用者上下文(或諸如此類)sudoing

如果沒有,我該如何解決這個問題?注意/usr/local/LConf/LConfExport.pl必須以使用者身份執行icinga

謝謝,

馬特

$$ updated with reference to mdpc’s comment below $$

  User_Alias      LCONF=apache,icinga
  Defaults:LCONF !requiretty
  LCONF ALL=(icinga) NOPASSWD: /usr/local/LConf/LconfExport.pl -o /etc/icinga/lconf -v
  LCONF ALL= NOPASSWD: /usr/local/LConf/lconf_deploy.sh

執行sudo -u apache /usr/local/LConf/lconf_deploy.sh.仍然提示輸入密碼

  # cat  /usr/local/LConf/lconf_deploy.sh
  echo start of script
  /usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v
  /etc/init.d/icinga reload
  # sudo -u apache /usr/local/LConf/lconf_deploy.sh
  start of script
  [sudo] password for apache:
  Running configuration check.../etc/init.d/icinga: line 111: /var/icinga/icinga.chk:      Permission denied
  CONFIG ERROR! Reload aborted. See /var/icinga/icinga.chk for details.

任何幫助表示讚賞。

這一行:

apache ALL = NOPASSWD: /usr/bin/sudo -u icinga /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v

不管用。它將 sudo 作為 apache 呼叫,這是不對的。

你可能想要的是:

 apache ALL=(icinga) NOPASSWD: /usr/local/LConf/LConfExport.pl -o /etc/icinga/lconf -v

類型

su - apache

然後

/usr/local/LConf/lconf_deploy.sh

如果第一個命令不起作用,請鍵入:

su - apache -s /bin/bash

引用自:https://serverfault.com/questions/417806