Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/website/content/ru/status/report-2026-01-2026-03/appjail.adoc
18096 views
=== AppJail, AppScripts и песочница для X11-приложений

Ссылки: +
link:https://github.com/DtxdF/AppJail[AppJail на GitHub] URL: link:https://github.com/DtxdF/AppJail[] +
link:https://github.com/DtxdF/appscript[AppScript на GitHub] URL: link:https://github.com/DtxdF/appscript[] +
link:https://github.com/DtxdF/x11appjail[x11appjail на GitHub] URL: link:https://github.com/DtxdF/x11appjail[] +

Контакт: Jesús Daniel Colmenares Oviedo <[email protected]>

**AppJail** — это open-source фреймворк под лицензией BSD-3, полностью написанный на POSIX-совместимом shell и C, предназначенный для создания изолированных, переносимых и простых в развёртывании окружений с использованием клеток (jail) во FreeBSD, которые ведут себя как приложения.

**AppScript** — это очень лёгкий и простой в использовании инструмент для создания самодостаточных исполняемых файлов.

Виртуализация на уровне операционной системы не так совершенна, как виртуализация на уровне оборудования: уязвимость в устройстве, не скрытом внутри клетки, может создать угрозу для хоста, но при правильной настройке это гораздо лучше, чем запуск приложения напрямую на хосте.

Клетки — это реализация виртуализации на уровне ОС для FreeBSD.
С помощью клетки можно легко ограничить множество аспектов: link:https://appjail.readthedocs.io/en/latest/limits/[ограничение ресурсов], link:https://appjail.readthedocs.io/en/latest/DEVFS/[ограничение доступа к устройствам /dev], ограничение файловой системы, link:https://github.com/DtxdF/AppJail/wiki/filter[ограничение сети] и многие другие.
Всё это прозрачно для приложения, работающего внутри клетки.
Однако одна проблема, особенно с X11-приложениями, — это отсутствие изоляции.
Пользователи часто используют трюк с `xhost +`, чтобы запустить X11-приложение внутри клетки и отобразить его на X-сервере хоста.
Это создаёт угрозу безопасности, поскольку, даже если X11-приложение работает внутри клетки и даже если оно работает как непривилегированный процесс, оно может получить большое количество информации с хоста.
Поэтому скомпрометированное приложение, приложение с уязвимостью или просто собирающее много информации в «телеметрических целях» может стать кошмаром при такой настройке и в худшем случае скомпрометировать хост.

Недавно в AppJail была добавлена новая команда для решения этой проблемы: man:appjail-x11[1].
Эта команда запускает приложение внутри клетки, но отображает его на новом X-сервере, созданном Xephyr, который уже аутентифицирован с помощью **MIT-MAGIC-COOKIE-1**.
Это гораздо проще и легковеснее, чем настраивать SSH-сервер внутри клетки, создавать для этого ключевую пару, подключаться к клетке и так далее.
Однако эта команда не ограничивается только этим: вы можете изменять размер окна Xephyr, и ваше DE/WM будет соответствующим образом обновляться, поскольку эта команда способна обнаруживать такие изменения.

Однако, хотя с помощью этой команды уже многое достигнуто, пользователь должен установить DE/WM и приложение внутри клетки, а возможно, установить и пользовательский .desktop-файл на хосте.
Это можно автоматизировать с помощью Makejails, и продвинутые пользователи справятся с этим, поскольку они любят всё настраивать, но для обычного пользователя (или даже для меня) я хотел распространять приложения так, чтобы пользователям не нужно было делать ничего, кроме как просто запустить приложение, и именно эту задачу призван решать x11appjail.

link:https://github.com/DtxdF/x11appjail[x11appjail] — это репозиторий, содержащий предварительно написанные скрипты для развёртывания некоторых X11-приложений с использованием appjail-x11, который автоматизирует установку .desktop-файла, иконки, создание jail через Makejails, а также устанавливает разумные переменные окружения по умолчанию, которые можно легко изменить во время выполнения.
Однако на самом деле репозиторий усугубляет проблему удобства использования: теперь пользователь должен клонировать репозиторий и получать обновления, чего может быть достаточно для некоторых пользователей, но я хотел добиться достаточно хорошего удобства использования приложения и возможности легко изолировать его в клетке.
Поэтому я написал link:https://github.com/DtxdF/appscript[appscript], который создаёт SFX-файлы в формате ELF, и они автоматически создаются с каждым новым релизом этого репозитория благодаря GitHub workflow.

Спонсор: https://www.patreon.com/appjail

//
// The FreeBSD Russian Documentation Project
//
// Original EN revision (18.04.2026): a5bfce1d601b0f0084587f32081dad7cb652cb50
//