Я настраиваю веб-сервер, на котором будет размещаться несколько различных веб-сайтов, таких как Apache VirtualHosts, каждый из которых будет иметь возможность запускать скрипты (в первую очередь PHP, возможно, другие).
Мой вопрос заключается в том, как изолировать каждый из этих виртуальных хостов друг от друга и от остальной части системы? Я не хочу, чтобы, например, веб-сайт X читал конфигурацию веб-сайта Y или какой-либо из «личных» файлов сервера.
На данный момент я настроил VirtualHosts с FastCGI, PHP и SUExec, как описано здесь ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), но SUExec только запрещает пользователям редактировать / выполнять файлы, отличные от их собственных - пользователи по-прежнему могут читать конфиденциальную информацию, такую как файлы конфигурации.
Я думал об удалении глобального разрешения на чтение UNIX для всех файлов на сервере, так как это решило бы вышеуказанную проблему, но я не уверен, что смогу сделать это безопасно, не нарушая функцию сервера.
Я также изучил использование chroot, но кажется, что это можно сделать только для каждого сервера, а не для каждого виртуального хоста.
Я ищу любые предложения, которые изолируют мои VirtualHosts от остальной части системы.
PS Я работаю на сервере Ubuntu 12.04
Мой ОТВЕТ: Я закончил с тем, что почти выполнил свою текущую конфигурацию, но выполнил тюрьму chroot для всех виртуальных хостов, например, включил тюрьму chroot /var/www
и затем имел все пользовательские данные в подпапках, каждая с правами группы / других r / w / x. отключен. Этот вариант был желателен тем более, что все это возможно без каких-либо изменений в исходном коде.
Я выбрал ответ @Chris, потому что он был тщательно написан, а также рассматривал FTP и SELinux
источник
mod_userdir
предлагает виртуальный хостинг отдельных доменов. Кроме того, у меня есть опасения по поводу безопасности с точки зрения изоляции, поскольку я не могу найти что-либо об этом между пользовательскими каталогами в Apache. Просто кажется, что не предлагать эту функцию.Предлагаю посмотреть
suphp
или PHP-FPM .Это в основном позволит интерпретатору PHP 'su' для определенного пользователя, настроенного для этого VirtualHost. Это позволит вам использовать общие разрешения файловой системы для изоляции каждого VirtualHost.
Я бы порекомендовал FPM из соображений производительности. На главной странице это то, что вас больше всего интересует:
источник
Посмотри в
chroot
.Некоторые отправные точки:
Apache chroot сделал просто
Среда Chroot для Apache (Debian)
Apache Chroot Jail: виртуальный хостинг
источник
/var/www
, и чтобы все хосты находились там в подкаталоге, в каждом из этих подкаталогов было удалено глобальное разрешение на выполнение / чтение?chroot
, и вы можете сделать это для каждого виртуального сервера. Вот пример. В этом случае они используютmod_chroot
.