Php
在使用 sudo 呼叫的腳本中呼叫 sudo 會提示輸入密碼,即使使用 NOPASSWD
我正在使用的一個 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