0

我有许多用户的设置,他们可以在他们家中托管他们的个人网页(由 apache 提供服务mod_userdirpublic_html。php 支持也在 apache 中启用。

目前我有以下配置/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 脚本都是由 user 运行的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 的环境中运行每个用户页面?

4

0 回答 0