- 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>
3.8 KiB
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. Порядок внедрения
- Бэкап изменяемых файлов:
/root/app-bak/p1/(schemas.py,generator.py,server.py). - Добавлен
services/validation.py; правкиschemas.py,generator.py,routers/server.py(Python-патч с проверкой якорейassert). - Проверка импорта:
venv/bin/python -c "import schemas". rc-service ovpmon-profiler restart.- Тесты (скрипт запускался на узле с локально выпущенным токеном, т.к. на учётке включена 2FA).
- Документация:
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-…после выполнения).