从php运行shell脚本作为与守护进程不同的另一个用户
问题描述:
我试图从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}'
输出为:守护程序
答
我想我找到了一个解决方案(但仍然不确定安全问题)。
它只需要改变默认用户(所有者)和组的httpd服务的。这可以通过编辑位于/opt/lampp/etc(如果您使用Xampp)中的httpd.conf来完成。正如我在问题中提到的,默认用户是守护进程。然而,它并没有权限来执行sudo命令,所以只需要利用另外一个谁拥有的权限执行sudo命令(显然根用户或您deafult用户在Ubuntu)更改该用户。
对不起,我忘了提及,我已经运行这个:sudo chmod + x myshellscript。 – singrium