AppJail, AppScripts и песочница для X11-приложений

Контакт: Jesús Daniel Colmenares Oviedo <dtxdf@FreeBSD.org>

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

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

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

Клетки — это реализация виртуализации на уровне ОС для FreeBSD. С помощью клетки можно легко ограничить множество аспектов: ограничение ресурсов, ограничение доступа к устройствам /dev, ограничение файловой системы, ограничение сети и многие другие. Всё это прозрачно для приложения, работающего внутри клетки. Однако одна проблема, особенно с X11-приложениями, — это отсутствие изоляции. Пользователи часто используют трюк с xhost +, чтобы запустить X11-приложение внутри клетки и отобразить его на X-сервере хоста. Это создаёт угрозу безопасности, поскольку, даже если X11-приложение работает внутри клетки и даже если оно работает как непривилегированный процесс, оно может получить большое количество информации с хоста. Поэтому скомпрометированное приложение, приложение с уязвимостью или просто собирающее много информации в «телеметрических целях» может стать кошмаром при такой настройке и в худшем случае скомпрометировать хост.

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

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

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


Последнее изменение: 26 апреля 2026 г. от Vladlen Popolitov