我發現了許多問題,通過打開權限或更改文件的用戶所有權的巨大漏洞做到這一點。對於我目前的應用程序,這些都不是一種選擇。我試圖做的是使用shell_exec或類似的php函數在我的系統上完全不同的文件夾中運行.sh腳本,當我的網頁上單擊按鈕時。該腳本必須從它是在文件夾中運行我在Debian和已安裝sudo來讓apache用戶通過將這些線運行命令:如何從非擁有文件夾中的apache用戶運行腳本?
www-data ALL=(ALL) NOPASSWD:/opt/folder/run.sh start
www-data ALL=(ALL) NOPASSWD:/opt/folder/run.sh stop
www-data ALL=(ALL) NOPASSWD:/opt/folder/run.sh status
的run.sh是不是我允許編輯,所以我必須在可能的情況下在apache端進行管理。我不允許更改run.sh的權限或所有權。所以你可以看到我的困境。 PHP的電話我使用這個樣子的:
$test=shell_exec('cd /opt/folder/ && ./run.sh start&& cd -');
我使用$測試呼應該命令的輸出。這裏是奇怪的地方。命令有很好的輸出。 run.sh腳本用於啓動和停止其他程序的列表並顯示其狀態。我可以運行./run.sh status
並在$ test變量中得到一個好結果。如果我嘗試./run.sh stop
它說它工作(我非常確定run.sh腳本沒有太多的檢查內置),但實際上系統上沒有發生任何事情。我可以運行一個ps -ef | grep
作爲完整性檢查,並查看所有應該停止的進程。如果我運行./run.sh start
也是一樣,但它會返回沒有任何程序啓動。
所以說,我只是想弄清楚我做錯了什麼。我確信php正在運行bash腳本,但出於某種原因,它沒有能力在腳本中實際運行任何啓動或停止命令。我可以從操作系統以root身份完全運行run.sh。我真的在我的繩索結尾,所以任何幫助都非常感謝。如果這不可能,那麼是否有替代方案不需要額外的程序安裝。