Updater applies chmod/chown on config, spool and state paths on every run. SAC is the primary update path; optional cron uses the same behavior. Co-authored-by: Cursor <cursoragent@cursor.com>
6.6 KiB
Автообновление ssh-monitor
Скрипт update_ssh_monitor.sh обновляет /usr/local/bin/ssh-monitor из git и перезапускает systemd-сервис.
Основной путь: Security Alert Center
На продакшен-хостах обновление идёт через SAC, без cron:
-
Админ нажимает «Обновить ssh-monitor (SSH)» в карточке хоста.
-
SAC по SSH запускает
/opt/scripts/update_ssh_monitor.shсREPO_URL/GIT_BRANCHиз Настройки → Обновления агентов. -
Updater сам выполняет
git pull, синхронизируетsac-client.shи watchdog, дописывает отсутствующие ключи в/etc/ssh-monitor.conf, выставляетchmod/chownна конфиг, SAC-spool, счётчики и state-файлы, перезапускаетssh-monitor.service.
Участие админа на сервере не требуется (кроме первичной настройки SAC_URL / SAC_API_KEY в конфиге).
При первой установке (нет updater на хосте) SAC выполняет bootstrap с --deploy: clone, ipset при необходимости, systemd unit, полный hardening.
Cron / systemd timer — опциональная альтернатива с тем же скриптом и обязательным REPO_URL в окружении.
Watchdog и таймеры watchdog не изменяются при обычном update (кроме синхронизации скрипта watchdog из git).
Конфиг /etc/ssh-monitor.conf: при первой установке копируется из ssh-monitor.conf.example. При каждом update в существующий конфиг дописываются отсутствующие SAC-переменные и ключи безопасности; UseSAC=fallback. Telegram/SMTP и прочие ключи не перезаписываются.
Установка монитора и unit-файлов: README.md, зависимости: install-prerequisites.ru.md.
Что делает скрипт
-
Создаёт рабочий каталог
UPDATE_DIR(по умолчанию/opt/scripts/update). -
При
--deploy/ bootstrap SAC проверяетipsetи при отсутствии пытается установить через пакетный менеджер. Обычное обновление не вызываетapt-get. -
В
UPDATE_DIRвыполняетgit cloneилиgit pullрепозитория. -
Ищет
ssh-monitorв клоне (GitLab layout или плоский репозиторий). -
Сравнивает SHA256 с
LOCAL_SCRIPT_PATH(/usr/local/bin/ssh-monitor). -
Всегда синхронизирует
sac-client.sh,ssh-monitor-perms.sh, watchdog. -
Дописывает ключи конфига;
apply_runtime_security_hardening:chmod 600конфиг,700spool,600state/SAC-файлы, whitelist. -
При изменении
ssh-monitor,sac-client.shили конфига —systemctl restart ssh-monitor.service. -
Лог:
/var/log/update_script.log(блок «Итог обновления», строкаsecurity hardening).
flowchart LR
A[SAC или cron] --> B[update_ssh_monitor.sh]
B --> C[git pull/clone]
C --> D[sync sac-client + perms lib]
C --> E{SHA256 ssh-monitor?}
D --> F[harden config/spool/state]
E -->|да| G[backup + cp ssh-monitor]
E -->|нет| F
G --> F
F --> H{что-то изменилось?}
H -->|да| I[restart ssh-monitor.service]
H -->|нет| J[без перезапуска]
Настройка перед первым запуском
| Переменная | По умолчанию | Назначение |
|------------|--------------|------------|
| UPDATE_DIR | /opt/scripts/update | Каталог для git-клона |
| REPO_URL | (обязательно) | URL git — задаётся SAC, export или Environment= в cron |
| GIT_BRANCH | main | Ветка для clone/pull |
| LOCAL_SCRIPT_PATH | /usr/local/bin/ssh-monitor | Куда копировать монитор |
| LOG_FILE | /var/log/update_script.log | Лог обновлений |
| UPDATE_VIA_SAC | (опционально) | SAC выставляет 1; при отсутствии бинарника включается --deploy |
Требования: root, git, доступ к репозиторию.
Первичная установка (--deploy)
sudo REPO_URL=https://git.kalinamall.ru/PapaTramp/ssh-monitor.git ./update_ssh_monitor.sh --deploy
# или first_deploy.sh с REPO_URL в окружении
Через SAC bootstrap выполняется автоматически с --deploy.
Установка updater (если не через SAC bootstrap)
sudo mkdir -p /opt/scripts
sudo cp update_ssh_monitor.sh /opt/scripts/update_ssh_monitor.sh
sudo chmod 750 /opt/scripts/update_ssh_monitor.sh
Проверка:
sudo REPO_URL=https://git.kalinamall.ru/PapaTramp/ssh-monitor.git /opt/scripts/update_ssh_monitor.sh
sudo tail -30 /var/log/update_script.log
Запуск по расписанию (опционально)
Cron
0 4 * * * REPO_URL=https://git.kalinamall.ru/PapaTramp/ssh-monitor.git /opt/scripts/update_ssh_monitor.sh
systemd timer
См. предыдущие примеры ssh-monitor-update.service / .timer с Environment=REPO_URL=....
Откат
ls -la /usr/local/bin/ssh-monitor.backup.*
sudo cp /usr/local/bin/ssh-monitor.backup.YYYYMMDD_HHMMSS /usr/local/bin/ssh-monitor
sudo systemctl restart ssh-monitor.service
Ограничения
-
Секреты (
SAC_API_KEY, Telegram) SAC не прописывает — только в/etc/ssh-monitor.confна хосте. -
При недоступном git
git pullпишет предупреждение и продолжает с локальной копией. -
REPO_URLбез дефолта в скрипте — только доверенное зеркало (kalinamall / своё Gitea).