125
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Утилита firejail — готовая песочница для ваших приложений

Время чтения 2 минуты
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
125
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Привет, вАЙТИ. Меня зовут Егор Орлов, я более 24 лет в ИТ, преподаю в СПбПУ.

Продолжая рассмотрение изолированных окружений, посмотрим на использование полностью готового решения для их создания — утилиту firejail.

Утилита firejail — готовая песочница для ваших приложений

О firejail

Firejail представляет собой готовый для использования инструмент запуска приложений внутри изолированной среды. Для этого «из коробки» она содержит более тысячи готовых профилей для изоляции приложений и позволяет создавать свои собственные профили. Работает на операционных системах на основе ядра Linux.

Для создания изолированных окружений firejail использует такие механизмы ядра Linux, как namespaces, cgroups и seccomp, рассмотренные в статье «Обзор механизмов организации изолированных окружений в Linux».

Типовым применением firejail является создание изолированных сред для запуска потенциально уязвимых сетевых приложений. Например, когда веб-браузер, работающий в изолированном окружении, используется для открытия сайта с вредоносным программным обеспечением, изолированное окружение предотвращает распространение действия вредоносного программного обеспечения на всю систему. Кроме веб-браузеров, firejail может использоваться для запуска клиентов электронной почты, мессенджеров и других сетевых приложений.

Установка firejail и firetools

Кроме собственно firejail, которая, как правило, содержится в одноименном пакете, интерес представляет пакет firetools, содержащий написанный с использованием библиотеки Qt5 графический интерфейс для управления firetools и его настройки.

В зависимости от используемого вами дистрибутива Linux команда установки будет выглядеть примерно так:

# apt install firejail firetools

или так

# dnf install  firejail firetools

После этого можно переходить к изучению и использованию firejail. 

Профили приложений

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

$ man 5 firejail-profile

По умолчанию песочница firejail использует хостовую файловую систему, то есть не производит chroot-изацию приложения в отдельном каталоге, как это было рассмотрено в этой статье. Вместо этого chroot создается поверх хостовой системы путем указания в профиле путевых имен, которые должны быть недоступны (blacklist) или доступны только в режиме чтения (read-only). 

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

Общесистемный каталог с профилями приложений находится по пути /etc/firejail. Посмотрим, сколько профилей приложений поставляется «из коробки»:

# ls /etc/firejail/*.profile | wc -l

1209

Кроме общесистемных профилей, пользователь может описывать свои собственные профили приложений. Для их размещения предназначен каталог:

~/.config/firejail

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

/etc/firejail/default.profile

Если запуск песочницы выполняется суперпользователем, то используется: 

/etc/firejail/server.profile

Эти профили содержат базовые ограничения и правила безопасности, но без специфики конкретных приложений.

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

/etc/firejail/firejail.users

По умолчанию запуск разрешен только суперпользователю.

Ручной запуск приложения в песочнице firejail

Пользователь может вручную запустить свое приложение в песочнице:

$ firejail <program>

В этом случае указанное приложение будет изолировано на основании профиля, который может находиться по следующим путям:

~/.config/firejail/<program>.profile

/etc/firejail/<program>.profile

Если профиль не найден по указанным путям, будет использован профиль приложения по умолчанию.

Можно явно указать, с каким профилем должно быть запущено приложение, указав имя профиля, которое также должно находиться по указанным выше путям. Как вариант, можно указать полный путь к профилю:

$ firejail --profile=profile_name <program>

$ firejail --profile=/etc/profile/filename.profile <program>

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

# firejail --list

# firejail --tree

Ручной запуск приложений в песочнице firejail предоставляет максимальную гибкость, так как параметры изоляции, отсутствующие в профиле приложения, можно дополнять через параметры командной строки. Например: 

$ firejail --seccomp --private <program>

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

Но при ручном запуске вопрос использования или неиспользования песочниц firejail и и параметров изоляции остается на усмотрение пользователей.    

Автоматический запуск приложений в песочнице

Автоматический режим навязывает заданным пользователям запуск определенных приложений посредством firejail.

Список приложений, для которых (при наличии их в системе) firejail будет использоваться автоматически, можно задать в файле:

/etc/firejail/firecfg.config

Для настройки автоматического запуска через командную строку приложений из этого списка через изоляцию необходимо набрать команду:

# firecfg

Эта команда создает символические ссылки в каталоге /usr/local/bin на исполняемый файл firejail, что обеспечивает запуск соответствующих приложений через него.

Для того чтобы данный метод запуска работал, необходимо, чтобы в пользовательском окружении переменная PATH содержала каталог /usr/local/bin до других каталогов поиска исполняемых файлов. Выполнить соответствующие корректировки под пользователем можно следующей установкой переменной:

PATH=/usr/local/bin:$PATH

Очистка созданных символических ссылок производится командой:

# firecfg --clean

Для того чтобы приложения при запуске через меню также запускались в песочнице, необходимо под пользователем выполнить команду:

$ firecfg --fix

Эта команда просматривает desktop-файлы приложений в каталоге: 

/usr/share/applications/*.desktop

И если находит там приложения, требующие изоляции (/etc/firejail/firecfg.config), то корректирует путь к исполняемому файлу и складывает исправленные desktop-файлы в директорию: 

~/.local/share/applications/

Таким образом, приложения, запускаемые через меню графических сред, также будут запускаться в изолированном окружении на основе профиля приложения.

В этой статье мы рассмотрели основы использования firejail для запуска приложения в песочнице. В следующей статье рассмотрим процесс создания и адаптации профиля приложения под свои задачи.

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники