无法通过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版本的脚本...
答案 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 mount
和whereis cat