Jump to content

# Firejail (Русский)

3 languages

- English
- 日本語
- 中文（简体）

From ArchWiki

Related articles

- Security
- AppArmor
- Bubblewrap

Firejail - это простая в использовании Setuid программа-песочница, снижающая риск нарушения безопасности, ограничивая среду запуска недоверенных приложений с помощью пространств имен Linux, seccomp-bpf и возможностей Linux.

Важно: Запуск недоверенного кода никогда не будет безопасным, песочница не может этого изменить.

## Установка

Установите либо пакет firejail, либо firejail-gitAUR. Также доступно приложение 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_mallocAUR это усиленная реализация распределителя 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

### Написание профиля

Основной процесс заключается в следующем:

1. Скопировать `/usr/share/doc/firejail/profile.template` в `/etc/firejail/` или `~/.config/firejail/` и переименовать его в `ProfileName.profile`, где ProfileName должен совпадать с названием запускаемого в песочнице приложения
2. Измените строку `include PROFILE.local` на `include ProfileName.local`
3. Постепенно комментируйте/раскомментируйте различные опции, проверяя на каждом этапе, что приложение работает в новой песочнице. Не меняйте порядок разделов в этом шаблоне.
4. Подробное объяснение возможных опций для профиля Firejail можно найти на странице руководства firejail-profile(5).
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 вам будет полезно следующее:

1. `firejail --debug $Program > $PathToOutputFile` дает подробное описание песочницы
2. `firejail --debug-blacklists $Program` и `firejail --debug-whitelists $Program` отображает каталоги и файлы из черного и белого списков для текущего профиля.
3. `firejail --debug-caps` выдает список заглушек, поддерживаемых текущей сборкой ПО Firejail. Это полезно при составлении белого списка заглушек.
4. `firejail --help` для полного списка параметров `--debug`
5. `firemon PID` следит за запущенным процессом. См. `firemon --help` для подробностей
6. Выполнение `sudo jailcheck` тестов, запущенных в песочнице. Смотрите страницу man jailcheck(1) для подробностей.
7. 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 WidthxHeight` можно установить в `/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` и добавьте в нее своего пользователя.

### Пути, содержащие пробелы

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

    /home/user/.moonchild productions

### Приватный режим

Firejail также включает одноразовый приватный режим, в котором не производится монтирование в chroots к вашему домашнему каталогу. При этом вы можете запускать приложения, не производя никаких изменений на диске. Например, чтобы запустить okular в приватном режиме, выполните следующее:

    $ firejail --seccomp --private okular

### Экспериментальные усовершенствованные инструменты

Некоторые разработчики Firejail обнаружили проблемы с инструментами, поставляемыми вместе с ним, и создали свои собственные, улучшенные версии.

Важно: Как указано в описании некоторых проектов, эти инструменты могут быть экспериментальными.

- firecfg.py, улучшенная версия `firecfg`.
- fjp, инструмент для взаимодействия с профилями Firejail.
- firejail-handler-http, помогающий правильно открывать HTTP(S) ссылки при работе приложений в песочнице.
- firejail-handler-extra, как и выше, но работает с другими протоколами.

## Устранение неисправностей

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

Category:

- Sandboxing (Русский)

Hidden categories:

- Pages or sections flagged with Template:Accuracy
- Pages or sections flagged with Template:Merge