декабря 20 2008 04:29 пп
Запуск web сервера apache2 в среде chroot в Debian и Ubuntu.

Для начала давайте разберемся что такое chroot и для чего оно нам надо. Обратимся в wikipedia для разъяснения.
chroot в — это операция изменения . Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге. Поэтому, если нужно обеспечить программе доступ к другим каталогам или файловым системам (например, /proc), нужно заранее в целевом каталоге необходимые каталоги или устройства.
Изменение корневого каталога производится при помощи системного вызова chroot(2). Изменение корневого каталога затрагивает только текущий процесс (то есть процесс, сделавший chroot(2)) и всех его потомков. Если требуется запустить некоторую программу с изменённым корневым каталогом, но в данной программе не предусмотрено выполнение вызова chroot(2), используют программу chroot(8). Эта программа принимает в качестве параметров новый корневой каталог и путь к программе. Она сначала сама выполняет вызов chroot(2) для изменения собственного корневого каталога на указанный, а затем запускает программу по заданному пути. Так как изменённый корневой каталог наследуется потомками процессов, программа запускается с изменённым корневым каталогом.
Сам по себе термин chroot может относиться или к концепции изменений корневого каталога, или к chroot(2), или к программе chroot(8), что обычно понятно из контекста.
Программа, корень которой был перенесён в другой каталог, не может обращаться к файлам вне этого каталога. Это обеспечивает удобный способ помещения в «» («песочницу») тестовой, ненадёжной или любой другой потенциально опасной программы. Это также простой способ механизма «» («тюрьмы»). Но наиболее часто chroot используется для сборки дистрибутивов или отдельных программ как бы в «чистой» среде.
Теперь можно начинать настройку нашего вебсервера, помещение его в среду chroot мы будем делать при помощи mod_chroot.
Установим и включим mod_chroot выполнив пару команд
Код:
apt-get install libapache2-mod-chroot
a2enmod mod_chroot
/etc/init.d/apache2 force-reload
Теперь настроим наш веб сервер, для chroot будет использоваться директория /var/www. По цмолчанию файл поцесса apache хранится в /var/run/apache2.pid, но после помещения apache в chroot он будет перемещен в /var/www/var/run/apache2.pid, необходимо создать эту директорию
Код:
mkdir -p /var/www/var/run
chown -R root:root /var/www/var/run
Затем надо указать в конфиге 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
Код:
/etc/init.d/apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
/etc/init.d/apache2 start
Теперь ваш веб сервер работает в chroot среде, и должен без проблем показывать html и php страницы, но у вас могут возникнуть проблемы с ипользовванием CGI или SUphp, для этого надо скопировать в chroot среду файлы интерпритаторов (/usr/bin/perl, /usr/sbin/suphp) и необходимые для их работы библиотеки. Узнать какие файлы нужны для работы например suphp можно командой ldd
Код:
server2:/var/www/web1/log# ldd /usr/sbin/suphp
linux-gate.so.1 => (0xffffe000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e34000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e0f000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e03000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7cd2000)
/lib/ld-linux.so.2 (0xb7f23000)
Скопируйте все неоходимое в среду chroot, проблемы должны исчезнуть.
Для более подробной инфрмации и решения некоторых проблем рекомендуется посетить ресурс
Оригинал статьи (англ)
Надеюсь эта статья поможет вам и будет полезна.
Popularity: -0%
7 Комментариев »
Обсудить на форуме
7 Responses to “Запуск web сервера apache2 в среде chroot в Debian и Ubuntu.”
Leave a Reply
You must be logged in to post a comment.

on 29 Дек 2008 at 01:20 #
Позвольте поинтересоваться вашим личным мнением на счёт чрутинга.
1. Обязательная ли это деталь?
2. Что из следующего вы бы предпочли отправить в chroot среду: radius (в том чиле клиент), apache, bind9, ну и так далее по вашему усмотрению. Или быть может всё это?
Просто интересно узнать ваше мнение на самом деле.
on 07 Янв 2009 at 12:46 #
Насчет необходимости чрутинга каждый решит для себя, надо ли ему это или нет, ведь Вы же не станете ставить в чрут например интранет сайт офиса на 15 человек. Помещение в чрут апача, и бинд9 надо если есть реальная угроза взлома, тоесть популярный ресурс, с использованием скриптов которые могут быть уязвимы и тд. Насчет радиус клиента так же, все зависит лишь от важности сервиса, передаваемых его посредством данных.
on 13 Апр 2010 at 17:59 #
А во если я хочу чтоб у меня только 1 сайт был зачрутен а остальные были без чрута, то мне выполнять всё тоже самое ?
on 13 Апр 2010 at 18:37 #
После помещения apache в chroot там будут все сайты.
on 14 Апр 2010 at 16:27 #
аха ясн а вот если у меня Установка nginx как front-end and back-end то как я понимаю мне нужно и nginx закинуть в чрут ? елсли да то я так понимаю опять же надо просто .pid файл сдулть семлик ? кста а упралениее апачек я как понимаю так и остается /etc/init.d/apache2 start (restart, stop, reload) ?
on 14 Апр 2010 at 16:30 #
Управление так и останется, nginx можно так же поместить в chroot, а можно и оставить как есть.
on 14 Апр 2010 at 16:36 #
то есть хоть так хоть так работать будет , аха спасибо понял .