lightweight-server/agents/codex/inbox/2026-10-23-lightweight-security.md
ochenstarik-ui 9f06756cef
Some checks failed
Bash syntax / syntax (push) Failing after 11s
Bash syntax / syntax (pull_request) Failing after 2s
fix: close installer exposure and pin verified payloads
2026-10-23 12:33:19 +07:00

6.7 KiB
Raw Permalink Blame History

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.