Bash脚本在php脚本中执行

时间:2015-08-07 20:09:26

标签: php bash shell

我知道还有其他关于此的帖子,但我已经尝试了所有标记为解决方案的解决方案和修复程序,但它们都不适用于我。

正如标题所说,我正在尝试让php脚本在加载到Web服务器(apache)时执行bash脚本。

我正在使用另一篇文章中的包装器,所以这里是wrapper.c:

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main (int argc, char *argv[]) {
    setuid (0);
    system ("/bin/sh /var/www/html/scrip/debugport/testversion.sh");
    return 0;
}

这是testversion.sh脚本:

#!/bin/bash
screen -S skywars -X stuff "stop
"
cd /tmp
pid=$(fuser -n tcp 12321 | awk '{print $1}')
kill -9 $pid

这是我正在使用的PHP代码:

<?php
    $message=shell_exec("./var/www/html/scrip/php_root");
    print_r($message);
?>  

当我执行./php_root(已编译的wrapper.c)时,一切正常,但当我尝试从Web服务器加载时,脚本根本不起作用。

这可能与权限有关,但我使用了与此帖子解决方案完全相同的所有权限:Execute root commands via PHP

包装器应该使脚本以root身份执行,无论用户执行它,但它不起作用。

谢谢你们。

2 个答案:

答案 0 :(得分:0)

尝试检查脚本访问权限。可能是web-server的用户无法运行您的bash脚本。

答案 1 :(得分:0)

我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以是用户:apache / www-data或root)。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

//Setting the second argument in getShell():
//true will return a shell with root
//false will return a shell with the php execution user
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/full/path/to/script.sh');

不需要包装器。