Firejail запускает приложения в режиме sandbox-изоляции, формируемом при помощи механизма пространств имён (namespaces) и фильтрации системных вызовов (seccomp-bpf) в Linux. Утилита оформлена в виде исполняемого SUID-файла, который может использоваться в качестве прослойки для запуска различных консольных, серверных и графических приложений. Профили изоляции системных вызовов подготовлены для большого числа популярных приложений, в том числе для Firefox, Chromium, VLC и Transmission. После запуска программа и все её дочерние процессы используют отдельные представления ресурсов ядра, таких как сетевой стек, таблица процессов и точки монтирования. Зависимые между собой приложения можно объединять в один общий sandbox. Программа написана на языке Си и может работать в любом дистрибутиве Linux с ядром старше 3.0.
В отличие от средств контейнерной изоляции firejail предельно прост в конфигурации и не требует подготовки системного образа – состав контейнера формируется на лету на основе содержимого текущей ФС и удаляется после завершения работы приложения. При желании, Firejail можно применять и для запуска контейнеров Docker, LXC и OpenVZ. Предоставляются гибкие средства задания правил доступа к файловой системе, можно определять к каким файлами и директориям разрешён или запрещён доступ, подключать для данных временные ФС (tmpfs), ограничивать доступа к файлам или директориям только на чтение, совмещать директории через bind-mount и overlayfs.
Также к программе создаётся простая графическая утилита для настройки, написанная на Qt, в которой можно просто и буквально на лету менять различные правила. Пакеты для различных дистрибутивов можно скачать на этой странице.
В Debian Firejail доступна с выпуска Debian 9 Stretch, который сейчас является тестируемым. Но не беда – я собрал программу и дли Debian 8, в моём репозитории. В Ubuntu 15.10 и 16.04 она доступна в штатных репозиториях. Итак, установка в Debian 8/LMDE 2:
sudo nano /etc/apt/sources.list
Подключаем репозиторий:
deb http://download.opensuse.org/repositories/home:/Sunderland93/Debian_8.0/ /
Скачиваем и устанавливаем ключ репозитория:
wget http://download.opensuse.org/repositories/home:Sunderland93/Debian_8.0/Release.key && sudo apt-key add – < Release.key
Обновляем список пакетов и устанавливаем Firejail:
sudo apt-get update
sudo apt install firejail
Всё. Теперь попробуем запустить, например Firefox, в изолированном контейнере:
firejail –seccomp firefox
В Firejail еще имеется специальный приватный режим. В этом режиме все файлы созданные приложением удаляются сразу-же после его закрытия. Войти в приватный режим очень просто:
firejail –seccomp –private firefox
По умолчанию, Firejail блокирует доступ только к некоторым особо серьёзным директориям (.gnupg, .ssh). Firefox, даже запущенный командой выше, будет иметь доступ ко всему домашнему каталогу. Чтобы заключить Firefox в его отдельном, личном каталоге (дабы не лез куда не просят), сделайте следующее:
Создадим каталог для файла конфигурации и “тюрьму” для Firefox:
mkdir ~/firefox
mkdir ~/.config/firejail -p
Скопируем конфиг:
cp /etc/firejail/firefox.profile ~/.config/firejail
И добавить параметр в этот конфиг:
echo “private ${HOME}/firefox” >> ~/.config/firejail/firefox.profile
Чтобы Firefox запускался по умолчанию в этой песочнице:
sudo su
echo “firejail –seccomp /usr/bin/firefox $@” > /usr/local/bin/firefox
chmod +x /usr/local/bin/firefox
Вот и всё. Такое можно проделывать и с другими приложениями. Информацию об опциях, как обычно, можно получить используя команду man:
man firejail