Для начала давайте разберемся что такое chroot и для чего оно нам надо. Обратимся в wikipedia для разъяснения.
chroot в Unix-подобныхоперационных системах — это операция изменения корневого каталога. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге. Поэтому, если нужно обеспечить программе доступ к другим каталогам или файловым системам (например, /proc), нужно заранее примонтировать в целевом каталоге необходимые каталоги или устройства.
Изменение корневого каталога производится при помощи системного вызова chroot(2). Изменение корневого каталога затрагивает только текущий процесс (то есть процесс, сделавший системный вызовchroot(2)) и всех его потомков. Если требуется запустить некоторую программу с изменённым корневым каталогом, но в данной программе не предусмотрено выполнение вызова chroot(2), используют программу chroot(8). Эта программа принимает в качестве параметров новый корневой каталог и путь к программе. Она сначала сама выполняет вызов chroot(2) для изменения собственного корневого каталога на указанный, а затем запускает программу по заданному пути. Так как изменённый корневой каталог наследуется потомками процессов, программа запускается с изменённым корневым каталогом.
Сам по себе термин chroot может относиться или к концепции изменений корневого каталога, или к системному вызовуchroot(2), или к программе chroot(8), что обычно понятно из контекста.
Программа, корень которой был перенесён в другой каталог, не может обращаться к файлам вне этого каталога. Это обеспечивает удобный способ помещения в «sandbox» («песочницу») тестовой, ненадёжной или любой другой потенциально опасной программы. Это также простой способ механизма «jail» («тюрьмы»). Но наиболее часто chroot используется для сборки дистрибутивов или отдельных программ как бы в «чистой» среде.
Теперь можно начинать настройку нашего вебсервера, помещение его в среду chroot мы будем делать при помощи mod_chroot.
Установим и включим mod_chroot выполнив пару команд
Теперь настроим наш веб сервер, для chroot будет использоваться директория /var/www. По цмолчанию файл поцесса apache хранится в /var/run/apache2.pid, но после помещения apache в chroot он будет перемещен в /var/www/var/run/apache2.pid, необходимо создать эту директорию
Затем надо указать в конфиге apache что мы хотим использовать директорию /var/www как среду chroot, для этого отредактируем файл /etc/apache2/apache2.conf, найдите там строку в которой указан путь для хранения файла pid и добавьте ниже строку, так как показано ниже.
Код:
[...]
#
# PidFile: The file in which the server should record its process
# identification number when it starts.
#
PidFile /var/run/apache2.pid
ChrootDir /var/www
[...]
Далее надо заменить в конфигурационных файлах виртуальных хостов пути DocumentRoot, так как например путь /var/www/ теперь будет для apache директорией /, но есть второй способ, который позволит не изменять конфигурацию, а просто создать символические ссылки на нужные директории. Например нам надо оставить в качестве DocumentRoot директорию /var/www, ниже приведен пример правильного создания символических ссылок.
Код:
mkdir -p /var/www/var
cd /var/www/var
ln -s ../../ www
Теперь остановите apache и создайте символическую ссылку на pid файл, затем снова запустите apache
Теперь ваш веб сервер работает в chroot среде, и должен без проблем показывать html и php страницы, но у вас могут возникнуть проблемы с ипользовванием CGI или SUphp, для этого надо скопировать в chroot среду файлы интерпритаторов (/usr/bin/perl, /usr/sbin/suphp) и необходимые для их работы библиотеки. Узнать какие файлы нужны для работы например suphp можно командой ldd
Скопируйте все неоходимое в среду chroot, проблемы должны исчезнуть.
Для более подробной инфрмации и решения некоторых проблем рекомендуется посетить ресурс http://core.segfault.pl
Позвольте поинтересоваться вашим личным мнением на счёт чрутинга.
1. Обязательная ли это деталь?
2. Что из следующего вы бы предпочли отправить в chroot среду: radius (в том чиле клиент), apache, bind9, ну и так далее по вашему усмотрению. Или быть может всё это?
Просто интересно узнать ваше мнение на самом деле.
Насчет необходимости чрутинга каждый решит для себя, надо ли ему это или нет, ведь Вы же не станете ставить в чрут например интранет сайт офиса на 15 человек. Помещение в чрут апача, и бинд9 надо если есть реальная угроза взлома, тоесть популярный ресурс, с использованием скриптов которые могут быть уязвимы и тд. Насчет радиус клиента так же, все зависит лишь от важности сервиса, передаваемых его посредством данных.
аха ясн а вот если у меня Установка nginx как front-end and back-end то как я понимаю мне нужно и nginx закинуть в чрут ? елсли да то я так понимаю опять же надо просто .pid файл сдулть семлик ? кста а упралениее апачек я как понимаю так и остается /etc/init.d/apache2 start (restart, stop, reload) ?
Позвольте поинтересоваться вашим личным мнением на счёт чрутинга.
1. Обязательная ли это деталь?
2. Что из следующего вы бы предпочли отправить в chroot среду: radius (в том чиле клиент), apache, bind9, ну и так далее по вашему усмотрению. Или быть может всё это?
Просто интересно узнать ваше мнение на самом деле.
Насчет необходимости чрутинга каждый решит для себя, надо ли ему это или нет, ведь Вы же не станете ставить в чрут например интранет сайт офиса на 15 человек. Помещение в чрут апача, и бинд9 надо если есть реальная угроза взлома, тоесть популярный ресурс, с использованием скриптов которые могут быть уязвимы и тд. Насчет радиус клиента так же, все зависит лишь от важности сервиса, передаваемых его посредством данных.
А во если я хочу чтоб у меня только 1 сайт был зачрутен а остальные были без чрута, то мне выполнять всё тоже самое ?
После помещения apache в chroot там будут все сайты.
аха ясн а вот если у меня Установка nginx как front-end and back-end то как я понимаю мне нужно и nginx закинуть в чрут ? елсли да то я так понимаю опять же надо просто .pid файл сдулть семлик ? кста а упралениее апачек я как понимаю так и остается /etc/init.d/apache2 start (restart, stop, reload) ?
Управление так и останется, nginx можно так же поместить в chroot, а можно и оставить как есть.
то есть хоть так хоть так работать будет , аха спасибо понял .