我正在尝试在我的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
。我该如何解决这个问题?任何克服它的方向都将受到赞赏并提前致谢:)
答案 0 :(得分:0)
持续存在的实际问题是我的机器上实施了一个名为SE-Linux(安全增强型Linux)的Linux安全模块,它提供了一种支持访问控制安全策略的机制,如MAC。它不允许shell_exec
之类的命令由具有权限的用户执行,例如root user
。
要在您的shell sestatus
或getenforced
中获取SE-Linux类型的状态。它有3种模式:
1)强制执行:强制执行SE-Linux策略。 SE-Linux拒绝基于SE-Linux策略规则的访问。
2)Permissive:不强制执行SE-Linux策略。 SE-Linux不拒绝访问,但如果在强制模式下运行,则会拒绝拒绝的操作。
3)已禁用:已禁用SE-Linux。
希望这可以帮助其他人,因为他们可能会因此而陷入困境。