Firejail (Русский)

Related articles
Security
AppArmor
Bubblewrap
Firejail
- это простая в использовании
Setuid
программа-песочница, снижающая риск нарушения безопасности, ограничивая среду запуска недоверенных приложений с помощью пространств имен Linux, seccomp-bpf и возможностей Linux.
Важно
Запуск недоверенного кода никогда не будет безопасным, песочница не может этого изменить.
Установка
Установите
либо пакет
firejail
, либо
firejail-git
AUR
. Также доступно приложение GUI для работы с Firejail -
firetools
.
Примечание
Для информации об
user_namespaces(7)
поддерживаемом в ядрах Arch Linux, смотрите
Запуск приложений в песочнице
.
Firejail can use it even if it is disabled
.
Важно
Несмотря на то, что upstream постепенно переходит на белые списки (ср.
/etc/firejail/firefox.profile
), большинство поставляемых профилей по-прежнему в значительной степени опираются на черные списки. Это означает, что все, что явно не запрещено профилем, будет доступно приложению. Например, если у вас есть снимки btrfs, доступные в
/mnt/btrfs
, изолированной программе может быть запрещен доступ к
$HOME/.ssh
, но она все равно сможет получить доступ к
/mnt/btrfs/@some-snapshot/$HOME/.ssh
. Обязательно проведите аудит своих профилей; см.
#Профили тестирования
.
Конфигурация
Большинству пользователей не потребуется никакой пользовательской конфигурации и они могут перейти к следующим действиям
#Использование
.
Firejail использует профили для установки защиты безопасности для каждого из приложений, выполняемых внутри него - профили по умолчанию можно найти в
/etc/firejail/
application
.profile
. Если вам требуются пользовательские профили для приложений, не включенных в пакет, или вы хотите изменить значения по умолчанию, то можете поместить новые правила или копии значений по умолчанию в каталог
. Вы можете иметь несколько файлов пользовательских профилей для одного приложения, а также использовать один и тот же файл профиля для нескольких приложений.
Если у firejail нет профиля для конкретного приложения - он использует ограничительный общесистемный профиль по умолчанию. Это может привести к тому, что приложение не будет работать так, как нужно, без предварительного создания пользовательского профиля с меньшими ограничениями.
Обратитесь к
firejail-profile(5)
.
Использование
Чтобы выполнить приложение, используя защиту firejail по умолчанию для этого приложения (профиль по умолчанию), выполните следующее:
$ firejail
program_name
Разовые дополнения к профилю по умолчанию могут быть добавлены как опции командной строки (см.
firejail(1)
). Например, чтобы выполнить
okular
с защитой seccomp, выполните следующее:
$ firejail --seccomp okular
Для одной программы можно задать несколько профилей не по умолчанию. После создания файла профиля вы можете использовать его, выполнив следующие действия:
$ firejail --profile=
/absolute/path/to/profile program_name
Использование Firejail по-умолчанию
Чтобы использовать Firejail по умолчанию для всех приложений, для которых у него есть профили,
запустите инструмент firecfg с помощью sudo
:
$ sudo firecfg
Это создает символические ссылки в
/usr/local/bin
, указывающие на
/usr/bin/firejail
для программ, для которых Firejail имеет профили по умолчанию или созданные самостоятельно. Обратите внимание, что
firecfg(1)
только симлинкует программы, перечисленные в
/etc/firejail/firecfg.config
. Некоторые программы CLI отсутствуют, такие как:
tar
,
curl
и
git
. Им ссылки необходимо указывать вручную. О том, почему они не включены, смотрите
Профили не в firecfg #2507
.
firecfg
дополнительно добавляет текущего пользователя в базу данных доступа пользователей Firejail и проверяет файлы
/usr/share/applications/*.desktop
, если они содержат полный путь к соответствующему исполняемому файлу, удаляет полный путь и копирует их в
. Это гарантирует, что будут использованы симлинки в
/usr/local/bin
, что предотвращает обход Firejail. Если
sudo
не установлен в вашей системе, то следует выполнить:
# firecfg
от root и
$ firecfg --fix
как пользователь, чтобы исправить файлы
.desktop
.
Возможны случаи, когда потребуется вручную изменить строку
Exec=
в файле
.desktop
в
~/.local/share/applications/
для явного вызова Firejail.
Совет
pacman hook
можно использовать для автоматического запуска
firecfg
при выполнении операций
pacman
:
/etc/pacman.d/hooks/firejail.hook
[Trigger]
Type = Path
Operation = Install
Operation = Upgrade
Operation = Remove
Target = usr/bin/*
Target = usr/local/bin/*
Target = usr/share/applications/*.desktop

[Action]
Description = Configure symlinks in /usr/local/bin based on firecfg.config...
When = PostTransaction
Depends = firejail
Exec = /bin/sh -c 'firecfg >/dev/null 2>&1'
Чтобы вручную отобразить отдельные приложения, выполните:
# ln -s /usr/bin/firejail /usr/local/bin/
application
Примечание
/usr/local/bin
должен быть установлен перед
/usr/bin
и
/bin
в
переменной окружения
PATH
.
Убедитесь, что значение
PATH
изменено для корректного запуска вашего окружения рабочего стола или оконного менеджера. Например, при запуске i3 с помощью .xinitrc убедитесь в правильности установки
PATH
в ~/.profile. При использовании менеджера входа в систему ly в файле
/etc/ly/config.ini
есть возможность задать путь вручную.
Чтобы запустить символьную программу с пользовательскими настройками Firejail - просто добавьте префикс
firejail
, как показано в
#Конфигурация
.
Для демона вам нужно будет перезаписать файл systemd unit для этого демона, чтобы вызвать firejail, см.
Редактирование файлов юнитов
.
Символические ссылки на
gzip
и
xz
мешают
makepkg
возможности предварительной загрузки
libfakeroot.so
. См.
BBS#230913
.
Использование с hardened_malloc
Примечание
Некоторые программы не будут работать с использованием
libhardened_malloc.so
, например, PyCharm, Firefox.
hardened_malloc
AUR
это усиленная реализация распределителя glibc
malloc()
, изначально написанная для Android, но расширенная для использования на настольных компьютерах. Хотя он еще не интегрирован в glibc, его можно использовать выборочно с помощью
LD_PRELOAD
. Ниже показан правильный способ запуска приложения в firejail с использованием hardened_malloc. Чтобы сделать его постоянным, вам нужно создать собственную запись в
/usr/local/bin
для нужного приложения.
$ firejail --env=LD_PRELOAD='/usr/lib/libhardened_malloc.so' /usr/bin/firefox
В качестве альтернативы добавьте следующее в пользовательский профиль:
env LD_PRELOAD=/usr/lib/libhardened_malloc.so
Различные переменные окружения и настройки, которые можно использовать для настройки hardened_malloc, можно найти на его
github-странице
.
Включение поддержки AppArmor
Начиная с версии 0.9.60-1, Firejail поддерживает более прямую интеграцию с AppArmor через общий профиль AppArmor. Во время установки профиль
firejail-default
помещается в каталог
/etc/apparmor.d
, и его необходимо загрузить в ядро, выполнив следующую команду от root:
# apparmor_parser -r /etc/apparmor.d/firejail-default
Смотрите
firejail(1) § APPARMOR
.
Локальная настройка профиля apparmor поддерживается путем редактирования файла
/etc/apparmor.d/local/firejail-local
AppArmor уже включен для
большего количества
профилей Firejail. Есть несколько способов включить ограничение
AppArmor
поверх профиля безопасности Firejail:
Передайте флаг
--apparmor
в Firejail в командной строке, например,
.
Используйте пользовательский профиль и добавьте команду
--apparmor
.
Включите Apparmor глобально в
/etc/firejail/globals.local
и отключите по мере необходимости с помощью
ignore apparmor
в
/etc/firejail/
ProgramName
.local
.
Обратите внимание, что включение AppArmor вышеуказанными методами
всегда
означает, что используется
/etc/apparmor.d/firejail-default
. Если вы хотите использовать
конкретный
профиль AppArmor для приложения - вам нужно использовать упомянутую выше команду
ignore apparmor
. Однако это
не рекомендуется
, поскольку использование Firejail и AppArmor для одних и тех же приложений часто создает проблемы.
Проверка использования Firejail
$ firejail --list
Более полный результат дает
$ firejail --tree
Создание пользовательских профилей
Белые и черные списки
Черные списки
активно используются в различных
/etc/firejail/*.inc
файлах, которые включены в большинство профилей. Черные списки бывают разрешающими:
Запретить доступ к директории или файлу и разрешить все остальное:
blacklist <directory/file>
Запретить/отменить/игнорировать черный список каталога или файла, уже внесенного в черный список, например, в файле
*.inc
:
noblacklist <directory/file>
Порядок их появления в профиле важен: директивы
noblacklist
должны быть добавлены
выше
директив
blacklist
.
Белые списки
блокируют все, что не включено в
явный
белый список. Их не следует использовать в профилях приложений, которым нужен доступ к произвольным местам (например, текстовые редакторы, просмотрщики/редакторы изображений).
Разрешить доступ к каталогу или файлу и запретить все остальное:
whitelist <directory/file>
Запретить/отменить/игнорировать белый список каталога или файла, уже включенного в белый список, например, в файле
*.inc
:
nowhitelist <directory/file>
Порядок их появления в профиле важен: директивы
nowhitelist
должны быть добавлены
выше
директив
whitelist
.
Белый список всегда составляется перед черным списком. Как уже говорилось, директива
белого списка
заносит в черный список все остальное. Поэтому директива
blacklist
является запасным вариантом, если нет директив
whitelist
или если директива
whitelist
слишком разрешающа.
Директивы
(no)blacklist
и
(no)whitelist
часто используются в комбинации. Пример:
/etc/firejail/disable-programs.inc
(который включается во все профили) содержит директиву:
blacklist ${HOME}/.mozilla
чтобы заблокировать доступ к этой директории для всех приложений, находящихся в песочнице Firejail.
/etc/firejail/firefox.profile
должен отключить эту директиву
и
должен добавить директиву
белого списка
, чтобы разрешить доступ к этому каталогу (поскольку профиль Firefox является профилем с белым списком):
noblacklist ${HOME}/.mozilla
whitelist ${HOME}/.mozilla
Написание профиля
Основной процесс заключается в следующем:
Скопировать
/usr/share/doc/firejail/profile.template
в
/etc/firejail/
или
~/.config/firejail/
и переименовать его в
ProfileName
.profile
, где
ProfileName
должен совпадать с названием запускаемого в песочнице приложения
Измените строку
include PROFILE.local
на
include ProfileName.local
Постепенно комментируйте/раскомментируйте различные опции, проверяя на каждом этапе, что приложение работает в новой песочнице. Не меняйте порядок разделов в этом шаблоне.
Подробное объяснение возможных опций для профиля Firejail можно найти на странице руководства
firejail-profile(5)
.
Проверьте профиль на наличие дыр в безопасности, смотрите
#Профили тестирования
.
Если вы хотите создать профиль с белым списком (т.е. профиль, который содержит директивы
whitelist
), вы можете
создать белый список
разрешенных мест, выполнив команду
$ firejail --build
application
Помните, что профиль с белым списком проблематичен для приложений, которым требуется доступ к произвольным местам (например, текстовые редакторы или файловые менеджеры).
Примечание
Идея состоит в том, чтобы быть как можно более ограничительным, сохраняя при этом удобство использования. Это может потребовать пожертвовать потенциально опасной функциональностью и изменить привычки беспечной работы.
По умолчанию фильтры seccomp работают по черному списку (который можно найти в
/usr/share/doc/firejail/syscalls.txt
). Можно использовать
seccomp.keep
для создания пользовательского белого списка фильтров для приложения.
[1]
. Удобным способом автоматизации этих шагов является выполнение
/usr/lib/firejail/syscalls.sh
. Если приложение все еще не работает из-за отсутствия syscalls, следует следовать инструкциям в нижней части
/usr/share/doc/firejail/syscalls.txt
.
Постоянная локальная адаптация
Стандартная схема профиля включает возможность постоянной локальной настройки посредством включения файлов
.local
[2]
. В основном, каждый официально поддерживаемый профиль содержит строки
include ProgramName.local
и
include globals.local
. Эти файлы
*.local
могут быть расположены в
/etc/firejail
или в
~/.config/firejail
. Поскольку порядок старшинства определяется тем, какой из них читается первым, это дает очень мощный способ локальной настройки.
Например, по ссылке
этот вопрос по firejail
для глобального включения Apparmor и отключения соединения с интернетом, можно просто создать/отредактировать
/etc/firejail/globals.local
, включив в него строки
# включить Apparmor и отключить Интернет глобально
net none
apparmor
Затем, чтобы позволить, например, "curl" подключаться к интернету, но при этом сохранить ограничение apparmor, нужно создать/отредактировать
/etc/firejail/curl.local
, включив в него эти строки.
# разрешить доступ в интернет для curl
ignore net
Поскольку
curl.local
читается раньше
globals.local
,
ignore net
отменяет
net none
, и, в качестве бонуса, вышеуказанные изменения будут сохраняться в будущих обновлениях.
Профили тестирования
Для тестирования и аудита профиля Firejail вам будет полезно следующее:
firejail --debug $Program > $PathToOutputFile
дает подробное описание песочницы
firejail --debug-blacklists $Program
и
firejail --debug-whitelists $Program
отображает каталоги и файлы из черного и белого списков для текущего профиля.
firejail --debug-caps
выдает список заглушек, поддерживаемых текущей сборкой ПО Firejail. Это полезно при составлении
белого списка заглушек
.
firejail --help
для полного списка параметров
--debug
firemon PID
следит за запущенным процессом. См.
firemon --help
для подробностей
Выполнение
sudo jailcheck
тестов, запущенных в песочнице. Смотрите страницу man
jailcheck(1)
для подробностей.
checksec
также могут быть полезны для проверки того, какие стандартные средства безопасности используются
Firejail с Xorg
The factual accuracy of this article or section is disputed.
Reason:
Почему для песочницы X11 требуется DNS? (Discuss in
Talk:Firejail (Русский)
)
На
Xorg
любая программа может отображать весь ввод с клавиатуры и записывать все экраны. Цель песочницы X11 - ограничить такое поведение, что особенно проблематично для сложных программ, работающих с потенциально вредоносным вводом, таких как браузеры.
Xephyr
и
Xpra
позволяют использовать "песочницу" Xorg. Хотя Xpra обеспечивает полную поддержку буфера обмена, рекомендуется использовать Xephyr из-за очень заметного и постоянного лага при работе со вложенными сессиями X11.
Для полной настройки с (не идеальной) поддержкой буфера обмена (буфер обмена по-прежнему всегда общий), смотрите
Руководство Gentoo от Sakaki
, особенно
раздел о буфере обмена и автоматическом масштабировании
.
В качестве альтернативы, если поддержка буфера обмена не нужна, но нужно управлять окнами, установите отдельный
оконный менеджер
, например
Openbox
.
xephyr-screen
Width
x
Height
можно установить в
/etc/firejail/firejail.config
, где
Width
и
Height
указаны в пикселях и основаны на разрешении вашего экрана.
Чтобы открыть песочницу:
$ firejail --x11 --net=
device
openbox
device
- это ваш активный
сетевой интерфейс
, необходимый для обеспечения работы DNS. Затем щелкните правой кнопкой мыши и выберите приложения для запуска.
Примечание
Если вы используете
Unbound
,
dnsmasq
,
Pdnsd
или любой другой локальный резолвер на 127.0.0.1, то должны оставить
--net=
device
без команды, так как DNS должен работать автоматически.
Более простое руководство см. на
сайте Firejail Wordpress
.
Согласно руководству:
Песочница заменяет обычный сервер X11 на сервер Xpra или Xephyr. Это предотвращает доступ регистраторов клавиатуры X11 и утилит для снятия скриншотов к основному серверу X11.
Обратите внимание, что утверждение:
Единственный способ отключить абстрактный сокет
@/tmp/.X11-unix/X0
- это использование сетевого пространства имен. Если по каким-либо причинам вы не можете использовать сетевое пространство имен, абстрактный сокет все равно будет виден внутри песочницы. Хакеры могут подключить к этому сокету программы кейлоггера и снятия скриншотов.
неправильно,
xserverrc
может быть отредактирован на
-nolisten local
, что отключает абстрактные сокеты X11 и помогает изолировать его.
Песочница для браузера
Openbox
может быть настроен на запуск определенного браузера при старте.
program
.profile
- это соответствующий профиль, содержащийся в
/etc/firejail
, а
--startup "
command
- это командная строка, используемая для запуска программы. Например, чтобы запустить Chromium в песочнице:
$ firejail --x11 --profile=/etc/firejail/chromium.profile openbox --startup "chromium"
Советы и рекомендации
Усиление Firejail
Риск безопасности, связанный с тем, что Firejail является исполняемым файлом SUID, может быть уменьшен путем добавления строки
force-nonewprivs yes
в
/etc/firejail/firejail.config
. Однако это может нарушить работу определенных приложений. На Arch Linux VirtualBox больше не запускается. С ядром
linux-hardened
затронуты также Wireshark и браузеры на базе Chromium.
Дополнительные меры защиты включают создание специальной группы firejail с добавлением пользователя в эту группу и изменение файлового режима для исполняемого файла firejail. Подробности см. на сайте
здесь
.
Совет
вы можете добавить хук pacman для автоматической смены владельца и режима firejail:
/etc/pacman.d/hooks/firejail-permissions.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = firejail
[Action]
Depends = coreutils
Depends = bash
When = PostTransaction
Exec = /usr/bin/sh -c "chown root:firejail /usr/bin/firejail && chmod 4750 /usr/bin/firejail"
Description = Setting /usr/bin/firejail owner to "root:firejail" and mode "4750"
Обязательно создайте группу
firejail
и добавьте в нее своего пользователя.
Пути, содержащие пробелы
Если вам нужно сослаться, внести каталог в белый или черный список в пользовательском профиле, например, с помощью
palemoon
AUR
, вы должны сделать это, используя абсолютный путь, без инкапсуляции или экранирования:
/home/user/.moonchild productions
Приватный режим
Firejail также включает одноразовый приватный режим, в котором не производится монтирование в chroots к вашему домашнему каталогу. При этом вы можете запускать приложения, не производя никаких изменений на диске. Например, чтобы запустить okular в приватном режиме, выполните следующее:
$ firejail --seccomp --private okular
Экспериментальные усовершенствованные инструменты
Некоторые разработчики Firejail обнаружили проблемы с инструментами, поставляемыми вместе с ним, и создали свои собственные, улучшенные версии.
Важно
Как указано в описании некоторых проектов, эти инструменты могут быть экспериментальными.
firecfg.py
, улучшенная версия
firecfg
.
fjp
, инструмент для взаимодействия с профилями Firejail.
firejail-handler-http
[
устаревшая ссылка
2025-08-15 ⓘ]
, помогающий правильно открывать HTTP(S) ссылки при работе приложений в песочнице.
firejail-handler-extra
[
устаревшая ссылка
2025-08-15 ⓘ]
, как и выше, но работает с другими протоколами.
Устранение неисправностей
Firejail может быть трудно отлаживать. Симптомы неправильной или иной неподходящей настройки варьируются от случайных сбоев сегментации и зависаний приложений до простых сообщений об ошибках.
Некоторые приложения сложнее поместить в песочницу, чем другие. Например, приложения
web browsers
и
Electron
, как правило, нуждаются в более тщательном поиске неисправностей, чем другие, поскольку многое может пойти не так. Очень важно сначала проверить
FAQ
и
открытые ошибки
, так как отладка может занять довольно много времени.
Совет
Также смотрите
wiki
, особенно страницу
отладка Firejail
.
Удаление символических ссылок Firejail
Чтобы удалить созданные Firejail символические ссылки (например, сбросить на значения по умолчанию):
# firecfg --clean
Если вы не хотите использовать Firejail для определенного приложения (например, потому что предпочитаете ограничиться AppArmor), то придется вручную удалить соответствующую символическую ссылку:
# rm /usr/local/bin/
application
Поскольку последующее выполнение
firecfg
снова добавит удаленные симлинки - соответствующие приложения должны быть закомментированы в
/etc/firejail/firecfg.config
.
Проверьте, все ли остатки
Desktop entries (Русский)
все еще отменяются Firejail.
PulseAudio
Примечание
Использование PulseAudio версии 9.0 или более поздней должно устранить эту проблему.
Если Firejail вызывает проблемы с
PulseAudio
при работе с приложениями в "песочнице"
[3]
, можно воспользоваться следующей командой:
$ firecfg --fix-sound
Эта команда создает пользовательский файл
~/.config/pulse/client.conf
для
текущего
пользователя с
enable-shm = no
и возможными другими обходными путями.
hidepid
Если в системе используется
параметр ядра
hidepid
, Firemon может быть запущен только от имени root. Это, в частности, приведет к проблемам с некорректным отображением в графическом интерфейсе Firetools параметров "Capabilities", "Protocols" и состояния "Seccomp"
[4]
.
Проприетарные драйверы Nvidia
Некоторые пользователи сообщают о проблемах при использовании Firejail и проприетарных графических драйверов от
NVIDIA (Русский)
(например,
[5]
,
[6]
или
[7]
). Часто проблему можно решить, отключив опцию
noroot
Firejail в файле профиля приложения.
Параметр --net и Linux kernel >=4.20.0
Существует ошибка в firejail 0.5.96 с linux >= 4.20.0, см.
[8]
и
[9]
.
Пример сообщения об ошибке:
$ firejail --noprofile --net=eth0 ls
Parent pid 8521, child pid 8522
Error send: arp.c:182 arp_check: Invalid argument
Error: proc 8521 cannot sync with peer: unexpected EOF
Peer 8522 unexpectedly exited with status 1
Warning: Cannot confine the application using AppArmor
This article or section is a candidate for merging with
#Enable AppArmor support
.
Notes:
Требование включить AppArmor должно быть явно выражено в предыдущем тексте. (Discuss in
Talk:Firejail (Русский)
)
Для некоторых приложений (например,
Firefox
) запуск с Firejail может привести к появлению предупреждений типа:
Warning: Cannot confine the application using AppArmor.
Maybe firejail-default AppArmor profile is not loaded into the kernel.
As root, run "aa-enforce firejail-default" to load it.
При выполнении предложенной команды вы можете увидеть:
ERROR: Cache read/write disabled: interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.)
Это означает, что
AppArmor
не включен в качестве параметра ядра, поэтому его необходимо установить в соответствии с
AppArmor#Installation
.
/usr/bin/patch: **** Can't open patch file
Это означает, что
PKGBUILD
использует
patch
с аргументом
-i
, поэтому необходимо создать белый список для
$SRCDEST
в
/etc/makepkg.conf
.
Создайте
переопределение
patch.local
со значением вашего
$SRCDEST
:
whitelist
/path/to/makepkg/sources
.
Изменение
PKGBUILD
на использование
stdin
также работает:
patch -p1 < ../
file.patch
Зависание демонизированных/фоновых процессов
Существует
известная проблема
, не позволяющая процессам демонизироваться. В настоящее время не существует решения этой проблемы, за исключением отказа от использования Firejail в качестве "песочницы" для данного приложения. Поскольку это ошибка внутри Firejail - никакие настройки не могут решить эту проблему. К счастью, приложения, упомянутые в проблеме, обычно не имеют большой уязвимости, поэтому риск их работы без "песочницы" сравнительно невелик.
Смотрите также
Страница проекта Firejail на GitHub