6.7 KiB
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.