使用sudo的www数据

时间:2019-05-19 06:46:21

标签: php shell exec sudo

无法通过php和exec启动安装命令

当然:     文件sudo toto.sh起作用     和     所有数据都允许以www数据形式存在,因此所有进程     www-data ALL =(ALL)NOPASSWD:ALL

toto.sh:

Machine = "L1069"
machine="L1069"
mount -t cifs //$ipaddr/c$ /mnt/pc-backup/$machine -o   "vers=2.0,username=agent-back-ws,password=Bcth2,ro,iocharset=utf8
,noserverino"

在go.php文件中:

$outputShell=passthru('sudo cat /etc/passwd');
$output=exec('sudo  /var/www/html/toto.sh 2>&1');
var_dump ($output);
var_dump ($outputShell);

当我运行php go.php(作为根用户)时,我得到:

<pre> </ pre> string (0) ""

安装完成并显示/ etc / passwd的内容


另一方面,通过浏览器我启动www / go.php,因此在www-data中:我得到:

string (0) ""

没有安装,显示/ etc / passwd的内容

为什么挂载不起作用是问题,似乎是php7和最新Debian版本的脚本...

1 个答案:

答案 0 :(得分:0)

从“根上下文”运行脚本时,不必使用所用可执行文件的完整路径。

您应该在脚本中使用二进制文件的完整路径。

Machine = "L1069"
machine="L1069"
/bin/mount -t cifs //$ipaddr/c$ /mnt/pc-backup/$machine -o   "vers=2.0,username=agent- 
back-ws,password=Bcth2,ro,iocharset=utf8
,noserverino"

$outputShell=passthru('sudo /bin/cat /etc/passwd');
$output=exec('sudo  /var/www/html/toto.sh 2>&1');
var_dump ($output);
var_dump ($outputShell);

要确定正确的路径,请使用whereis mountwhereis cat