- Зачем:
- CLI и спека были переусложнены относительно принятой модели угроз
(один пользователь, доверенная машина): лишняя ось версий Xray и
защита от входов, которые не возникают при ручном редактировании.
- Что:
- убрана поддержка Xray 25.12.8 — поддерживается только 26.3.27;
allowInsecure валидируется, но никогда не эмитится в JSON.
- удалена проверка владения сокетом через /proc/net/tcp; идентичность
процесса и сверка адрес/порт со state сохранены.
- валидация INI/профиля/адреса/query сведена к отказам на реальные
опечатки; scoped IPv6 отклоняется одинаково на Python 3.8 и 3.9+.
- удалены fsync/O_EXCL-церемония, SIGALRM-таймер, zombie-инспекция,
мёртвый отпечаток профиля и двойной разбор extra/alpn.
- shell.bash принимает вывод env без ре-валидации, сохранив атомарность;
спека и issue 01–05 приведены к новому объёму (тикет 06, леджер).
- Проверка:
- python3 -m unittest discover -s tests — 34 теста OK.
- bash tests/test_proxy_launchers.sh — 8 проверок PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
03 — Безопасный жизненный цикл управляемого процесса
What to build: Управляемый Xray предсказуемо переживает повторные команды, сигналы, устаревшее состояние и аварийное исчезновение супервизора, не затрагивая чужие процессы и не оставляя секретные или временные данные.
Blocked by: 02 — Управляемый Xray: полный штатный путь; 06 — Упрощение.
Status: ready-for-agent
Мандат идентичности: идентичность = PID + время старта (/proc/PID/stat) +
исполняемый файл ребёнка / путь скрипта супервизора; текущий argv-обход заменить
этим механизмом.
- Супервизор владеет пользовательской блокировкой, допускает только один
управляемый экземпляр и не заменяет запущенный профиль другим без явных
stopи новогоstart. - Состояние с правами
0600хранит PID и время старта супервизора и Xray, путь к бинарнику и порт, но не ссылку или её секреты; служебные каталоги имеют права0700. statusиstopсверяют PID со временем старта и ожидаемым исполняемым файлом, поэтому чужой, устаревший и повторно использованный PID никогда не считается управляемым процессом.- SIGINT, SIGTERM и SIGHUP передаются дочернему Xray; штатное завершение удаляет состояние, сгенерированный JSON и временные файлы.
- Если супервизор аварийно исчез,
stopзавершает оставшийся Xray только после полной проверки его личности и затем безопасно очищает состояние. - Повторный запуск, смена профиля, конфликт локального порта и несогласованный машинный адрес завершаются понятным отказом без повреждения уже работающего экземпляра.
- Полная VLESS-ссылка и её секреты отсутствуют в stdout, stderr, служебных файлах и аргументах дочерних процессов; временная конфигурация существует только внутри закрытого служебного каталога.
- Автоматические тесты покрывают блокировку, повторный запуск, сигналы, остановку, очистку, смену профиля, конфликт порта, чужой, устаревший и повторно использованный PID, а также исчезнувший супервизор.