SELinux 正在阻止 Amazon Linux 2 上的 $_POST 变量

SELinux 正在阻止 Amazon Linux 2 上的 $_POST 变量

我开始使用基于 RPM 的操作系统,给我留下了深刻的印象。

  1. Amazon Linux 的任何存储库中均不包含 setroubleshoot。我想使用官方存储库来处理所有事情,否则我就会跳槽。我检查了日志,没有看到“SELinux 正在阻止”错误,但也许我不知道要查找什么。

  2. 当 setenforce 设置为 permissive 时,$_POST 变量起作用。

  3. 我的代码可以在 Debian 系统上运行。我的网站可以在 Amazon Linux 上访问,但无法正确重定向。

  4. 我正在使用 httpd(RPM 称之为 apache2)。 apachectl configtest 返回语法正常。

这是我的代码。它是 index.php

<form action="index.php" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="hidden" name="hidden_value" value="true">
    <input type="submit">
</form>

然后在同一页面上,我编写了一些 php.ini 文件。

<?php
if(isset($_POST['hidden_value']){

    /* Do the rest of your authentication math */

}
?>

Index.php 重定向到index.php,$_POST 变量处理重定向。然而,只有当我将 SELinux 设置为宽容时它才起作用。我想武装 SELinux。

PS 它确实重定向,但它在重定向时未设置 $_POST 变量。

答案1

感谢 Ulrich Schwarz 和 hargut 为我指明了正确的方向。它实际上是一个布尔值。我按照建议启用了httpd_enable_cgi,但它仍然不起作用。然后我使用查看了布尔值列表

sudo getsebool -a | grep httpd

这就是我如何发现有一个名为的布尔值

httpd_can_network_connect_db

并且它已被关闭。

我通过使用打开它

sudo setsebool httpd_can_network_connect_db=1

如果有人使用 MySql 并从 Debian 迁移到安全增强型系统,这是先决条件。关于 SELinux 有很多东西需要学习。再次感谢。

答案2

请务必检查/var/log/audit/audit.logselinux 警告。它可能会建议启用什么策略。

否则,您可以将 SELinux 设置为宽容模式,然后使用上述日志文件构建包含应用程序所有需求的自定义策略。为此,请将 SELinux 设置为宽容模式,使用代码的所有功能,然后使用audit2allow 生成自定义策略。

然后,您可以将策略文件与您的代码捆绑并分发,以便 SELinux 将允许且仅允许您的代码需要的所有特殊权限:

# generate a custom policy
grep "AVC" /var/log/audit/audit.log | audit2allow -M yourapp
# install that policy
semodule -i yourapp.pp 

无论您做什么,都不要在关闭 SELinux 的情况下投入生产!

考虑观看这个精彩的 SELinux 介绍:https://www.youtube.com/watch?v=_WOKRaM-HI4

相关内容