декабря 20 2008 04:29 пп

Запуск web сервера apache2 в среде chroot в Debian и Ubuntu.

vault-bank-backup-safe.jpg

Для начала давайте разберемся что такое 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 выполнив пару команд

Код:


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, проблемы должны исчезнуть.
Для более подробной инфрмации и решения некоторых проблем рекомендуется посетить ресурс http://core.segfault.pl

Оригинал статьи (англ) http://www.howtoforge.com

Надеюсь эта статья поможет вам и будет полезна.




7 комментариев »


7 комментариев to “Запуск web сервера apache2 в среде chroot в Debian и Ubuntu.”

  1. MatroskinCat on 29 Дек 2008 at 01:20 #

    Позвольте поинтересоваться вашим личным мнением на счёт чрутинга.
    1. Обязательная ли это деталь?
    2. Что из следующего вы бы предпочли отправить в chroot среду: radius (в том чиле клиент), apache, bind9, ну и так далее по вашему усмотрению. Или быть может всё это?

    Просто интересно узнать ваше мнение на самом деле.

  2. Stepanoff on 07 Янв 2009 at 12:46 #

    Насчет необходимости чрутинга каждый решит для себя, надо ли ему это или нет, ведь Вы же не станете ставить в чрут например интранет сайт офиса на 15 человек. Помещение в чрут апача, и бинд9 надо если есть реальная угроза взлома, тоесть популярный ресурс, с использованием скриптов которые могут быть уязвимы и тд. Насчет радиус клиента так же, все зависит лишь от важности сервиса, передаваемых его посредством данных.

  3. gosha on 13 Апр 2010 at 17:59 #

    А во если я хочу чтоб у меня только 1 сайт был зачрутен а остальные были без чрута, то мне выполнять всё тоже самое ?

  4. Максим Степанов on 13 Апр 2010 at 18:37 #

    После помещения apache в chroot там будут все сайты.

  5. gosha on 14 Апр 2010 at 16:27 #

    аха ясн а вот если у меня Установка nginx как front-end and back-end то как я понимаю мне нужно и nginx закинуть в чрут ? елсли да то я так понимаю опять же надо просто .pid файл сдулть семлик ? кста а упралениее апачек я как понимаю так и остается /etc/init.d/apache2 start (restart, stop, reload) ?

  6. Максим Степанов on 14 Апр 2010 at 16:30 #

    Управление так и останется, nginx можно так же поместить в chroot, а можно и оставить как есть.

  7. gosha on 14 Апр 2010 at 16:36 #

    то есть хоть так хоть так работать будет , аха спасибо понял .

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »



Server load average: 0.03, 0.02, 0.00
Server uptime: 358 days, 20:16
Your IP is: 54.162.236.133.