# Codex — lightweight-server: исправления по аудиту безопасности (23.10) От: Claude, передаёт владелец. Репозиторий `git.ochenstarik.ru/ochenstarik/lightweight-server`, main `ef83559`. Если у тебя уже есть задание владельца по этому репо — это дополнение к нему: не дублируй, сведи в одну ветку или согласуй порядок. ## Правила - worktree от `/srv/projects/Agent projects/lightweight-server`, без клонов; одна задача — одна ветка — один PR; в main сам не вливаешь; - существующие тесты в `tests/` не менять, проверки не ослаблять; новые тесты — на поведение из таблицы; - **ничего не запускать на реальных серверах** (RU/DE/FI/DK) и на этой машине от root: проверки — `bash -n`, тесты, при необходимости одноразовый контейнер/VM Ubuntu 24.04 с удалением после прогона; - секретов в Git и логах нет; README.md и `docs/readme/README.ru.md` обновить под изменённое поведение (остальные переводы — по возможности); - режим: дешёвые модели → два аудитора → сам проверяешь. Отчёт — `agents/codex/done/` в этом репо. ## Зачем Серверы: RU — вход семейного VPN (3x-ui, панель только через SSH-туннель, подписки — семье), DE/FI/DK — выходы VPN и одновременно узлы Telegram-клиента. План: `kagent/agents/claude/done/2026-10-23-vps-plan.md`. Владелец ставит серверы этими скриптами — исправления нужны до российского сервера, в первую очередь S1–S3. | # | Находка | Где | Серьёзность | Исправление | |---|---|---|---|---| | S1 | Шаг 2 по умолчанию открывает всему миру 22, 80, **2096**, 443, 40000, 63636. 2096 — порт подписок 3x-ui по умолчанию, поэтому «приватный режим» шага 6 не закрывает подписки; 40000/63636 открыты без сервиса | `server-2.sh:138`, `user-3.sh:491` | высокая | по умолчанию только SSH-порт и 443; остальное — явным выбором с объяснением | | S2 | Приватный режим панели — только правило UFW, панель слушает `0.0.0.0`. Docker и чужие nftables-таблицы (узел Telegram) обходят/перекрывают UFW | `panel-warp-6.sh` `configure_xui_ports` | высокая | в приватном режиме `webListen=127.0.0.1`; проверка `ss -ltn`, что панель не на внешнем адресе | | S3 | Панель и подписки — один переключатель | `panel-warp-6.sh:115` | средняя | раздельно: панель (по умолчанию закрыта, 127.0.0.1) и подписки (по выбору публично, случайный путь) | | S4 | 3x-ui и Xray ставятся установщиками с `main` апстрима, без версии и контрольной суммы; `bash -n` — только синтаксис. Быстрая установка самого проекта — с GitHub `main` | `panel-warp-6.sh:4`, `vpn-5.sh:404`, README | средняя | фиксированный тег релиза + sha256; источник по выбору — Forgejo `git.ochenstarik.ru` (с RU-серверов GitHub бывает недоступен) | | S5 | Порт 22 остаётся открытым после переноса SSH — только напечатанная подсказка | `user-3.sh:537` | средняя | после успешного входа на новый порт (подтверждение оператора) удалить правило 22 автоматически | | S6 | Уведомление о входе: `pam_exec` в `session` срабатывает и при открытии, и при закрытии сессии (двойное «успешный вход»); отправка синхронная, до 10 с задержки входа, если api.telegram.org недоступен (RU) | `tg-4.sh` hook | низкая | выходить, если `PAM_TYPE != open_session`; отправлять в фоне (`setsid … &`) | | S7 | WARP в шаге 6 обязателен; на RU не нужен и может не подняться — скрипт падает после установки 3x-ui | `panel-warp-6.sh` | низкая | WARP — отдельный вопрос/флаг | | S8 | Загрузка установщиков ИИ-агентов без `--proto '=https'` (редирект может уйти на http) | `ai-agents-8.sh:158` | низкая | добавить `--proto '=https' --tlsv1.2` | | S9 | URL подписки вставляется в конфиг curl через `printf 'url = "%s"'`: кавычка в ссылке ломает конфиг (ввод оператора) | `vpn-5.sh` | низкая | экранировать `\` и `"` или передавать URL через `--url` из файла | | S10 | Бэкап — полный снимок ФС с секретами (БД 3x-ui, ключи хоста, токен бота), без шифрования, только локально | `backup-7.sh` | инфо | опция шифрования (age/gpg) и выгрузки на другой хост | Рекомендация к эксплуатации (не код): на серверах VPN/узлов Telegram **не ставить шаг 8 (ИИ-агенты)** — это лишний код с правами пользователя-админа. **Приёмка:** новые тесты в `tests/` на S1–S3, S5, S6 (рендер правил UFW/настроек 3x-ui, проверка PAM_TYPE); существующие тесты не менять; `bash -n` и все тесты PASS. Дополнительно к приёмке: прогон шагов 2 и 6 в одноразовом Ubuntu 24.04 (контейнер с systemd или VM) — вывод `ufw status verbose` и `ss -ltn` в отчёте: открыты только SSH-порт и 443 (+ подписки, если выбраны), панель слушает только `127.0.0.1`.