使用 mod_proxy_fcgi 实现 Apache 和 PHP-FPM 安全性

使用 mod_proxy_fcgi 实现 Apache 和 PHP-FPM 安全性

我在共享主机配置中使用 PHP-FPM。每个 FPM 池都以不同的用户身份运行。Apache 以 www-data 身份运行。Apache 使用 mod_proxy_fcgi 通过套接字连接。我允许用户使用 .htaccess 文件。

如何防止用户连接到错误的 FPM 池?

vhost 看起来像这样:

<VirtualHost *:80>
        ServerName foo.com
        DocumentRoot /var/www/sites/foo.com/html
        <FilesMatch "\.php$">
                SetHandler "proxy:unix:/var/run/foo-com-fpm.sock|fcgi://localhost"
        </FilesMatch>
</VirtualHost>

但是,foo-com 用户可以轻松地从他的 .htaccess 中覆盖该处理程序:

<FilesMatch "\.php$">
        SetHandler "proxy:unix:/var/run/bar-com-fpm.sock|fcgi://localhost"
</FilesMatch>

这将允许他以其他用户身份运行 PHP 脚本。如何在不禁止 FileInfo 覆盖的情况下阻止这种情况发生?

答案1

AllowOverrideList允许进一步将 .htaccess 指令限制在指定的列表中。

引用自文档:

当此指令设置为 None 并且 AllowOverride 设置为 None时,.htaccessfiles 将被完全忽略。在这种情况下,服务器甚至不会尝试读取 .htaccess文件系统中的文件。

例子:

AllowOverride None
AllowOverrideList Redirect RedirectMatch

在上面的例子中,只  允许使用Redirect 和指令。所有其他指令都会导致内部服务器错误。RedirectMatch

例子:

AllowOverride AuthConfig
AllowOverrideList CookieTracking CookieName

在上面的例子中, AllowOverride 授予指令组权限 AuthConfig ,并且 AllowOverrideList 仅授予 FileInfo 指令组中两个指令的权限。所有其他权限都将导致内部服务器错误。

相关内容