2017-08-12 31 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)更改该用户。

相关问题