Files
OpenVPN-Monitoring-Simple/DOCS/Operations/IMPLEMENTATION-01-settings-validation.md
T
iclaoudezinandClaude Sonnet 5.5 3836049230 Docs: add operations records (SUMMARY, Hysteria chain manifest, reboot test, plans)
- DOCS/Operations: current-state SUMMARY of the ENTRY deployment (access,
  install, egress via Hysteria2, security findings and fixes, risk
  assessment, commits/backups, open items), the Hysteria chain manifest
  with an OpenVPN Monitor section, reboot test results, and the plan and
  rollout records for settings validation and privilege separation.
- Link them from README and DOCS/General/Index.md.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 12:59:55 +00:00

3.8 KiB

Артефакт внедрения: п.1 — валидация настроек Profiler

Дата: 2026-09-30. Узел: 213.226.125.13 (Alpine, OpenRC). Приложение: /opt/OpenVPN-Monitoring-Simple. План: PLAN-validation-and-privilege-drop.md. Коммит в репозитории приложения на узле: 05f44b9 («Profiler: validate server/PKI settings before they reach OpenVPN config»), пуш не выполнялся.

1. Что внедрено

Слой Файл Суть
A APP_PROFILER/schemas.py валидаторы SystemSettingsUpdate, PKISettingUpdate (422)
B APP_PROFILER/services/validation.py (новый), services/generator.py check_script: скрипт только из /etc/openvpn/scripts/, root-owned, без записи group/other
C APP_PROFILER/services/generator.py, routers/server.py отказ при \n, \r, NUL, управляющих символах, ", \; ValueError → HTTP 400

2. Порядок внедрения

  1. Бэкап изменяемых файлов: /root/app-bak/p1/ (schemas.py, generator.py, server.py).
  2. Добавлен services/validation.py; правки schemas.py, generator.py, routers/server.py (Python-патч с проверкой якорей assert).
  3. Проверка импорта: venv/bin/python -c "import schemas".
  4. rc-service ovpmon-profiler restart.
  5. Тесты (скрипт запускался на узле с локально выпущенным токеном, т.к. на учётке включена 2FA).
  6. Документация: DOCS/Changes/2026-09-30_Settings_Validation.md, ссылки в README.md, DOCS/General/Index.md; коммит.

3. Доказательства (результаты тестов)

Проверка Результат
Круговой PUT текущих настроек server / pki 200 / 200
17 вредоносных или невалидных значений все 422
4 валидных изменения все 200
Скрипты: root 755 / group-writable / симлинк / нет файла / вне каталога / traversal / пусто принят / отклонён / отклонён / отклонён / отклонён / отклонён / принят
Слой C при обходе схемы (5 инъекций) все заблокированы, ничего не записано
Рендер текущих настроек против рабочего server.conf идентичен
После тестов настройки восстановлены и совпадают с исходными; rc-status: все сервисы started

4. Откат

cd /opt/OpenVPN-Monitoring-Simple/APP_PROFILER
cp /root/app-bak/p1/schemas.py schemas.py
cp /root/app-bak/p1/generator.py services/generator.py
cp /root/app-bak/p1/server.py routers/server.py
rm services/validation.py
rc-service ovpmon-profiler restart

Либо git revert 05f44b9 в репозитории.

5. Оговорки

  • Каталога /etc/openvpn/scripts/ по умолчанию нет (для теста создавался временно и удалён): перед включением скриптов создать root:root 755, файлы 755 от root.
  • Валидаторы действуют на обновления; ранее сохранённые значения проверяются при рендере (слой C).
  • Слой B/C защищает конфиг, но сервис по-прежнему работает от root — это закрывает пункт 2 (см. IMPLEMENTATION-02-… после выполнения).