shell_exec在服务器上不起作用

时间:2017-11-16 06:25:02

标签: php

我正在尝试在我的php脚本中运行shell_exec命令。当我在虚拟机上使用相同的命令来测试我的代码时,它运行得很好,但是当我在服务器上传输相同的代码时,却没有。我使用的虚拟机只是服务器的副本,我用它来测试我的代码,然后将它集成到我的主机上。我甚至双重检查了文件的权限,它们都是一样的。

Php脚本的代码片段:

else if($_POST['processtype'] == "server"){
                if(isset($_POST['submit']))
{

#--Fetching data from the Form
$fserverId = $_POST['serverId'];
$finsname = $_POST['insname'];
$fhost = $_POST['host'];
$fport = $_POST['port'];
$fproto = $_POST['proto'];
$fuserName = $_POST['userName'];
$fpassword = $_POST['password'];
$fkey = $_POST['key'];
$fcompanyName = $_POST['companyName'];
$fofficeAddress = $_POST['officeAddress'];
$fstate = $_POST['state'];
$fcountry = $_POST['country'];
$fladmin = $_POST['lAdmin'];
$fphone = $_POST['phone'];
$fmobile = $_POST['mobile'];
$femail = $_POST['email'];
$fdesignation = $_POST['designation'];
$frManager = $_POST['rManager'];

$data = " --serverId ".$fserverId." --name ".$finsname." --host ".$fhost." --port ".$fport." --proto ".$fproto." --username ".$fuserName." --password ".$fpassword." --key ".$fkey." --companyName ".$fcompanyName." --officeAddress ".$fofficeAddress." --state ".$fstate." --country ".$fcountry." --ladmin ".$fladmin." --phone ".$fphone." --mobile ".$fmobile." --email ".$femail." --designation ".$fdesignation." --rManager ".$frManager;

#--Parsing the data from PHPscript to CGI



#This is the part not working#
$output = shell_exec('python3 /var/www/cgi-bin/dscr.cgi' .$data);
#---------------#

echo "<pre>$data</pre>";
header("Location: firewalls.php");
}

}

 else {
        echo "Error calling page... :( <br>";
        echo "Warning content should be here for notifying endUser about direct access.";

调用$data会显示我想要传递的数据并且代码会在不调用底部的else部分的情况下执行,但shell_exec命令不起作用。我检查了php.ini文件以检查disabled_functions,但即使这样也没有shell_exec。我该如何解决这个问题?任何克服它的方向都将受到赞赏并提前致谢:)

1 个答案:

答案 0 :(得分:0)

持续存在的实际问题是我的机器上实施了一个名为SE-Linux(安全增强型Linux)的Linux安全模块,它提供了一种支持访问控制安全策略的机制,如MAC。它不允许shell_exec之类的命令由具有权限的用户执行,例如root user

要在您的shell sestatusgetenforced中获取SE-Linux类型的状态。它有3种模式:

1)强制执行:强制执行SE-Linux策略。 SE-Linux拒绝基于SE-Linux策略规则的访问。

2)Permissive:不强制执行SE-Linux策略。 SE-Linux不拒绝访问,但如果在强制模式下运行,则会拒绝拒绝的操作。

3)已禁用:已禁用SE-Linux。

希望这可以帮助其他人,因为他们可能会因此而陷入困境。