
Пространства имён Linux и песочница seccomp-bpf
Firejail — это лёгкое средство безопасности, предназначенное для защиты Linux-системы путём создания ограниченного окружения для запуска (потенциально недоверенных) приложений.
Если точнее, это SUID-песочница, которая снижает риск нарушений безопасности за счёт использования пространств имён (namespaces) Linux, seccomp-bpf и возможностей (capabilities) Linux. Она позволяет процессу и всем его потомкам иметь собственное частное представление о глобально разделяемых ресурсах ядра, таких как сетевой стек, таблица процессов и таблица монтирования. Firejail может работать в окружении SELinux или AppArmor и интегрирован с контрольными группами Linux (Control Groups).
Написанный на C практически без зависимостей, этот программный продукт работает на любом Linux-компьютере с версией ядра 3.x или новее. Он может помещать в песочницу процессы любого типа: серверы, графические приложения и даже пользовательские сеансы входа в систему. Программа включает профили песочницы для ряда распространённых Linux-программ, таких как Mozilla Firefox, Chromium, VLC, Transmission и других.
Песочница лёгкая, накладные расходы невелики. Нет сложных конфигурационных файлов, которые нужно редактировать, нет открытых socket-соединений, нет работающих в фоне демонов. Все функции безопасности реализованы непосредственно в ядре Linux и доступны на любом Linux-компьютере.
См. SECURITY.md.
Поддерживаемые версии см. в SECURITY.md.
Примечание: версии из Debian stable и backports, скорее всего, устарели, поэтому в настоящее время мы рекомендуем либо скачать и установить .deb-пакет из последнего релиза:
Либо собрать из исходников.
Debian stable (bullseye): рекомендуем использовать пакет из backports.
Примечание: версии из дистрибутива и PPA, скорее всего, устарели, поэтому в настоящее время мы рекомендуем либо скачать и установить .deb-пакет из последнего релиза:
Либо собрать из исходников.
Примечание: рекомендация PPA относится в основном к самому firejail; устанавливать firetools и связанные с firejail инструменты непосредственно из дистрибутива вполне допустимо, если их нет в PPA, поскольку они обновляются реже.
Для Ubuntu 18.04+ и производных (таких как Linux Mint) пользователям настоятельно рекомендуется использовать PPA.
Как добавить PPA и установить из него:
sudo add-apt-repository ppa:deki/firejail
sudo apt-get update
sudo apt-get install firejail firejail-profiles
Причина: пакет firejail для Ubuntu 20.04 оставался уязвимым к CVE-2021-26910 в течение нескольких месяцев после того, как патч для него был опубликован на Launchpad:
См. также https://wiki.ubuntu.com/SecurityTeam/FAQ:
Какое программное обеспечение поддерживается командой безопасности Ubuntu?
Ubuntu в настоящее время разделена на четыре компонента: main, restricted, universe и multiverse. Все бинарные пакеты в main и restricted поддерживаются командой безопасности Ubuntu в течение всего срока поддержки релиза Ubuntu, тогда как бинарные пакеты в universe и multiverse поддерживаются сообществом Ubuntu.
Кроме того, версия из PPA, скорее всего, более свежая и содержит больше исправлений профилей.
Подробности см. в следующих обсуждениях:
Firejail доступен во многих дистрибутивах Linux:
За исключением вышеупомянутых исключений, если ваш дистрибутив предоставляет поддерживаемую версию firejail, в целом лучше устанавливать его из дистрибутива.
Версию можно проверить с помощью firejail --version после установки.
Вы также можете установить один из выпущенных пакетов.
Инструкции по сборке и установке текущей разрабатываемой версии из исходников.
Рекомендуется использовать приведённые ниже инструкции для конкретного дистрибутива, когда это применимо, поскольку они создают нативные пакеты, что упрощает интеграцию с остальной системой и управление пакетами.
Для остальных дистрибутивов см. общие инструкции.
См. также .gitlab-ci.yml о том, как выполняются сборки для конкретных дистрибутивов в CI.
Примечание: пакет AUR не поддерживается нами.
Установите firejail-git из AUR.
Пример:
yay -S firejail-git
Для Debian, Ubuntu и производных:
Примечание: любые флаги ./configure следует передавать скрипту mkdeb.sh (например, ./mkdeb.sh --enable-foo).
sudo apt-get update -qy
sudo apt-get install -qy \
git build-essential fakeroot lintian libapparmor-dev pkg-config gawk
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./mkdeb.sh &&
sudo dpkg -i ./*.deb &&
make installcheck
Для Fedora и производных:
Примечание: любые флаги ./configure следует передавать скрипту mkrpm.sh (например, ./platform/rpm/mkrpm.sh --enable-foo).
sudo dnf update -y
sudo dnf install -y rpm-build gcc make
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./platform/rpm/mkrpm.sh &&
sudo rpm -i ./*.rpm &&
make installcheck
Общие инструкции по сборке/установке:
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make -j "$(nproc)" &&
sudo make install-strip &&
make installcheck
В Debian/Ubuntu вам нужно будет установить git и gcc.
Чтобы собрать с поддержкой AppArmor (которая обычно используется в Debian, Ubuntu, openSUSE и производных), установите библиотеки разработки AppArmor и pkg-config и используйте опцию ./configure --enable-apparmor:
sudo apt-get install git build-essential libapparmor-dev pkg-config gawk
Чтобы собрать с поддержкой SELinux (которая обычно используется в Fedora, RHEL и производных), установите libselinux1-dev (libselinux-devel в Fedora) и используйте опцию ./configure --enable-selinux.
Подробная информация об использовании firejail из git доступна в вики.
Примечание: обязательно используйте полный путь к программе (например, firejail /usr/bin/firefox вместо firejail firefox), чтобы избежать потенциальных проблем firejail-in-firejail (см. #2877).
Чтобы запустить песочницу, добавьте firejail перед вашей командой:
firejail /usr/bin/firefox # запуск Mozilla Firefox
firejail /usr/bin/transmission-gtk # запуск Transmission BitTorrent
firejail /usr/bin/vlc # запуск VideoLAN Client
sudo firejail /etc/init.d/nginx start
Выполните firejail --list в терминале, чтобы вывести список всех активных песочниц. Пример:
$ firejail --list
1617:netblue:/usr/bin/firejail /usr/bin/firefox-esr
7719:netblue:/usr/bin/firejail /usr/bin/transmission-qt
7779:netblue:/usr/bin/firejail /usr/bin/galculator
7874:netblue:/usr/bin/firejail /usr/bin/vlc --started-from-file file:///home/netblue/firejail-whitelist.mp4
7916:netblue:firejail --list
Интегрируйте вашу песочницу в рабочий стол, выполнив следующие две команды:
firecfg --fix-sound
sudo firecfg
Первая команда исправляет некоторые ошибки, связанные с общей памятью/PID namespace в PulseAudio до версии 9. Вторая команда интегрирует Firejail в ваш рабочий стол. Для применения изменений PulseAudio потребуется выйти из системы и войти снова.
Запускайте свои программы привычным способом: меню менеджера рабочего стола, файловый менеджер, панель запуска приложений.
Интеграция применяется к любой программе, поддерживаемой Firejail по умолчанию. В текущей версии Firejail более 900 приложений по умолчанию, и это число растёт с каждым новым релизом.
Мы храним список приложений в src/firecfg/firecfg.config (/etc/firejail/firecfg.config после установки).
Большинство параметров командной строки Firejail можно передавать песочнице с помощью файлов профилей.
Профили для всех поддерживаемых приложений можно найти в etc/ (/etc/firejail/ после установки).
Мы также храним список исправлений профилей для предыдущих выпущенных версий в etc-fixes/.
Если вы поддерживаете дополнительные профили безопасности Firejail в публичном репозитории, пожалуйста, дайте нам ссылку:
Используйте этот issue для запроса новых профилей:
Вы также можете использовать этот инструмент, чтобы получить список системных вызовов, необходимых программе:
firecfg создаёт символические ссылки в /usr/local/bin, поэтому для полного удаления firejail перед удалением выполните следующее:
sudo firecfg --clean
Подробности см. в man firecfg.
Примечание: битые символические ссылки игнорируются при поиске исполняемого файла в $PATH, поэтому удаление без выполнения вышеуказанного не должно вызывать проблем.
LANDLOCK
Landlock — это модуль безопасности Linux, впервые представленный в
версии 5.13 ядра Linux. Он позволяет непривилегированным процессам
ограничивать свой доступ к файловой системе. После наложения эти
ограничения невозможно снять, и все дочерние процессы, созданные
процессами с ограничениями Landlock, наследуют эти ограничения.
Firejail поддерживает Landlock как дополнительную функцию
песочницы. С её помощью можно гарантировать, что помещённое в
песочницу приложение сможет получать доступ только к тем файлам и
каталогам, к которым ему было явно разрешено обращаться. Firejail
поддерживает заполнение набора правил как базовым набором правил
(см. --landlock), так и пользовательским набором правил.
Важные замечания:
- Процесс может установить набор правил Landlock, только если
он имеет либо CAP_SYS_ADMIN в своём эффективном наборе
возможностей, либо включено ограничение "No New Privileges".
Из-за этого включение функции Landlock также приведёт к тому,
что Firejail включит ограничение "No New Privileges",
независимо от профиля или параметра командной строки
--nonewprivs.
- Доступ к каталогу /proc управляется через параметр командной
строки --landlock.proc.
- Доступ к каталогу /etc разрешается автоматически. Чтобы
переопределить это, используйте параметр командной строки
--writable-etc. Вы также можете использовать параметр
--private-etc, чтобы ограничить доступ к каталогу /etc.
Чтобы включить самоограничение Landlock поверх текущих функций
безопасности Firejail, передайте флаг --landlock в командной строке
Firejail. Вы также можете использовать параметры --landlock.read,
--landlock.write, --landlock.special и --landlock.execute вместе с
--landlock или вместо него. Пример:
$ firejail --landlock --landlock.read=/media --landlock.proc=ro /usr/bin/mc
Небольшой инструмент для вывода статистики профилей. Скомпилируйте и установите как обычно. Инструмент устанавливается в каталог /usr/lib/firejail.
Запустите его для профилей в /etc/profiles:
$ /usr/lib/firejail/profstats /etc/firejail/*.profile
No include .local found in /etc/firejail/noprofile.profile
Warning: multiple caps in /etc/firejail/tidal-hifi.profile
Warning: multiple caps in /etc/firejail/tqemu.profile
Warning: multiple caps in /etc/firejail/transmission-daemon.profile
Warning: multiple caps in /etc/firejail/trivalent.profile
Stats:
profiles 1342
include local profile 1341 (include profile-name.local)
include globals 1307 (include globals.local)
blacklist ~/.ssh 1201 (include disable-common.inc)
seccomp 1213
capabilities 1335
noexec 1214 (include disable-exec.inc)
noroot 1105
memory-deny-write-execute 320
restrict-namespaces 1048
apparmor 869
private-bin 817
private-dev 1172
private-etc 842
private-cache 865
private-lib 86
private-tmp 1036
whitelist home directory 662
whitelist var 975 (include whitelist-var-common.inc)
whitelist run/user 1305 (include whitelist-runuser-common.inc
or blacklist ${RUNUSER})
whitelist usr/share 760 (include whitelist-usr-share-common.inc
net none 452
dbus-user none 766
dbus-user filter 206
dbus-system none 970
dbus-system filter 13
Quick Start |
Advanced Browser Security |
Tor Browser Security |