Блог и Новости is*hosting - Хостинг-провайдер Нового Поколения

Как защитить данные сервера при помощи Chroot Jail

Written by Команда is*hosting | 20.03.2024 23:00:00

Администрируя систему компьютера, вам иногда необходимо создать новое окружение, отдельное от основной системы, где пользователь будет видеть только определенные файлы, сможет создать тестовую среду для программ или скриптов, восстановить систему или переустановить загрузчик. Создания такого окружения, называемого chroot jail, помогает выполнять определенные задачи вне основной системы для ее безопасности. Что такое chroot jail, как и для чего ее создают, какие еще используются дополнительные, методы безопасности мы узнаем в нашей сегодняшней статье.

Что такое chroot-тюрьма и для чего они используются

Chroot (образовано от фразы «change root», что означает «изменить корень») – это команда в Unix-like системах, которая изменяет видимый корневой каталог на указанный пользователем.

Chroot Jail (Chroot-тюрьма) процесс помещения пользователя в поддельный корневой каталог (в тюрьму), который создается намеренно, для того чтобы пользователь имел доступ к определенным командам и разрешениям.

Каковы цели использования chroot-тюрьмы?

Chroot тюрьма используется для создания небольшой песочницы для начала процесса (прим.: тестирование программ или скриптов, восстановление системного пароля, и т.п.). Это означает, что процесс не может злонамеренно изменять информацию за пределами предписанного дерева каталогов, чтоб избежать сбоя всей системы.

Chroot-тюрьмы также могут использоваться для замены виртуальных машин. Виртуализация на уровне ядра использует меньше ресурсов, чем виртуальные машины. Благодаря этому методу пользователи могут создавать несколько отдельных экземпляров в одной системе.

Настройка Chroot Jail

Для настройки chroot jail существуют определенные условия:

  • Система под управлением операционной системы Linux или Unix.
  • Учетная запись пользователя с привилегиями уровня sudo.
  • Доступ к терминалу/командной строке.

Все команды запускаются от имени пользователя root. Используйте команду sudo, если вы вошли на сервер как обычный пользователь.

Создать Chroot-тюрьму для SSH

Иногда возникают такие ситуации, когда необходимо разрешить ограниченный доступ пользователям по протоколу ssh. Например, пользователь хостинга может потребовать возможности внесения исправлений непосредственно на сервере или загрузить контент посредством безопасных протоколов. В таких случаях ради соблюдения мер безопасности правильно будет создать chroot-тюрьму для SSH, предоставив права доступа пользователям только к определенным директориям. 

Для того чтобы создать новый корневой каталог chroot-тюрьму для SSH, используя механизм chroot, выполните следующие шаги:

  1. Вызовите командную строку, нажав Windows + R.
  2. В появившемся диалоговом окне введите cmd.
  3. Введите в командной строке: # mkdir -p /home/test
  4. Определите необходимые файлы в соответствии с sshd_config. После аутентификации параметр ChrootDirectory определяет путь к каталогу, в котором будет выполняться перенаправление chroot. Каталог должен включать файлы и каталоги, необходимые для поддержки сеанса пользователя. Для интерактивного сеанса требуется как минимум оболочка, общие sh и базовые узлы /dev, такие, как устройства null, zero, stdin, stdout, stderr и tty:

    # ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
  5. Как показано ниже, используйте команду mknod для создания файлов /dev. В следующем примере команда -m используется для предоставления прав доступа к файлу, где c означает символьный файл, а два числа указывают на старший и младший номера файлов:

    # 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

  6. Установите соответствующее разрешение для chroot jail. Обратите внимание, что chroot jail, его подкаталоги и подфайлы должны принадлежать пользователю root, а не любой другой группе или пользователю:

    # chown root:root /home/test

    # chmod 0755 /home/test

    # ls -ld /home/test

Настройка интерактивной оболочки для SSH Chroot Jail

После создания пути к каталогу, в котором будет производиться перенаправление chroot, необходимо настроить интерактивную оболочку для SSH Chroot Jail.

Для начала создайте поддельную копию корневого каталога, а затем переместите некоторые двоичные файлы, такие как bash и ls, из каталога /bin/ в новый корневой каталог. Для этого выполните следующие шаги:

  1. Создайте каталог bin. Затем скопируйте файлы /bin/bash в каталог bin следующим образом: 

    # mkdir -p /home/test/bin

    # cp -v /bin/bash /home/test/bin/

  2. Определите общие библиотеки, необходимые для bash, как показано ниже, и скопируйте их в каталог lib:

    # 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/

Создание и настройка пользователя SSH

Если на площадке работает root-пользователь со своими доступами, то для работы с сайтом необходимо создать нового пользователя. Под root работать нельзя. Каждый раз, когда вы добавляете новых пользователей SSH в систему, вам нужно будет копировать обновленные файлы учетной записи в каталог /home/test/etc. Для создания и настройки пользователя SSH, выполните следующие шаги:

  1. Создайте пользователя SSH с помощью команды useradd и установите безопасный пароль для пользователя:

    # useradd username

    # passwd password

  2. Создайте каталог общих конфигураций chroot jail /home/test/etc и скопируйте обновленные файлы учетных записей (/etc/passwd и /etc/group) в этот каталог следующим образом:

    # mkdir /home/test/etc

    # cp -vf /etc/{passwd,group} /home/test/etc/

Настройте SSH для использования Chroot Jail

Настройку SSH для использования chroot jail легко произвести, выполнив следующие команды:

  1. Откройте файл sshd_config:

    # vi /etc/ssh/sshd_config
  2. Добавьте/измените строки ниже в файле:

    #define username to apply chroot jail to

    Match User username

    #specify chroot jail

    ChrootDirectory /home/test

  3. Сохраните файл, выйдите и перезапустите службы SSHD:

    # systemctl restart sshd

    или

    # service sshd restart

Создайте домашний каталог пользователя SSH и добавьте команды Linux

Если при проверке работы 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.

  1. Для создания домашнего каталога для пользователя SSH, выполните следующие команды:

    # mkdir -p /home/test/home/username

    # chown -R username:username /home/test/home/username

    # chmod -R 0700 /home/test/home/username

  2. Установите несколько пользовательских команд, таких как ls, date, mkdir в каталог bin:

    # cp -v /bin/ls /home/test/bin/

    # cp -v /bin/date /home/test/bin/

    # cp -v /bin/mkdir /home/test/bin/

  3. Проверьте общие библиотеки на наличие команд из предыдущего пункта и переместите их в каталог chrooted jail libraries:

    # 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 с помощью Chroot Jail

Для того чтобы выполнить окончательную проверку с помощью sftp и проверить, работают ли только что установленные вами команды, выполните следующие шаги:

  1. Добавьте следующую строку в файл /etc/ssh/sshd_config:

    #Enable sftp to chrooted jail

    ForceCommand internal-sftp
  2. Сохраните файл и выйдите. Затем перезапустите службы SSHD:

    # systemctl restart sshd

    или

    # service sshd restart

  3. Проверьте с помощью SSH (В результате Вы получите сообщение об ошибке):

    # ssh username@192.168.0.10
  4. Также попробуйте использовать SFTP следующим образом:

    # sftp username@192.168.0.10

Дополнительные методы безопасности

При входе на сервер вы, как правило, попадаете в домашний каталог вашей учетной записи, отведенный для хранения файлов и создания директорий в каталог, требующий необходимой защиты и ограничения доступа к нему. Помимо создания chroot jail, существуют дополнительные эффективные меры безопасности, о которых мы поговорим в следующих разделах.

Ограничение доступа к сети с помощью брандмауэров

Если у вас есть маршрутизатор, вы можете использовать его для ограничения доступа программ к Интернету. Для этого вам необходимо войти в настройки вашего встроенного или установленного брандмауэра и добавить ограничения для каждой программы, которую вы хотите ограничить. А виртуальные частные сети VPN помогут расширить функционал брандмауэров. Об основных типах и принципах работы брандмауэров, вы можете узнать из нашей статьи Сетевая крепость: что такое брандмауэр.

Персональный VPN

Для тех, кто хочет оставаться незамеченным в сети и обезопасить свои данные. Выделенный IP и полная анонимность.

Подробнее

Использование возможностей Linux для снижения привилегий

Linux имеет очень ограниченные права для обычного пользователя. Он может контролировать только свой каталог и открывать для чтения конкретные файлы из корня. При настройке ОС и решении различных проблем привилегии суперпользователя жизненно важны, поскольку они недоступны для изменения или установки программ.

В дистрибутивах Linux получение привилегий пользователя требует открытия доступа к root. Такие права позволяют выполнять необходимые действия в корневом каталоге, легко манипулируя системой, и расширять функциональность операционной системы. В таком случае необходима дополнительная защита системы от случайных изменений, которые могут внести другие пользователи компьютера. Использование специальных инструментов для снижения привилегий – это еще один эффективный способ защитить свою систему и сохранить ее безопасность.

Seccomp

В последнее время для запуска небезопасных программ всё чаще используются контейнеры, специально выделенные среды, напоминающие песочницы, однако представляющие собой более универсальную технологию. Для повышения уровня безопасности таких современных инструментов контейнеризации используются специальные механизмы, одним из которых является 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 основана на терминах:

  1. Домен – список действий, которые могут выполняться (по отношению к процессам).
  2. Роль – список доменов, которые могут быть применены. 
  3. Тип – список действий, которые могут выполняться (по отношению к каталогам и файлам).
  4. Контекст безопасности – роли, типы и домены.

SELinux быстро стал стандартом де-факто защищенной среды Linux и был включен в самые распространенные дистрибутивы RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux имеет три основных режима работы:

  • Enforcing (по умолчанию). Блокируются все действия, кроме разрешенных, а попытки запретных действий фиксируются в журнале. Пользователь получает только те привилегии, которые необходимы для работы. Enforcing – это строгий режим, который можно заменить на другие два варианта.
  • Permissive. Нарушения также фиксируются в журнале, но не блокируются.
  • Disabled. Системы принудительного контроля доступа отключена.

Преимуществом такой жесткой политики SELinux является обеспечение наибольшего уровня информационной безопасности, однако настройка системы в таком режиме требует больших усилий системных администраторов, и существует риск ограничения доступа для пользователей, что является основными недостатками SELinux. В условиях работы с такими ограничениями и рисками, многие администраторы предпочитают просто отключать SELinux на своих рабочих станциях, чтобы избежать рисков и проблем.

Чтобы предотвратить это, для важных приложений и сервисов, таких как httpd, named, dhcpd и mysqld, определены настроенные целевые политики, которые препятствуют получению злоумышленниками доступа к ценным данным. Приложения, для которых не установлена политика, работают в домене unconfined_t и не защищены SELinux. Таким образом, правильно выбранные целевые политики позволяют обеспечить приемлемую безопасность, не создавая пользователю дополнительных проблем.

SELinux включает в себя все необходимые компоненты для защиты операционных систем Linux и приложений от несанкционированного доступа, но за счет своей комплексности кажется слишком сложным, что делает его непрактичным.

AppArmor

Какова же безопасность Linux вместе с AppArmor? 

Третья модель безопасности Apparmor позволяет привязать функции контроля доступа к программам, а не к пользователям. AppArmor обеспечивает изоляцию с помощью профилей, загружаемых в ядро, как правило, при загрузке. Также эта система работает в смешанных режимах: 

  • Enforce. Работа в режиме принудительного исполнения: ядро обеспечивает соблюдение правил, содержащихся в файле профиля. Нарушения не допускаются, и соответствующая запись вносится в учетную запись.
  • Complain. Работа в режиме предупреждений: регистрирует нарушения, не блокируя сами действия.

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 помогают эффективно проверять и безопасно администрировать систему.