Уязвимости CE
Как это ни прискорбно, наш мир далек от идеала, и программное обеспечение здесь не является исключением из правил. Из CE можно "выпрыгнуть", причем, иногда очень легко. Один из методов "побега" описан прямо в документации по chroot - цитирую: In particular, the super-user can escape from a `chroot jail' by doing `mkdir foo; chroot foo; cd ..'.
Чтобы не делать из этого материала руководства по побегу из chroot, не буду развивать эту тему - она достаточно хорошо освещена на соотвествующих тематических сайтах.
Итак, существует ряд проблем с безопасной работой в CE, однако существуют и контрмеры по их устранению. Одна из наиболее эффективных подпорок CE - это набор патчей на ядро под названием grsecurity. Эти патчи достойны настоящего параноика и позволяют достаточно туго затянуть гайки (вплоть до доведения системы до самого защищенного состояния - неработающего). Из интересующего нас в аспекте усиления CE можно отметить раздел 'Chroot jail restrictions', в котором:
- запрет mount
- запрет двойных вызовов chroot()
- запрет использования pivot_root() (аналога chroot())
- принудительная смена текущего каталога на "/"
- запрет установки suid и sgid флагов на файлы
- запрет fchdir() (иначе из CE можно сбежать через открытый файловый дескриптор, ведущий наружу)
- запрет создания файлов устройств
- запрет использования shared memory за границами CE
- запрет подключения к абстрактным Unix domain sockets
- запрет на управление процессами вне CE (чтобы из CE нельзя было убить внешний процесс либо еще как-то на него повлиять)
- запрет смены приоритета процессов вне CE (иначе возможна реализация DoS при выставлении минимального приоритета на другие работающие сервисы)
- запрет манипулирования sysctl записями
- запрет подключения модулей ядра, raw I/O операций, перезагрузки системы, смены системного времени, изменения файлов с иммунитетом и многое другое
Если вы подумаете: "а зачем такой концлагерь?" - я рискуя, окончательно разрушить вашу веру в устойчивость программного обеспечения, скажу, что почти каждый из пунктов перечисленного списка позволяет "сбежать" из CE. А вообще grsecurity содержит много интересного, рекомендую принять на вооружение. Единственный неприятный момент, связанный с этим набором патчей - некоторая инертность разработчика (порой выпуски свежих версий патчей задерживаются).
При упоминании grsecurity на ум сразу приходят патчи проекта Openwall (который уже вырос в дистрибутив Openwall GNU/*/Linux, ориентированный на усиление безопасности) - однако, они менее эффективны и не предоставляют возможности тонкой настройки параметров.