У меня есть система Ubuntu, на которой размещены несколько сайтов. DocumentRoot
Папка каждого веб-сайта является отдельной и имеет другого пользователя. Пути такие:
/<path_from_root>/websites/websiteA
/<path_from_root>/websites/websiteB
Давайте предположим, что соответствующие пользователи ПользовательА а также USERB. Хотя USERB не имеет доступа для чтения к папке websiteA, апаш пользователь имеет доступ. USERB можно просто написать php-файл в своем каталоге:
<?php
$x=file_get_contents('../websiteA/config.php');
echo $x;
?>
Этот файл выставит config.php подать в USERB. Ключевой вопрос заключается в том, что апаш должен иметь доступ на чтение к обеим папкам для запуска веб-служб, но USERB может использовать это для доступа ПользовательАфайлы. Как предотвратить это?
Вы можете использовать директиву php open_basedir в ваших конфигурационных файлах apache или vhost для индивидуальные настройки.
<VirtualHost *:80>
<Directory /docroot>
php_admin_value open_basedir /docroot
</Directory>
<VirtualHost>
поэтому сценарии в этом пути не могут открывать файлы за его пределами.
Возможно, вы захотите посмотреть, как Apache и PHP связаны на вашем компьютере. Если вы используете модуль Apache mod_php, насколько я знаю, весь код PHP выполняется так же, как и сам пользователь Apache. Если вы подключите PHP с CGI (fcgi, fastcgi или что-то из этого диапазона), вы можете использовать Suexec. С помощью suEXEC вы можете указать пользователю, что PHP должен запускаться для каждого виртуального хоста.