Почему chroot считается небезопасным?
Я играл с CentOS Box уже пару лет. Так что я довольно удобен с терминалом. Тем не менее, я прочитал много постов в блоге, утверждая, что chroot небезопасен и количество этих постов пугает. Это действительно так? Зачем?
Я использую chroot, чтобы заблокировать SFTP-пользователей в определенном контексте, без какой-либо оболочки или команд вообще. Так что на самом деле, в чем проблема безопасности?
Вопрос выслан из StackOverflow.
3 ответа
Потому что в большинстве случаев корневой процесс может легко выйти из chroot. Это сделано специально, так как chroot никогда не задумывался как защитное устройство.
Алан Кокс несколько классно обругал разработчика, который представил исправление ядра, чтобы "исправить" это поведение, утверждая, что chroot использовался как средство защиты, но никогда не предназначался для него.
Я знаю, по крайней мере, один пример того, почему это считается небезопасным. Окружение chroot /proc
не изолирован, поэтому довольно легко получить доступ к ресурсам, не принадлежащим процессам, запущенным в вашем chroot.
Использование chrooted окружения для SFTP прекрасно и значительно повышает уровень безопасности. Только не используйте это как виртуализацию на основе контейнеров, которая обеспечивает более высокий уровень безопасности. В этом я подчеркиваю, что в ответе @MDMarra.
Всякий раз, когда злоумышленник получает доступ суперпользователя в среде chroot, у него появляются различные возможности сбежать из тюрьмы. Один из них основан на том, что не все файловые дескрипторы закрываются при вызове chroot(). Можно написать простую программу на языке C, использующую этот факт. Существуют более ограничительные решения, чем chroot, например виртуализация. Однако chroot предлагает простой и понятный способ ограничить процессы и их возможности.