
Легковесная песочница команд для Linux, безопасная по умолчанию, построенная на Landlock.
Лёгкая песочница для команд в Linux, построенная на Landlock.
Без демона. Без root. Без сборки образов.
Используйте её для выполнения рискованных команд с меньшим радиусом поражения: сторонние CLI, непроверенные скрипты, сгенерированный код и одноразовые утилиты.
Запуск непроверенного кода — это часто выбор «всё или ничего».
Контейнеры и виртуальные машины — отличные инструменты, но для быстрой изоляции на уровне одной команды они могут быть избыточны. Контейнеры добавляют накладные расходы на образы и среду выполнения. Виртуальные машины обеспечивают более сильную изоляцию, но с более высокими затратами на настройку и ресурсы.
sandboxec фокусируется на более узкой задаче: изолировать одну команду на текущем хосте с низкими накладными расходами и явными правилами разрешения.
См. также:
Хорошо подходит:
В таких случаях используйте контейнеры или виртуальные машины.
| Возможность | Landlock ABI | Минимальное ядро |
|---|---|---|
| Ограничения файловой системы | v1+ | 5.13+ |
| Ограничения TCP bind/connect |
sandboxec ограничивает, что процесс может:
Ограничения применяются непосредственно перед запуском целевой команды. После этого они действуют на данный процесс и его дочерние процессы.
[!IMPORTANT] Инструмент предназначен для уменьшения ущерба от ошибочных, рискованных или вредоносных пользовательских программ, сужая круг того, к чему они могут обращаться. Следовательно, он НЕ защищает от:
- Ошибок ядра или привилегированных локальных атакующих.
- Истощения ресурсов (CPU, память, диск).
- Всех возможных взаимодействий с хостом, выходящих за рамки настроенных элементов управления Landlock.
Воспринимайте его как практический слой изоляции.
С помощью скрипта:
curl -sSL https://get.sandbox.ec | sh
С помощью компилятора Go:
go install go.sandbox.ec/[email protected]
[!NOTE] Требуется Go версии 1.24.0 или новее.
Или скачайте готовый бинарник со страницы релизов.
Или соберите из исходников:
[!WARNING] Ветка
masterсодержит последние изменения кода, которые могут не пройти тщательное тестирование и контроль качества — поэтому возможна нестабильность или неожиданное поведение.
git clone https://github.com/sandboxec/sandboxec.git
cd sandboxec/
# git checkout v0.3.0
make build
# ./bin/sandboxec --help
sandboxec [ОПЦИИ] [КОМАНДА [АРГУМЕНТ...]]
Примеры:
sandboxec --fs rx:/usr /usr/bin/echo hello
sandboxec --fs rx:/usr -- /usr/bin/ls /usr
sandboxec --fs rx:/usr --net c:<PORT> -- /usr/bin/curl http://127.0.0.1:<PORT>
sandboxec --mode mcp --fs rx:/usr --fs rw:$PWD --net c:443
Доступные инструменты MCP:
exec: Выполнить команду и вернуть stdout, stderr и exit_code.
command (обязательно), args (необязательный массив).sandboxec с действующей политикой, полученной из флагов CLI или YAML-конфигурации.[!NOTE]
--restrict-scopedтребует Landlock ABI v6+.--unsafe-host-runtimeрасширяет разрешённый доступ к среде выполнения и библиотекам, ослабляя гарантии минимальных привилегий.- В режиме
--mode mcpаргументы обёрнутой команды не принимаются.
Формат: RIGHTS:PATH
Допустимые права:
read или rread_exec или rxwrite или wread_write или rwread_write_exec или rwx[!NOTE] Ограничения файловой системы требуют поддержки Landlock (Linux 5.13+).
Формат: RIGHTS:PORT
Допустимые права:
bind или bconnect или cbind_connect или bc[!NOTE] Сетевые ограничения (
bind/connect) требуют новую поддержку Landlock (ABI v4+, обычно Linux 6.7+).
[!IMPORTANT] Если работающее ядро не поддерживает запрошенные возможности, используйте
--best-effortдля корректного понижения функциональности.
--fs и --net накапливаются.Конфигурация — только YAML.
abi: 6
best-effort: false
ignore-if-missing: false
restrict-scoped: false
unsafe-host-runtime: false
fs:
- rx:/bin
net:
- c:443
mode: run
--config, используется этот файл.--named-config, значение сопоставляется с профилем в репозитории sandboxec/profiles.sandboxec.yaml или sandboxec.yml в:
$XDG_CONFIG_HOME/sandboxec$HOME/.config/sandboxec/etc/sandboxecЕсли файл конфигурации не найден, используются значения по умолчанию.
--config и --named-config нельзя использовать вместе.--fs и --net заменяют списки конфигурации, если эти флаги заданы.abi: 6
best-effort: true
ignore-if-missing: true
restrict-scoped: false
unsafe-host-runtime: false
fs:
- rx:/bin
- rx:/usr
- rx:/lib
- rx:/usr/lib
- rw:/tmp
net:
- c:443
Ищете готовые политики? Смотрите репозиторий sandboxec/profiles.
0: Обёрнутая команда завершилась успешно.N: Обёрнутая команда завершилась с кодом N.1: sandboxec не удалось настроиться (ошибка разбора, ошибка Landlock)./lib, /usr/lib или файлов разделяемых объектных зависимостей (файлы .so).--unsafe-host-runtime добавляет права read_exec для целей среды выполнения, полученных из PATH, и их разрешённых файлов зависимостей разделяемых библиотек, найденных для исполняемых записей. Это может значительно увеличить время запуска, особенно для короткоживущих команд.sandboxec --fs rx:/usr -- /usr/bin/id
sandboxec \
--fs rx:/bin \
--fs rx:/usr \
--fs rw:/tmp \
-- /bin/ls /tmp
sandboxec \
--fs rx:/usr \
--fs rw:$PWD \
-- your-command
sandboxec --fs rx:/usr --net c:443 -- /usr/bin/curl https://example.com
sandboxec \
--unsafe-host-runtime \
--fs rw:$PWD \
--fs rw:/tmp \
--net c:443 \
-- your-build-command
sandboxec --config ./sandboxec.yaml -- /bin/echo ok
sandboxec --named-config agents/claude -- claude --dangerously-skip-permissions
sandboxec \
--fs rx:/usr \
--fs rw:$PWD \
--fs rw:/tmp \
--net c:443 \
-- your-build-command
{
"mcpServers": {
"sandboxec": {
"command": "/path/to/go/bin/sandboxec",
"args": [
"--mode", "mcp",
"--fs", "rx:/usr",
"--fs", "rw:/tmp",
"--fs", "rw:/path/to/your/workspace",
"--net", "c:443"
]
}
}
}
недопустимые права fs: Проверьте написание (rx, rw и т.д.).--best-effort или уберите флаги, требующие более новых ABI (например, сетевые правила на старых ядрах).Если команды завершаются ошибкой permission denied:
/usr, /lib, /usr/lib, /etc при необходимости).--best-effort, чтобы убедиться, что неподдерживаемые возможности ABI являются препятствием.sandboxec выпущен с ♡ от @dwisiswant0 под лицензией Apache 2.0. См. LICENSE.
| v4+ |
| 6.7+ |
Ограничения области видимости (--restrict-scoped) | v6+ | только новые ядра |
| Опция | Описание |
|---|
-c, --config | Путь к YAML-файлу конфигурации. |
-C, --named-config | Именованный профиль конфигурации (соответствует репозиторию sandboxec/profiles). |
-f, --fs RIGHTS:PATH | Добавить правило файловой системы (повторяемо). |
-n, --net RIGHTS:PORT | Добавить сетевое правило (повторяемо). |
--abi int | Принудительно указать версию Landlock ABI (0 по умолчанию). |
--best-effort | Продолжить, даже если ядру не хватает поддержки некоторых возможностей. |
--ignore-if-missing | Не завершать ошибкой, если путь правила не существует. |
--restrict-scoped | Включить ограничения IPC в области видимости (требуется ABI v6+). |
--unsafe-host-runtime | Разрешить права read_exec для путей среды выполнения хоста. |
-m, --mode string | Режим исполнения (run или mcp). По умолчанию: run. |
-V, --version | Показать версию приложения. |
-h, --help | Показать справку. |