%20NOPASSWD%3A%20%2Fpath%2Fto%2Fshell.sh%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
嘗試做一個Web介面IPtables管理。
創建了一個文件測試.php
$output = shell_exec('sudo bash /usr/bin/iptables.sh 2>&1');
echo $output;
給 /usr/bin/iptables.sh NOPASSWD 這樣我就可以透過 apache 使用 sudo 執行該檔案而無需使用密碼
sudo iptables -L
sudoers 文件:
apache ALL=(root) NOPASSWD: /usr/bin/iptables.sh
但我仍然收到錯誤
我們相信您已經收到了當地系統管理員的常規講座。通常可以歸結為以下三件事:#1)尊重他人的隱私。 #2)打字前請三思。 #3)能力越大,責任越大。 sudo:需要終端機讀取密碼;使用 -S 選項從標準輸入讀取或設定askpass helper{"mode":"full","isActive":false}
但是,如果我使用
apache ALL=(root) NOPASSWD: ALL
一切正常。
我仔細檢查了我的目錄並使用了確切的路徑
[root@CentOS bin]# readlink -f iptables.sh
/usr/bin/iptables.sh
超無知,有人可以幫我指點一下嗎? :'(
答案1
您呼叫的命令sudo
必須與文件中的內容匹配sudoers
,但在您的情況下它們不匹配。
你試圖逃跑bash /usr/bin/iptables.sh
,但sudoers
只允許你逃跑/usr/bin/iptables.sh
。
答案2
嘗試使用 sudo,因為/usr/bin/iptables.sh
引用了 root 的 root。
$output = shell_exec("sudo -u root sh -c 'bash /usr/bin/iptables.sh 2>&1'");
echo $output;