Для создания chroot-окружения в Debian или Ubuntu можно использовать пакет debootstrap, а для управления - schroot.apt-get install debootstrap
Создадим минимальный chroot в Ubuntu:
debootstrap --variant=buildd --arch i386 hardy /home/chroot_web http://archive.ubuntu.com/ubuntu/
в Debian:
debootstrap --arch i386 lenny /home/chroot_web http://ftp.us.debian.org/debian
при этом в Ubuntu можно создавать chroot на базе Debian и наоборот.
Для последующей установки пакетов из chroot копируем файлы конфигурации APT и резолвера:
cp /etc/resolv.conf /home/chroot_web/etc/resolv.conf
cp /etc/apt/sources.list /home/chroot_web/etc/apt/Заходим в chroot-окружение:
sudo chroot /home/chroot_web
Устанавливаем в нем apache:
apt-get update
apt-get install apache2Устанавливаем необходимые для работы и сборки пакетов составляющие:
apt-get --no-install-recommends install wget debconf devscripts gnupg
apt-get updateКонфигурируем локаль:
apt-get install locales dialog
locale-gen ru_RU.UTF-8
tzselect; TZ='Europe/Moscow';Пробрасываем в chroot системные псевдо ФС, в /etc/fstab основной системы добавляем:
/proc /home/chroot_web/proc none rbind 0 0
/dev /home/chroot_web/dev none rbind 0 0
/sys /home/chroot_web/sys none rbind 0 0Запускаем сервис:
chroot /home/chroot_web /etc/init.d/apache2 startКогда chroot-окружений много или внутри chroot запускается несколько сервисов для управления удобно использовать schroot
apt-get install schroot
Создаем /etc/schroot/schroot.conf:
[hardy]
description=Apache Chroot
location=/home/chroot_web
priority=3
users=webuser
groups=sbuild
root-groups=rootЗапускаем все chroot-окружения и определенные в них сервисы:
schroot --all -- su -c /etc/init.d/rc\ 2 -
URL: https://wiki.ubuntu.com/DebootstrapChroot
Обсуждается: http://www.opennet.me/tips/info/2192.shtml
Ещё неплохо создать /etc/hosts
sys и proc нужно просто монтирвать без rbind
а также примонтировать devptsproc /home/chroot_web/proc proc defaults 0 0
sys /home/chroot_web/sys sysfs defaults 0 0
/dev /home/chroot_web/dev none bind 0 0
devpts /home/chroot_web/dev/pts defaults,gid=5,mode=620 0 0man debootstrap короче
>Ещё неплохо создать /etc/hosts
>sys и proc нужно просто монтирвать без rbind
>а также примонтировать devpts
>
>proc /home/chroot_web/proc proc defaults 0 0
>sys /home/chroot_web/sys sysfs defaults 0 0
>/dev /home/chroot_web/dev none bind 0 0
>devpts /home/chroot_web/dev/pts defaults,gid=5,mode=620 0 0
>
>man debootstrap корочеитак, допустим apache таки ломанули
у нас dev есть? конечно, а даже если и нет, то мы себе сами сможем создать.
берем /dev/[sh]daXXX , монтируем его куда-нибудь, и из chroot'а пругаем chroot'ом в root.
зачем использовать полные слепки системы для изоляции сервисов ровным счётом не понятно.
к предыдущей заметке по RedHat-based системам критика такая-же.(если виртуализация по тем или иным причинам не может быть использованна)
1. для изоляции сервисов нужно создавать минимальное окружение
2. использование chroot'а для изоляции всё-равно остаётся очень плохой идеей.
users = webuser
groups = sbuildАпач, уж 100 лет как, без рута умеет работать.
Для сумневающихся - http://www.grsecurity.net/
А нужно это для того, чтоб не плдоить виртуалки.
А чем плоха, к примеру, виртуалка под OpenVZ? chroot хорош для мелких задач, а тут практически вся система.
>А чем плоха, к примеру, виртуалка под OpenVZ? chroot хорош для мелких
>задач, а тут практически вся система.В применение изолированных сред, само название говорит за себя....
В изоляции должно сужествовать только то, что нужно, и не байта больше.
Приложение + Shared Objects (.so) и R/O данные.
Данные для записи складываются в SQL/CIFS/NFS итп, но в другом chroot.
База или каталоги для записи хранится на RAID1/5/10 c hourly/daily
incremental снапшотами и weekly TAPE/DVD-R/BD-R бакапом.OpenVZ, как и любую другую виртуаль, очень накладно держать для каждого сервиса раздельно.
У виртуалок есть два приемущества - быстырый бэкап, и полная изоляция (SMM бэкдором не многие умеют пользоваться).
Не думаю что всё тка плохо. OpenVZ держать не очень накладно, там расходы копеечные.Вопрос про chroot: а как обновлять в нём софт, если только библиотеки? В нашем примере там не только библиотеки - там всё.
>Не думаю что всё тка плохо. OpenVZ держать не очень накладно, там расходы копеечные.
>
>Вопрос про chroot: а как обновлять в нём софт, если только библиотеки?Правильный chroot это runtime chroot, т.е. по мере необходимости...
Пришёл коннект, родил chroot и перенаправил туда.LIMIT_PER_ONE_SERVER = 1024;
CONNECTIONS = 0;EXTERN CONNECT();
MASTER_CONNECT(char *user) {
WHILE (ONLINE) {
IF ( CONNECTIONS % LIMIT_PER_ONE_SERVER == 0 )
{
THEN
FORK_IN_CHROOT_NEW_SERVER(CONNECT());
REDIRECT_TO_NEW_SERVER(user);
ELSE
REDIRECT_TO_NONBUSY_SERVER(user);
}
CONNECTIONS++
} // while
}ну и так далее
>Правильный chroot это runtime chroot, т.е. по мере необходимости...
>Пришёл коннект, родил chroot и перенаправил туда.В идеальном мире да. А в реальном?
>>Правильный chroot это runtime chroot, т.е. по мере необходимости...
>>Пришёл коннект, родил chroot и перенаправил туда.
>
>В идеальном мире да. А в реальном?Никому не нужно :)
Написать гибрид xinetd+fork+chroot не долго.
>Написать гибрид xinetd+fork+chroot не долго.Ну и нафига такой пример?
есть такой апач: Apache 2 ITK MPM и Peruser MPM, но всё не так просто, как кажется, в результате он медленнее и ресурсов ему больше нужно
> OpenVZ, как и любую другую виртуаль, очень накладно держать для каждого
> сервиса раздельно.И в чем эта накладность состоит? Оно не виртуаль в общем то, а просто резатель ресурсов крутой. Тот же чрут но только сильно более правильный. Поэтому просадка скорости от опенвзы - не больно какая заметная. А вот интересные фенечки оно зато умеет. Ну и можно содержать систему с 5 процессами - один из которых инит а второй sshd к тому же будет.Как раз по контейнеру на сервис. Нифига оно не накладно, строго говоря. Если задаться целью его минимизировать - это можно.Скажем нафиг в контейнере стандартные утилсы и прочая, если оно может жить на ФС хоста и управляться оттуда?Как бонус - если хакер сломает что-то, он попадет в вроде как машину но какую-то сильно неудобную и неполноценную, где вредительствовать особо не дают :)
Из плюсов - хаксор не сможет грузить модули ядра даже будучи рутом (вза сие отшивает) и дуракозащищенность - повыше.Например недавний сплойт повышающий права до рута на взе вообще не работал, что тоже некий плюс.
А зачем создавать полное окружение - нужно все-голишь чтобы сервис умел запускаться в чруте (стартует рутом, после того как все модели загрузит) переходит в чрут. Апач это умеет, в openbsd так работает без проблем даже с mod_php.
но при этом чрут сам посебе не назовешь полноценной изоляцией, нужно как минимум запретить чрутитьтся всем кроме root (ну и еще какие то мелочи не помню), поэтому без grsecurity или selinux чрут сам по себе только усложняет жизнь взломщику но не предотращает взлом
> нужно как минимум запретить чрутитьтся всем кроме rootА с каких пор CAP_SYS_CHROOT есть у кого-то, кроме рута?
я не правильно выразился, но суть думаю понятна как можно выйти за пределы chroot и почему он не особо полезен без подсистем безопасности?
>я не правильно выразился, но суть думаю понятна как можно выйти за
>пределы chrootБез рутовых привилегий и при условии, что у демона нет открытых файлов/каталогов вне chroot это всё же проблематично.
>и почему он не особо полезен без подсистем безопасности?
chroot изначально не проектировался как средство безопасности. Тем не менее, chroot() + chdir() + setuid() = неплохой дополнительный барьер для хакера.
chroot в chroot и fchdirОт этого ведб стандартными способами не защитишся
>chroot в chroot и fchdir
>
>От этого ведб стандартными способами не защитишсяДа, только второй chroot() можно сделать, если у демона есть CAP_SYS_CHROOT (т.е. если демон под рутом сидит).
Обычный пользователь делать chroot() не умеет.
http://linux.die.net/man/2/chroot
вы не написали зачем все это надо, какие преимущества и недостатки. вкрадце вводную надо было дать.