Apache mod_userdir 和 php 权限

Apache mod_userdir 和 php 权限

我有一个具有许多用户的设置,他们可以在自己的家mod_userdir中托管他们的个人网页(由 apache 通过 提供服务)public_html。apache 中也启用了 php 支持。

目前我有以下配置/etc/apache2/mods-enabled/userdir.conf

<IfModule mod_userdir.c>
        UserDir <home basedir>/*/public_html
        UserDir disabled root

        <Directory <home basedir>/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes Options
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Require all granted
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Require all denied
                </LimitExcept>
        </Directory>
</IfModule>

问题是,由于每个 php 脚本都是由用户运行的www-data,因此每个用户页面都对其他所有用户的页面都有权限public_html。例如,我可以获取一个 php 反向 shell 并检查其他用户的内容。

我曾尝试添加

php_admin_value open_basedir "."

上面的标签内Directory。这可以防止上述安全漏洞,但实际上只允许 php 脚本沿目录层次向下运行。例如

<?php
chdir('assets');
echo getcwd();
chdir('..');
echo "<br>";
echo getcwd();
?>

生产

<home>/public_html/assets
<home>/public_html/assets

<home>/public_html如果路径在变量中硬编码,问题就解决了open_basedir,但我当然需要能够通过某个变量为所有用户执行此操作。apache 是否将通配符 ( <home basedir>/*/public_html) 匹配存储在我可以在Directory标签内访问的某个变量中?或者还有其他更好的方法可以做到这一点,例如在类似 chroot 的环境中运行每个用户页面?

相关内容