Операционная система FreeBSD содержит механизм jail(8), позволяющий создавать изолированные группы процессов, вроде легковесных виртуальных машин.
Джейлы эффективнее Xen-клеток, практически не потребляют ресурсов (т.к. используют общее с хостом ядро). Процессы из джейлов легко управляются с хоста (ps -A, kill, jls, jexec и т.п.). Каждый джейл видит только часть файловой системы и может быть ограничен в ресурсах (rctl, zfs set quota). На джейлах часто строится FreeBSD VPS-хостинг (например RootBSD.net), где каждый клиент имеет свою маленькую ОС и набор приложений с правами рута (извращенцы даже могут поставить GNU/kFreeBSD), однако в этой статье мы рассмотрим другую задачу — запуск web-сервера в минимальном джейле.
Зачем это нужно? В web-серверах, как и в другом софте, написанном на C, время от времени находят уязвимости к атакам типа "переполнение буфера", позволяющие удалённо захватить контроль над системой. Эти ошибки являются следствием технологии разработки софта, поэтому не могут быть исправлены окончательно. Каждая из них — предпоследняя.
Представьте себе: джейл, у которого в папке /bin нет шелла, только бинарные nginx и php-fpm. В папке /dev только null, urandom и ещё пара подобных устройств. В папке /etc только конфиги nginx'а, php.ini и файл master.passwd, в котором хэши паролей обоих пользователей root и www заменены звёздочками. Также в джейле есть /www, /logs и /tmp, где нет ничего интересного. Такой джейл может быть взломан через переполнение стека web-сервера или другого серверного процесса, но нагадить в основной системе или украсть пароль рута из него нельзя. Системный вызов mount(2) не работает, ICMP не работает, ноды устройств создавать нельзя, список внешних процессов недоступен, сигналы им отправить нельзя и так далее.
( Пошаговая инструкция, как собрать статический nginx и php-fpm для использования в FreeBSD jail )
Джейлы эффективнее Xen-клеток, практически не потребляют ресурсов (т.к. используют общее с хостом ядро). Процессы из джейлов легко управляются с хоста (ps -A, kill, jls, jexec и т.п.). Каждый джейл видит только часть файловой системы и может быть ограничен в ресурсах (rctl, zfs set quota). На джейлах часто строится FreeBSD VPS-хостинг (например RootBSD.net), где каждый клиент имеет свою маленькую ОС и набор приложений с правами рута (извращенцы даже могут поставить GNU/kFreeBSD), однако в этой статье мы рассмотрим другую задачу — запуск web-сервера в минимальном джейле.
Зачем это нужно? В web-серверах, как и в другом софте, написанном на C, время от времени находят уязвимости к атакам типа "переполнение буфера", позволяющие удалённо захватить контроль над системой. Эти ошибки являются следствием технологии разработки софта, поэтому не могут быть исправлены окончательно. Каждая из них — предпоследняя.
Представьте себе: джейл, у которого в папке /bin нет шелла, только бинарные nginx и php-fpm. В папке /dev только null, urandom и ещё пара подобных устройств. В папке /etc только конфиги nginx'а, php.ini и файл master.passwd, в котором хэши паролей обоих пользователей root и www заменены звёздочками. Также в джейле есть /www, /logs и /tmp, где нет ничего интересного. Такой джейл может быть взломан через переполнение стека web-сервера или другого серверного процесса, но нагадить в основной системе или украсть пароль рута из него нельзя. Системный вызов mount(2) не работает, ICMP не работает, ноды устройств создавать нельзя, список внешних процессов недоступен, сигналы им отправить нельзя и так далее.
( Пошаговая инструкция, как собрать статический nginx и php-fpm для использования в FreeBSD jail )