Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2.7 KiB
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
и в части защит больше не действует.