PermLUG |
Пермская группа пользователей Linux |
|
|
|
||
Вход в систему |
Опыт установки apache в chroot
Grifon, 27.11.2009 — 16:43
chroot — операция изменения корневого каталога в Unix-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге. Программа, корень которой был перенесён в другой каталог, не может обращаться к файлам вне этого каталога. Это обеспечивает удобный способ помещения в «sandbox» («песочницу») тестовой, ненадёжной или любой другой потенциально опасной программы.
Буду рассматривать на примере дистрибутива openSUSE 11.1. В других делается аналогично с поправкой на размещение и менеджер пакетов.
Опять скажу, почему я пишу то, что уже много раз описано. Потому, что там, где писали, на сколько я нашёл, авторы статей упоминали о том, что их руководство только для «простой» установки, т.е., грубо говоря, их веб-сервер будет обрабатывать статические страницы. Мне же нужен сервер, который работает в свою полную функциональность с поддержкой скриптовых языков. Для сервисов в OpenSUSE есть каталог /srv, в нём и будем создавать пациента. Сначала сделал корневую систему каталогов внутри /srv/apache.
# mkdir -p /srv/apache/{bin,sbin,usr/bin,usr/sbin,etc,lib,usr/lib,lib64,usr/lib64,etc,dev,var,var/run}
В общем, неплохо было бы делать её на отдельном разделе диска (как у меня). # rpm -qa |grep apache apache2-2.2.10-2.5 apache2-utils-2.2.10-2.5 apache2-mod_perl-2.0.4-40.12 apache2-mod_php5-5.2.11-0.1.1 apache2-prefork-2.2.10-2.5
Далее, используя заметку, я сделал другой скрипт. Его назначение - скопировать пакет и необходимые для него библиотеки в окружение chroot. movechroot.sh имя_пакета каталог_chroot перенёс апач: movechroot.sh apache2 /srv/apache movechroot.sh apache2-mod_perl /srv/apache movechroot.sh apache2-mod_php5 /srv/apache movechroot.sh apache2-prefork /srv/apache Далее, скопировал нужные файлы устройств (ключ -a обязателен!):
cp -a /dev/{null,random,urandom} /srv/apache/dev/
Перенёс файлы конфигурации: cp -au /etc/apache2/ /srv/apache/etc Создал так же необходимые файлы в etc:
# grep ^root /etc/passwd >> /srv/apache/etc/passwd
# grep ^root /etc/shadow >> /srv/apache/etc/shadow
# grep ^wwwrun /etc/passwd >> /srv/apache/etc/passwd
# grep ^wwwrun /etc/shadow >> /srv/apache/etc/shadow
# grep ^root /etc/group >> /srv/apache/etc/group
# grep www /etc/group >> /srv/apache/etc/group
# cp -a /etc/{resolv.conf,localtime,ld.so.*} /srv/apache/etc/
Всё тем же скриптом ldddeps.sh нашёл зависимости для библиотек nss. Эти библиотеки нужны для корректной работы DNS, соответствия имён пользователей и групп в uid и обратно.
# lddeps.sh /lib64/{libnss_files*,libnss_dns*,libnss_compat.*}
/lib64/libnss_files-2.9.so
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
/lib64/libnss_files.so.2
/lib64/libnss_dns-2.9.so
/lib64/libresolv.so.2
/lib64/libnss_dns.so.2
/lib64/libnss_compat.so.2
/lib64/libnsl.so.1
Cкопировал их в /srv/apache/lib64. ldconfig -r /srv/apache
Её нужно выполнять после каждой установки библиотек в chroot. chroot /srv/apache /usr/sbin/httpd2-prefork
Запуск апача может быть подредактировал в /etc/init.d/apache2. Очень советую сделать резервную копию. for pkg in $(rpm -qa|grep php); do sh findlibs.sh $pkg /srv/apache; done Останется дать права на некоторые каталоги: mkdir /srv/apache/var/lib/php5/ chmod 1777 /srv/apache/var/lib/php5/
Ну вот так и заработало. mv /srv/www /srv/apache/srv/www ln -sf /srv/apache/srv/www /srv/
Тестирование.
<?php
print "<html><body>";
print str_replace("\n", "<br>", file_get_contents("/etc/passwd"));
print "</html></body>";
?>
Запустив этот сценарий из браузера получил: |
Тэги в ТегиНовые записи в блогах
Активные обсуждения форума
Новости Linux
|
| Пермская группа пользователей Linux, 2003—2011 | ||
Чувствую, рабочий день начну с перевода апача в песочницу :)
Полностью согласен с тобой, что нужен отдельный раздел диска либо механизм квотирования, ведь chroot не помешает забить текущую директорию до краёв и вызвать Denied of service.
клетками пользуейтсе, и редирект.
и неуперся вам чрут никуда
Статьи только приветствуются. Можешь раскрыть свой вариант
chroot я до сих пор не понимаю зачем?
при тестировании понециально опасных программ и прочего я использую отдельный компутер...
зачем мучиться в chroot.
На тот случай если злобный хацкер поимеет твой сервер через уязвимости апач/пхп/майскуэль.
если злобный хацкер он и так поимеет :)
отказ от работы apache|php|mysql в chroot как спасет ?
Основная машина останется не тронутой
Во-первых, web-сервер - это не тестирование программ, а реально работающий сервер с сайтом. Во-вторых, если этот сервер стоит на компьютере, который используется не только для предоставления web-услуг, chroot скрывает остальную часть от проникновения средствами потенциально уязвимых скриптов. В-третьих, изолируется не только система от сервера, но и сервер от системы. Поясню. Сервер не видит лишние библиотеки и утилиты. В том числе - bash. То есть, например, популярные phpshell и r57shell просто не работают! Ну и, наконец, это даёт возможность проследить источник взлома и минимизировать его последствия, так как нужно будет только восстановить корректный каталог с файлами сайта.