Firejail — песочница для Linux, которая запускает приложение в отдельном наборе пространств имён, с урезанными возможностями и фильтром системных вызовов. Она помогает ограничить ущерб, если браузер, мессенджер или скачанная утилита окажутся скомпрометированы. Речь идёт о защите собственной системы: ниже только штатные механизмы ядра и настройка своих приложений.
Что именно изолирует Firejail
При запуске создаётся новое пространство монтирования: системные каталоги доступны только для чтения, а домашний каталог и /tmp остаются записываемыми. Дополнительно включаются пространства PID, UTS и, при необходимости, сети. Фильтр seccomp ограничивает набор системных вызовов, а caps.drop убирает привилегии root. AppArmor добавляет мандатный контроль доступа, если профиль загружен в ядро.
Firejail — SUID-программа: она запускается от root, строит песочницу и сразу сбрасывает привилегии. Это удобно, но означает, что ошибка в самом Firejail потенциально опасна. На многопользовательской машине доступ к утилите стоит ограничить, а обновления устанавливать без задержки. Для максимально рискованных задач правильнее виртуальная машина, а не песочница.
Установка
sudo apt install firejail firejail-profiles
sudo dnf install firejail
sudo pacman -S firejail
firejail --version
В Debian и Ubuntu профили могут идти отдельным пакетом. После установки проверьте, что бинарник имеет SUID-бит: ls -l /usr/bin/firejail должен показывать букву s в правах владельца. Если бит снят, песочница не сможет создать часть пространств имён.
Базовые запуски
firejail firefox
firejail --private firefox
firejail --net=none vlc
firejail --private=~/sandbox/firefox firefox
Первый вариант использует профиль из /etc/firejail, если он есть. Второй подменяет домашний каталог временной файловой системой: изменения исчезнут после закрытия, а существующие файлы не будут видны. Третий отключает сеть, оставляя только локальный интерфейс. Четвёртый делает домашний каталог постоянным, но изолированным в указанном месте; каталог для него создайте заранее.
Для сетевых приложений полезны —net=eth0 или —net=wlan0: создаётся отдельный сетевой стек, подключённый к выбранному интерфейсу. Опция —netfilter включает набор правил, запрещающих входящие соединения. Если приложению нужен только локальный сокет, хватит —net=none, но некоторые программы при этом падают: тогда попробуйте —protocol=unix.
Не путайте приватный каталог с резервной копией: всё, что нужно сохранить, копируйте наружу до закрытия окна. Для программ, которые пишут настройки только в домашний каталог, лучше —private=путь, иначе конфигурация будет теряться при каждом запуске.
Свой профиль
Пользовательские профили имеют приоритет над системными и лежат в ~/.config/firejail. Можно включить системный профиль и добавить исключения. Пример для браузера: разрешаем загрузки и профиль, запрещаем доступ к ключам и временным каталогам.
mkdir -p ~/.config/firejail
nano ~/.config/firejail/firefox.profile
firejail --profile=~/.config/firejail/firefox.profile firefox
firejail --debug firefox
include /etc/firejail/firefox.profile
whitelist ~/Downloads
whitelist ~/.mozilla
blacklist ~/.ssh
blacklist ~/.gnupg
private-tmp
nosound
nodvd
nonewprivs
caps.drop all
seccomp
Директива whitelist оставляет видимым только перечисленное, остальное скрывается. blacklist, наоборот, делает путь недоступным. private-tmp даёт временный /tmp, nosound отключает звук, nodvd — оптические приводы. nonewprivs запрещает повышение привилегий, caps.drop all убирает все capabilities, seccomp включает фильтр системных вызовов. Не добавляйте в один профиль взаимоисключающие правила: отладка займёт больше времени, чем выигрыш.
Готовый профиль можно собрать автоматически: firejail —build firefox запускает программу в мягком режиме и печатает список путей, к которым она обращалась. Результат — черновик, а не готовая защита: проверьте его вручную и уберите лишнее. Сохранить вывод можно через —build=firefox.profile.
Проверка изоляции
firejail --seccomp --caps.drop=all bash
grep -E "Seccomp|CapEff|NoNewPrivs" /proc/$$/status
firejail --private --net=none bash
ip addr show
В первом случае оболочка запускается с фильтром и без возможностей. Во втором проверьте, что в пространстве имён нет внешних адресов, а домашний каталог пуст. Выход из песочницы — обычный exit. Для наблюдения за запущенными экземплярами служат firejail —list, —tree и —top; последняя показывает потребление ресурсов в реальном времени.
Остановить зависшую песочницу можно по PID из списка: firejail —shutdown=1234. Команда —join=1234 открывает оболочку внутри уже работающей песочницы с теми же ограничениями. Это удобно для диагностики, но не даёт прав root и не снимает фильтры.
Интеграция с рабочим столом
Команда sudo firecfg создаёт символические ссылки в /usr/local/bin, и приложения из меню начинают запускаться через Firejail автоматически. Обратная операция — sudo firecfg —clean. Не включайте такую интеграцию вслепую: часть программ с собственными песочницами или установщиками может перестать работать. Сначала проверьте несколько ключевых приложений вручную.
Конфигурация самой песочницы находится в /etc/firejail/firejail.config. Флаг force-nonewprivs yes запрещает повышение привилегий после старта и закрывает часть рисков SUID. Однако с Chromium-подобными браузерами это может конфликтовать, если в системе отключены непривилегированные пользовательские пространства имён. Меняйте флаг осознанно и проверяйте браузер после изменения.
Диагностика
- Программа не запускается: запустите firejail —debug программа и посмотрите последние строки, затем проверьте без профиля через —noprofile.
- Нет звука: уберите nosound из профиля или проверьте доступ к PulseAudio и PipeWire.
- Не сохраняются файлы: добавьте нужный каталог в whitelist.
- Не работает сеть: проверьте —net=none и правила netfilter.
- Конфликт с собственной песочницей приложения: не вкладывайте одну песочницу в другую без необходимости.
Приложения Wayland могут не найти сокет композитора в приватном окружении. В таком случае разрешите доступ к каталогу XDG_RUNTIME_DIR через whitelist или запускайте приложение без приватного домашнего каталога. Для X11 надёжнее отдельный вложенный сервер Xephyr, чем прямой доступ к основному дисплею. После обновления приложения проверьте профиль заново: новые пути к кэшам и сокетам часто требуют дополнительных исключений.
Чек-лист
- Firejail установлен, SUID-бит на месте, версия известна.
- Для браузера и мессенджера есть проверенные профили.
- Сеть ограничена там, где она не нужна.
- Ключи, SSH и GPG скрыты от приложений, которым они не нужны.
- Обновления Firejail и профилей установлены.
Итог
Firejail снижает цену ошибки: даже если приложение попытается прочитать лишние файлы или выйти в сеть, песочница ограничит его. Он не заменяет виртуальную машину и не исправляет уязвимости ядра, зато быстро внедряется и почти не мешает работе. Начните с одного браузера, проверьте профиль на практике, а затем расширяйте список приложений.