Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
39 lines
2.7 KiB
Markdown
39 lines
2.7 KiB
Markdown
# 0001. proxy-client — личный инструмент: простота важнее защиты
|
||
|
||
Дата: 2026-09-28. Статус: принято.
|
||
|
||
## Контекст
|
||
|
||
`proxy-client` пользуются владелец и несколько друзей на своих машинах. Первая
|
||
версия защищалась от сценариев, которые на личной машине не случаются:
|
||
повторное использование PID между `start` и `stop`, подложный `state.json`,
|
||
zip-бомба в официальном архиве Xray, уже проверенном по SHA-256, гонка
|
||
`status` с параллельным `start`. Эта защита стоила сотен строк кода и тестов и
|
||
около минуты прогона. При этом она мешала в обычной жизни, например
|
||
отказывала, если `~/.local` сделан ссылкой.
|
||
|
||
## Решение
|
||
|
||
Защищаемся только от реальных ошибок и опасностей:
|
||
|
||
- проверка SHA-256 скачанного Xray и атомарная замена бинарника;
|
||
- секреты профиля не попадают в вывод, служебные файлы закрыты правами 600/700;
|
||
- локальный порт Xray слушает только loopback;
|
||
- чужие файлы не перезаписываются;
|
||
- сигнал уходит только процессу, у которого `/proc/PID/exe` совпадает с
|
||
запущенным Xray.
|
||
|
||
Не защищаемся от самого пользователя и его собственных файлов. Ошибка должна
|
||
быть понятной: называть файл полным путём и подсказывать готовую команду.
|
||
|
||
Тесты проверяют поведение только через команду `proxy-client`, разбор ссылки,
|
||
установку Xray с подставным скачивателем, функции Bash и установщик пакета. Их
|
||
не пишут на внутренние функции и порядок вызовов.
|
||
|
||
## Последствия
|
||
|
||
Прежде чем добавлять новую защиту, нужно назвать сценарий, который реально
|
||
случается у пользователя. Иначе защита не добавляется. Первоначальный замысел
|
||
с полным набором защит описан в `docs/specs/2026-07-15-proxy-client-design.md`
|
||
и в части защит больше не действует.
|