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

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте