32 lines
2.5 KiB
Markdown
32 lines
2.5 KiB
Markdown
# Безопасность
|
||
|
||
`forge-tools-ssh` намеренно устроен так, чтобы AI-ассистент не мог выйти за
|
||
рамки, заданные оператором. Если вы нашли способ обойти эти рамки — сообщите,
|
||
пожалуйста, команде разработки, не открывая публичный issue.
|
||
|
||
## Модель угроз
|
||
|
||
- **Хосты.** При заданном `allowed_hosts` подключение к любому хосту вне списка
|
||
отклоняется. Отсутствие или порча конфига не открывают доступ.
|
||
- **Учётные данные.** Ассистент передаёт только имя профиля; хост, ключ и адрес
|
||
берутся из конфига. Произвольные ключи и пароли из модели не используются.
|
||
- **Команды.** Пользовательские значения экранируются перед попаданием в shell.
|
||
Инструмент `run` эмитит permission-паттерны для внешнего движка одобрения.
|
||
- **Файлы.** Запись проверяет синтаксис для известных форматов; чтение ограничено
|
||
по размеру.
|
||
|
||
## Известные ограничения
|
||
|
||
- **Host key не проверяется** (`ssh.InsecureIgnoreHostKey`). Канал не защищён от
|
||
подмены сервера на уровне SSH. Рассчитано на доверенную сеть; при
|
||
необходимости включайте строгую проверку host key на уровне инфраструктуры.
|
||
- **Путь внутри удалённой системы не ограничивается**: границей служат права
|
||
Unix-пользователя, под которым выполнено подключение. Заводите отдельного
|
||
пользователя с минимально необходимыми правами.
|
||
|
||
## Гигиена репозитория
|
||
|
||
- Реальные ключи, адреса и пароли в репозиторий не коммитятся: только
|
||
`ssh.json.example` с подстановками `${VAR}`.
|
||
- Приватные ключи и рабочие данные исключены через `.gitignore` (`/data/`).
|