
Я хотел бы получить точный ответ на вопрос, почему эта практика должна применяться к сервисам, которые подвергаются воздействию потенциально враждебных сетей (например, Интернета). Насколько я понимаю, существует метод выхода из chroot-заточения, так что если эта мера безопасности не имеет реальной ценности, то почему некоторые инсталляции все еще ее используют?
решение1
Никогда не следует считать chroot полноценной функцией безопасности. Хотя это и затрудняет атаку, если вам удастся получить некоторый контроль внутри chroot, его довольно легко вырвать. Существует метод, включающий chroot в родительский каталог (..) Подробнеездесь. Причина, по которой chroot дает некоторые преимущества в плане безопасности, заключается в том, что многие приложения, которые хакер мог бы ожидать, просто не будут там. Если бы мне дали выбор между chrooted и не chrooted, я бы выбрал chrooted.
Лучшим подходом было бы что-то вроде BSD jail, Solaris zones или какой-нибудь технологии виртуализации вроде KVM или Xen. Эти подходы берут ту же идею компартиментализации, что и chroot, и делают ее сильнее. Вы также можете рассмотреть что-то вроде SELinux, но это немного сложнее и, следовательно, подвержено ошибкам.
решение2
Насколько я понимаю, существует метод выхода из chroot-защиты (...), тогда почему некоторые инсталляторы все еще пытаются его использовать?
То же самое можно сказать и о паролях. Дело в том, что зачастую защита некоторых ресурсов означает возведение на пути злоумышленника множества препятствий, чтобы заставить его сдаться, не достигнув цели. Нельзя полагаться на один метод защиты данного ресурса. Более того, chrooting дает вам больше контроля над запущенным приложением. Вы можете ограничить ресурсы файловой системы, к которым это приложение имеет доступ.
решение3
Да, это так.
- Если ваш демон или что-то, предоставляющее службу, не работает от имени root, то даже дыра в этом демоне будет изолирована от остальной системы.
- Если ваша ОС может ограничивать операции, которые можно выполнять в chroot(), это еще лучше. Например, grsec-патчи для Linux могут лишить пользователя root возможности выходить из chroot или создавать /dev-nodes внутри chroot.
Однако если вы получаете эксплуатируемый баг ядра (или просто дыру в корне, если не grsec или BSD jails) внутри chroot, то вся система принадлежит. Это не так, если вы запускаете настоящий виртуализатор (такой как VMWare, но НЕ BSD jails. Они не помогают, поскольку используют одно и то же ядро для всех "систем").
Так что да, это добавляет уровень безопасности, если используется правильно.
решение4
Я считаю chroots слишком сложным и никогда не мог его установить. Можно утверждать, что если бы я мог это сделать, я бы нашел в нем большой интерес, но я все еще этого не сделал.
Я думаю, что изоляция ваших сервисов в виртуальных машинах (конечно, на Xen, но VMWare тоже подойдет, если вы настаиваете :-P ) — гораздо лучшая идея, учитывая вычислительную мощность, доступную в наши дни. Виртуальные машины также имеют огромное преимущество в том, что их очень легко резервировать/мигрировать, чего нет в chroot. У вас также есть всеобъемлющий интерфейс для управления виртуальными машинами, которого у вас определенно нет в chroot.