我試圖從php腳本運行shell腳本。從php運行shell腳本作爲與守護進程不同的另一個用戶
PHP代碼:
<? php
$sss = escapeshellarg('virtualbox');
$result = shell_exec("/home/hani/Desktop/launchscript.sh '$sss' 2>&1 ");
echo "<pre>$result</pre>";
echo "<br />";
echo (shell_exec('whoami'));
?>
我的shell:
#!/bin/bash
sss=$1
echo 'the sudo password' |sudo -S service $1 restart
後我運行一個Web服務器(XAMPP)的PHP代碼,我得到這個輸出:
[sudo] password for daemon: Sorry, try again.
[sudo] password for daemon:
sudo: 1 incorrect password attempt
daemon
雖然,我還沒有爲守護程序用戶設置任何密碼。 當我檢查當前運行php代碼的用戶後,我發現它是守護進程。
經過這裏和網絡的許多研究,我發現守護進程無法運行sudo命令。
我還發現我可以通過編輯sudoers文件並授予守護程序用戶權限來運行sudo命令來解決此問題。但是,這不是一個安全的解決方案。
所以我的問題是:如何通過php代碼運行該腳本,但不能作爲守護進程?
PS:我想這是爲了改變當前用戶運行的PHP文件:
$result = shell_exec(" sudo -u hani /home/hani/Desktop/launchscript.sh '$sss' 2>&1 ");
但我得到這個輸出在瀏覽器:
sudo: no tty present and no askpass program specified
和用戶保持守護進程。
我使用XAMPP在ubutnu 16.04
另一個信息,我在終端運行此命令知道「httpd的」服務的所有者:
ps -ef | egrep '(httpd)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
輸出爲:守護程序
對不起,我忘了提及,我已經運行這個:sudo chmod + x myshellscript。 – singrium