Администрируя систему компьютера, вам иногда необходимо создать новое окружение, отдельное от основной системы, где пользователь будет видеть только определенные файлы, сможет создать тестовую среду для программ или скриптов, восстановить систему или переустановить загрузчик. Создания такого окружения, называемого chroot jail, помогает выполнять определенные задачи вне основной системы для ее безопасности. Что такое chroot jail, как и для чего ее создают, какие еще используются дополнительные, методы безопасности мы узнаем в нашей сегодняшней статье.
Chroot (образовано от фразы «change root», что означает «изменить корень») – это команда в Unix-like системах, которая изменяет видимый корневой каталог на указанный пользователем.
Chroot Jail (Chroot-тюрьма) процесс помещения пользователя в поддельный корневой каталог (в тюрьму), который создается намеренно, для того чтобы пользователь имел доступ к определенным командам и разрешениям.
Каковы цели использования chroot-тюрьмы?
Chroot тюрьма используется для создания небольшой песочницы для начала процесса (прим.: тестирование программ или скриптов, восстановление системного пароля, и т.п.). Это означает, что процесс не может злонамеренно изменять информацию за пределами предписанного дерева каталогов, чтоб избежать сбоя всей системы.
Chroot-тюрьмы также могут использоваться для замены виртуальных машин. Виртуализация на уровне ядра использует меньше ресурсов, чем виртуальные машины. Благодаря этому методу пользователи могут создавать несколько отдельных экземпляров в одной системе.
Для настройки chroot jail существуют определенные условия:
Все команды запускаются от имени пользователя root. Используйте команду sudo, если вы вошли на сервер как обычный пользователь.
Иногда возникают такие ситуации, когда необходимо разрешить ограниченный доступ пользователям по протоколу ssh. Например, пользователь хостинга может потребовать возможности внесения исправлений непосредственно на сервере или загрузить контент посредством безопасных протоколов. В таких случаях ради соблюдения мер безопасности правильно будет создать chroot-тюрьму для SSH, предоставив права доступа пользователям только к определенным директориям.
Для того чтобы создать новый корневой каталог chroot-тюрьму для SSH, используя механизм chroot, выполните следующие шаги:
# mkdir -p /home/test/dev/
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
После создания пути к каталогу, в котором будет производиться перенаправление chroot, необходимо настроить интерактивную оболочку для SSH Chroot Jail.
Для начала создайте поддельную копию корневого каталога, а затем переместите некоторые двоичные файлы, такие как bash и ls, из каталога /bin/ в новый корневой каталог. Для этого выполните следующие шаги:
# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Если на площадке работает root-пользователь со своими доступами, то для работы с сайтом необходимо создать нового пользователя. Под root работать нельзя. Каждый раз, когда вы добавляете новых пользователей SSH в систему, вам нужно будет копировать обновленные файлы учетной записи в каталог /home/test/etc. Для создания и настройки пользователя SSH, выполните следующие шаги:
# useradd username
# passwd password
# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Настройку SSH для использования chroot jail легко произвести, выполнив следующие команды:
#define username to apply chroot jail to
Match User username
#specify chroot jail
ChrootDirectory /home/test
# systemctl restart sshd
или
# service sshd restart
Если при проверке работы chroot jail вы понимаете, что SSH-пользователь заблокирован и не может запускать какие-либо внешние команды (ls, date, uname и т.д.), а выполняет только bash и его встроенные команды, такие как pwd, history, echo и т.д.
Пример:
# ssh username@192.168.0.10
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ username
Создайте домашний каталог пользователя SSH и добавьте необходимые команды.
Создание каталогов выполняется с помощью команды вида mkdir имя_директории, где название команды является сокращением слов make directory.
# mkdir -p /home/test/home/username
# chown -R username:username /home/test/home/username
# chmod -R 0700 /home/test/home/username
# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Для того чтобы выполнить окончательную проверку с помощью sftp и проверить, работают ли только что установленные вами команды, выполните следующие шаги:
# systemctl restart sshd
или
# service sshd restart
При входе на сервер вы, как правило, попадаете в домашний каталог вашей учетной записи, отведенный для хранения файлов и создания директорий в каталог, требующий необходимой защиты и ограничения доступа к нему. Помимо создания chroot jail, существуют дополнительные эффективные меры безопасности, о которых мы поговорим в следующих разделах.
Если у вас есть маршрутизатор, вы можете использовать его для ограничения доступа программ к Интернету. Для этого вам необходимо войти в настройки вашего встроенного или установленного брандмауэра и добавить ограничения для каждой программы, которую вы хотите ограничить. А виртуальные частные сети VPN помогут расширить функционал брандмауэров. Об основных типах и принципах работы брандмауэров, вы можете узнать из нашей статьи Сетевая крепость: что такое брандмауэр.
Для тех, кто хочет оставаться незамеченным в сети и обезопасить свои данные. Выделенный IP и полная анонимность.
Linux имеет очень ограниченные права для обычного пользователя. Он может контролировать только свой каталог и открывать для чтения конкретные файлы из корня. При настройке ОС и решении различных проблем привилегии суперпользователя жизненно важны, поскольку они недоступны для изменения или установки программ.
В дистрибутивах Linux получение привилегий пользователя требует открытия доступа к root. Такие права позволяют выполнять необходимые действия в корневом каталоге, легко манипулируя системой, и расширять функциональность операционной системы. В таком случае необходима дополнительная защита системы от случайных изменений, которые могут внести другие пользователи компьютера. Использование специальных инструментов для снижения привилегий – это еще один эффективный способ защитить свою систему и сохранить ее безопасность.
В последнее время для запуска небезопасных программ всё чаще используются контейнеры, специально выделенные среды, напоминающие песочницы, однако представляющие собой более универсальную технологию. Для повышения уровня безопасности таких современных инструментов контейнеризации используются специальные механизмы, одним из которых является seccomp.
Seccomp (secure computing mode) – это режим безопасных вычислений, функция ядра Linux, для ограничения действий, доступных в контейнере (например, ограничение доступа вашего приложения).
Seccomp позволяет запускать контейнеры Docker с минимальными привилегиями, где важные системные вызовы блокируются профилем по умолчанию. Профиль seccomp по умолчанию отключает около 44 системных вызовов из 300+, находящихся в современных 64-битных Linux-системах, и обеспечивает разумный режим по умолчанию для запуска контейнеров с seccomp. Профиль seccomp по умолчанию в Docker представляет собой список разрешенных вызовов и блокирует отсутствующие в этом списке вызовы, например, манипуляции и функции на модулях ядра (create_module, delete_module, init_module или finit_module), использование контейнеров с ядром, которое не имеет имени (add_key) и др.
Профили seccomp по умолчанию – полезная инновация, поскольку она ограничивает возможности злоумышленников и снижает вероятность атак. Однако этого явно недостаточно, поскольку у многих незаблокированных проблем есть слабые места, а запретить все потенциально опасные вызовы просто невозможно. Несмотря на умеренную защиту, он обеспечивает широкую совместимость с различными приложениями.
SELinux – это не только система контроля доступа на уровне ядра, но и универсальное решение, способное эффективно справляться с массой актуальных задач. Работа SELinux основана на терминах:
SELinux быстро стал стандартом де-факто защищенной среды Linux и был включен в самые распространенные дистрибутивы RedHat Enterprise Linux, Fedora, Debian, Ubuntu.
SELinux имеет три основных режима работы:
Преимуществом такой жесткой политики SELinux является обеспечение наибольшего уровня информационной безопасности, однако настройка системы в таком режиме требует больших усилий системных администраторов, и существует риск ограничения доступа для пользователей, что является основными недостатками SELinux. В условиях работы с такими ограничениями и рисками, многие администраторы предпочитают просто отключать SELinux на своих рабочих станциях, чтобы избежать рисков и проблем.
Чтобы предотвратить это, для важных приложений и сервисов, таких как httpd, named, dhcpd и mysqld, определены настроенные целевые политики, которые препятствуют получению злоумышленниками доступа к ценным данным. Приложения, для которых не установлена политика, работают в домене unconfined_t и не защищены SELinux. Таким образом, правильно выбранные целевые политики позволяют обеспечить приемлемую безопасность, не создавая пользователю дополнительных проблем.
SELinux включает в себя все необходимые компоненты для защиты операционных систем Linux и приложений от несанкционированного доступа, но за счет своей комплексности кажется слишком сложным, что делает его непрактичным.
Какова же безопасность Linux вместе с AppArmor?
Третья модель безопасности Apparmor позволяет привязать функции контроля доступа к программам, а не к пользователям. AppArmor обеспечивает изоляцию с помощью профилей, загружаемых в ядро, как правило, при загрузке. Также эта система работает в смешанных режимах:
AppArmor дополняет традиционную модель дискреционного контроля доступа (DAC, Discretionary Access Control) Unix, обеспечивая обязательный контроль доступа (MAC, Mandatory Access Control) принципом действия на основе путей, основанной на архитектуре Linux Security Modules (LSM). Он включен в основное ядро Linux начиная с версии 2.6.36, а его разработка поддерживается Canonical с 2009 года.
AppArmor – эффективная и простая в использовании система безопасности приложений Linux. AppArmor активно защищает операционную систему и приложения от угроз, обеспечивая хорошее поведение и, предотвращая использование как известных, так и неизвестных недостатков приложений, в отличие от seccomp. А, для того чтобы облегчить разработку, AppArmor использует вложенные файлы и имеет более низкий барьер для входа, чем тот же SELinux, который крайне не практичен из-за своей сложности.
Большинство сервисов, работающих в системе, могут видеть структуру файловой системы сервера в целом. Это небезопасно для информации, которая хранится на сервере. С целью предотвращения кражи конфиденциальной информации и были разработаны методы chroot jail. Настройка chroot jail вместе с необходимыми ресурсами для запуска команд и процессов в новом корневом каталоге, а так же инновационные механизмы для безопасности ядра Linux помогают эффективно проверять и безопасно администрировать систему.