67 lines
5.4 KiB
Markdown
67 lines
5.4 KiB
Markdown
# Balda — SSH и Seatbelt: проверка 2026-10-18
|
||
|
||
## Статус этой заметки — 2026-10-19
|
||
|
||
Ниже сохранён датированный технический прогон 2026-10-18, включая его тогдашние открытые проверки. Текущая эксплуатационная сводка: [[personal/projects/balda/setup]], планы: [[personal/plans/balda-remote-agent]] и [[personal/plans/workspace-gateway]]. С тех пор приняты production SSH/SRT к Mac, SMB доступ/отзыв, shared Beads fixture, native approval bridge и generic SSH Manager 0.3.2 с импортом существующего доверенного доступа Mac и проверкой установленного ключа из клиента; текущая приёмка: [[personal/projects/balda/ssh-client-route-2026-10-19]]. Полный модельный Prism lifecycle и реальные project DB остаются отдельной приёмкой.
|
||
|
||
## Исторический протокол проверки
|
||
|
||
Общий план: [[personal/plans/balda-remote-agent]].
|
||
Workspace Gateway: [[personal/plans/workspace-gateway]].
|
||
|
||
## Факты установки на дату исходной проверки
|
||
|
||
- Docker context: `colima`; Docker daemon сообщает `Ubuntu 24.04.4 LTS`.
|
||
- На Mac `26.7.1` присутствует `/usr/bin/sandbox-exec`.
|
||
- Из основного контейнера `balda-mm-mac` открывается SSH TCP/22 до `host.docker.internal`, получен banner `SSH-2.0-OpenSSH_10.3`.
|
||
- Из того же контейнера доступен внешний `github.com:22`, получен SSH banner.
|
||
- Эти сетевые пробы не передавали ключи и не выполняли удалённых команд: рабочая авторизация, host key pinning и права пользователя ими не приняты.
|
||
- В production по-прежнему `permissions.mode: allow_all`; профиль Seatbelt для рабочего запуска из Balda этим тестом не устанавливался.
|
||
|
||
## Проверка Seatbelt
|
||
|
||
На синтетических файлах выполнены чтение разрешённого пути, запрещённое чтение другого пути и запрещённая запись через дочерний `/bin/sh`.
|
||
Оба запрещённых действия завершились `Operation not permitted`, исходный файл сохранился.
|
||
Это проверка работы правила и наследования ограничения, а не готовая политика изоляции агента: тестовый профиль разрешал остальные операции и запрещал только контрольную папку.
|
||
|
||
```json
|
||
{
|
||
"macos": "26.7.1",
|
||
"allowed_read": {
|
||
"exit_code": 0,
|
||
"stdout": "allowed",
|
||
"stderr": ""
|
||
},
|
||
"blocked_read": {
|
||
"exit_code": 1,
|
||
"stdout": "",
|
||
"stderr": "cat: /private/tmp/workspace-gateway-seatbelt-nh3ciwhu/blocked/probe: Operation not permitted"
|
||
},
|
||
"blocked_child_write": {
|
||
"exit_code": 1,
|
||
"stdout": "",
|
||
"stderr": "fixture: /private/tmp/workspace-gateway-seatbelt-nh3ciwhu/blocked/probe: Operation not permitted"
|
||
},
|
||
"blocked_file_unchanged": true,
|
||
"scope": "Synthetic deny-rule/inheritance probe, not an approved production agent profile"
|
||
}
|
||
```
|
||
|
||
## Готовые средства
|
||
|
||
[anthropics/sandbox-runtime](https://github.com/anthropics/sandbox-runtime) уже предоставляет запуск произвольного процесса с ограничениями файлов и сети, на macOS используя Seatbelt.
|
||
Изучена документация; пакет не устанавливался и рабочие профили этого проекта не принимались.
|
||
Сначала проверяется готовое средство и штатная sandbox конкретного агента, затем определяется, нужен ли какой-либо дополнительный launcher.
|
||
|
||
[Beads](https://github.com/gastownhall/beads/blob/main/docs/architecture/index.md) рекомендует Dolt server mode для одновременных записывающих клиентов.
|
||
Настройка общего серверного доступа из Balda и удалённых сред ещё не выполнена.
|
||
|
||
## Открытые проверки на дату исходного прогона
|
||
|
||
- Авторизованный SSH из контейнера в реальные среды с проверкой host key и ограниченными credentials.
|
||
- Запуск настоящих ACP-агентов и обычных команд на Mac внутри принятой sandbox.
|
||
- Запрет обхода sandbox через альтернативную SSH-команду, дочерний процесс или доступ к секретам.
|
||
- Права на файлы и сеть, совместимость native sandbox агента с внешней оболочкой.
|
||
- Запросы разрешений у агента и штатный `ask` Balda.
|
||
- MCP, общая БД Beads и полный цикл оригинального Prism на реальном подключении.
|