2017-08-12 29 views
0

我試圖從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}' 

輸出爲:守護程序

+0

對不起,我忘了提及,我已經運行這個:sudo chmod + x myshellscript。 – singrium

回答

0

我想我找到了一個解決方案(但仍然不確定安全問題)。
它只需要改變默認用戶(所有者)和的httpd服務的。這可以通過編輯位於/opt/lampp/etc(如果您使用Xampp)中的httpd.conf來完成。正如我在問題中提到的,默認用戶是守護進程。然而,它並沒有權限來執行sudo命令,所以只需要利用另外一個誰擁有的權限執行sudo命令(顯然用戶或您deafult用戶在Ubuntu)更改該用戶。

相關問題