Разверните OpenClaw в облаке в один клик
Вход/ Регистрация

Автоматизация обновлений и патчей на серверах Ubuntu/Debian: полное руководство

7
12 минут чтения
Средний рейтинг статьи: 5

В этом руководстве рассмотрим, как настроить автоматическое применение обновлений безопасности и контролируемое внедрение пакетов в дистрибутивах Ubuntu и Debian. Расскажем, в каких случаях достаточно стандартных инструментов системы, а где требуется строгое соблюдение процессов: тестирование в промежуточной среде, планирование технических окон, процедуры отката и постоянное наблюдение за состоянием. 

Разбор построен на примерах типичной конфигурации в Timeweb Cloud: вы разворачиваете виртуальные инстансы под веб-приложения, базы данных, очереди задач или фоновые процессы и стремитесь обеспечить их защищенность без постоянного участия вручную.

Почему важна автоматизация обновлений Linux-серверов

Главное преимущество автоматизированных процессов — это уменьшение периода, в течение которого система остается незащищенной. В случае выхода важного исправления безопасности у вас есть возможность внедрить его до того, как уязвимость станет объектом массовых атак. Чем меньше этот интервал, тем надежнее функционирует ИТ-инфраструктура.

Автоматизация особенно важна при наличии множества однотипных узлов. Однако даже для одного хоста она значительно экономит ресурсы: не приходится вспоминать, когда в последний раз ставились обновления безопасности, и нет нужды вручную отслеживать, работает ли инструмент управления пакетами корректно.

Что дает бизнесу автоматизация обновлений:

  • меньше инцидентов из-за известных уязвимостей и, как следствие, меньше простоев;

  • прогнозируемые окна обслуживания вместо внезапных ночных работ;

  • стабильность: одинаковые правила патчинга для всех узлов;

  • контроль затрат: меньше ручных действий, меньше «пожаров» у команды;

  • соответствие требованиям безопасности и внутренним политикам.

Важно различать зоны ответственности. Автообновления не заменяют контроль над изменениями. Они покрывают лишь работу с системными компонентами, но не гарантируют совместимость приложений, корректность миграций или поведение сервисов после рестарта.

Встроенные инструменты: unattended-upgrades

unattended-upgrades — это типовой инструмент в Ubuntu и Debian для фоновой установки апдейтов. Он позволяет выбирать каналы (например, только безопасность), сохранять логи, отправлять уведомления и при необходимости выполнять перезагрузку в заданный период.

На Ubuntu автоматическое обновление часто активно по умолчанию, но для прод-среды стоит перепроверить параметры и адаптировать их под ваш цикл релизов и SLA.

Установка и базовая настройка

Сначала установим утилиту (в большинстве современных версий Ubuntu, например 24.04, она уже установлена по умолчанию) и включим проверку обновлений, которая происходит автоматически. Для Ubuntu и Debian команды одинаковые.

Проверим, есть ли утилита на сервере, с помощью команды:

    
dpkg -l | grep unattended-upgrades

Если вывод такой, пропустите установку утилиты:

    
unattended-upgrades  2.9.1+nmu4ubuntu1  all  automatic installation of security upgrades

Обновляем пакеты:

    
sudo apt update

Устанавливаем утилиту: 

    
sudo apt install unattended-upgrades

Запускаем базовую настройку: 

    
sudo dpkg-reconfigure -plow unattended-upgrades

После запуска базовой настройки обычно включается регулярная установка обновлений. Дальше имеет смысл открыть основные конфиги и убедиться, что они соответствуют вашей политике.

Ключевые файлы, о которых стоит знать:

  • /etc/apt/apt.conf.d/20auto-upgrades — как часто запускать обновления;

  • /etc/apt/apt.conf.d/50unattended-upgrades — что именно устанавливать и как вести себя при ошибках;

  • /var/log/unattended-upgrades/ — логи работы механизма.

Если вы разворачиваете серверы в Timeweb Cloud из шаблонов, удобно сразу в cloud-init включить unattended-upgrades и прописать единые настройки. Это снижает объем ручной работы при росте инфраструктуры.

Проверяем установку и запуск автообновлений

Перед тем как включать параметр security-only, проверьте ключевые файлы и таймеры APT. Так вы сразу увидите, что механизм действительно работает, а лог пишется в ожидаемое место.

Проверяем домашнюю директорию, куда будем писать log2.txt:

    
echo $HOME

Проверяем, что ключевые файлы и каталог логов существуют:

    
ls -l /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/50unattended-upgrades ls -ld /var/log/unattended-upgrades

Проверяем, что таймеры APT включены и видны в systemd:

    
systemctl list-timers | grep apt

Проверяем, что сервис unattended-upgrades запущен:

    
systemctl status unattended-upgrades --no-pager

Настройка только security-обновлений

Самый безопасный старт для рабочей среды — автоматически устанавливать только обновления безопасности, а остальные обновления (с новыми функциями и исправлениями ошибок) разворачивать по расписанию после проверки на тестовом окружении. В Debian для этого удобно ограничивать источники через Origins-Pattern, в Ubuntu — через Allowed-Origins, суть одна: автоматизируем только обновления безопасности. 

Пример ниже — это bash-скрипт, который устанавливает необходимые пакеты, применяет минимальную конфигурацию автоматических обновлений и сохраняет все логи в ~/log2.txt.

    
#!/usr/bin/env bash set -euo pipefail # Лог-файл (под root). Можно поменять путь/имя как нужно. LOG="/root/unattended-upgrades-setup-$(date +%F_%H-%M-%S).log" say() { echo -e "$*" | tee -a "$LOG"; } say "=== Настройка unattended-upgrades (security-only) ===" say "Пользователь: $(whoami)" say "Домашний каталог: $HOME" say "Дата: $(date -u)" say "\n===== Установка пакетов =====" apt-get update -qq >>"$LOG" 2>&1 apt-get install -y -qq unattended-upgrades apt-listchanges >>"$LOG" 2>&1 say "\n===== Включаем периодические задачи APT =====" cat >/etc/apt/apt.conf.d/20auto-upgrades <<'EOF' APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; EOF # Определяем дистрибутив и codename . /etc/os-release DISTRO_ID="${ID:-}" CODENAME="${VERSION_CODENAME:-}" if [[ -z "${DISTRO_ID}" || -z "${CODENAME}" ]]; then say "\nОШИБКА: Не удалось определить ID/VERSION_CODENAME из /etc/os-release" exit 1 fi say "\n===== Security-only конфигурация unattended-upgrades =====" if [[ "${DISTRO_ID}" == "ubuntu" ]]; then # Ubuntu: используем Allowed-Origins и только -security (без -updates/-backports) cat >/etc/apt/apt.conf.d/50unattended-upgrades <<EOF Unattended-Upgrade::Allowed-Origins { "\${distro_id}:\${distro_codename}-security"; }; Unattended-Upgrade::Automatic-Reboot "false"; Unattended-Upgrade::Remove-Unused-Kernel-Packages "true"; Unattended-Upgrade::Remove-New-Unused-Dependencies "true"; Unattended-Upgrade::Remove-Unused-Dependencies "true"; EOF else # Debian (и прочие): Origins-Pattern, только security cat >/etc/apt/apt.conf.d/50unattended-upgrades <<EOF Unattended-Upgrade::Origins-Pattern { "origin=Debian,codename=${CODENAME}-security,label=Debian-Security"; }; Unattended-Upgrade::Automatic-Reboot "false"; Unattended-Upgrade::Remove-Unused-Kernel-Packages "true"; Unattended-Upgrade::Remove-New-Unused-Dependencies "true"; Unattended-Upgrade::Remove-Unused-Dependencies "true"; EOF fi say "\n===== systemd timers (apt) =====" # В терминале выводится только короткая выжимка, а полный лог записываем в файл. systemctl list-timers --all >>"$LOG" 2>&1 systemctl list-timers --all | grep -E "apt-daily|apt-daily-upgrade" | tee -a "$LOG" || true say "\n===== DRY-RUN unattended-upgrades (лог, без спама в консоль) =====" # ВАЖНО: --debug очень многословный. Пишем его только в лог. unattended-upgrades --dry-run --debug >>"$LOG" 2>&1 say "DRY-RUN debug сохранён в: $LOG" say "\n===== Последние записи лога unattended-upgrades =====" tail -n 50 /var/log/unattended-upgrades/unattended-upgrades.log >>"$LOG" 2>&1 tail -n 20 /var/log/unattended-upgrades/unattended-upgrades.log | tee -a "$LOG" || true say "\nГотово. Полный лог: $LOG"

После выполнения bash-скрипта система будет настроена для автоматической установки обновлений безопасности. Редактировать скрипт не требуется — автоматическая установка обновлений выполняется через таймеры systemd: apt-daily.timer и apt-daily-upgrade.timer.

В bash-скрипте мы создали файл /etc/apt/apt.conf.d/20auto-upgrades с содержимым:

    
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";

Это позволяет автоматически запускать обновления безопасности, которые настроил наш bash-скрипт.

Убедимся, что таймер активен:

    
systemctl status apt-daily-upgrade.timer

Image1

Если таймер находится в состоянии enabled и active, обновления будут выполняться автоматически по расписанию.

Пример: как выглядит логирование до и после security-only

В логировании есть три вещи, которые необходимо фиксировать при настройке обновлений безопасности: 

  • Какие источники для обновлений разрешены (Allowed origins);
  • Включены ли параметры APT::Periodic;
  • Активны ли таймеры apt-daily/apt-daily-upgrade

Ниже представлены примеры из реального лога.

Файлы на диске (пример):

    
-rw-r--r-- 1 root root  80 Feb  4 12:04 /etc/apt/apt.conf.d/20auto-upgrades -rw-r--r-- 1 root root 344 Feb 10 11:41 /etc/apt/apt.conf.d/50unattended-upgrades drwxr-x--- 2 root adm 4096 Feb  5 00:25 /var/log/unattended-upgrades

До настройки в Allowed origins есть и основной репозиторий, и security:

    
2026-02-10 06:38:47,698 INFO Allowed origins are: origin=Debian,codename=bookworm,label=Debian, origin=Debian,codename=bookworm,label=Debian-Security, origin=Debian,codename=bookworm-security,label=Debian-Security

После настройки security-only остается только security:

    
2026-02-10 11:41:40,093 INFO Allowed origins are: origin=Debian,codename=bookworm-security,label=Debian-Security

Если обновления безопасности уже были настроены до запуска скрипта, фрагменты «до/после» будут одинаковыми — это нормально: настройка идемпотентная.

Если при тестовом запуске выполнить команду sudo unattended-upgrades --dry-run --debug, в выводе можно увидеть строки вида Marking not allowed. Это означает, что источники обновлений, не входящие в разрешенный список, исключаются через механизм pinning и не рассматриваются для установки. Такое поведение является ожидаемым и подтверждает, что заданные ограничения действительно применяются и работают корректно.

Логирование и мониторинг

Автоматизация без мониторинга превращается в лотерею: обновления могут тихо применяться, либо тихо сломали нужную вам зависимость. Поэтому логирование и мониторинг обновлений — обязательная часть настройки.

Где можно посмотреть логирование unattended-upgrades:

  • /var/log/unattended-upgrades/unattended-upgrades.log — общие запуски;

  • /var/log/unattended-upgrades/unattended-upgrades-dpkg.log — подробности установки пакетов;

  • /var/log/apt/history.log и /var/log/dpkg.log — история установок на уровне apt и dpkg.

Быстрая проверка, что обновления действительно запускаются:

Проверьте таймеры: 

    
systemctl list-timers --all | grep -E "apt-daily|apt-daily-upgrade"

Посмотрите статус сервиса: 

    
systemctl status unattended-upgrades

Пробный запуск (подробности — только в файл):

    
sudo unattended-upgrades --dry-run --debug > /var/log/unattended-upgrades/dry-run-debug.log 2>&1 tail -n 50 /var/log/unattended-upgrades/dry-run-debug.log

Автоматизация запуска обновлений безопасности 

unattended-upgrades закрывает типовой сценарий, но иногда требуется более управляемая логика: обновлять пакеты только в окно обслуживания, делать предварительную проверку, писать отчеты в чат или запускать скрипт после апдейта.

Для автоматизации установки обновлений можно использовать таймеры systemd. В актуальных версиях Ubuntu за работу с обновлениями отвечают задания apt-daily.timer и apt-daily-upgrade.timer. Перед тем как добавлять собственные задания или изменять расписание обновлений, стоит разобраться, как устроены стандартные таймеры systemd.

Что важно учитывать:

  • apt-daily.timer обновляет индекс пакетов (по сути, выполняет функцию apt update);

  • apt-daily-upgrade.timer позволяет инициировать установку доступных обновлений, включая unattended-upgrades;

  • оба задания запускаются со случайной паузой, чтобы большое количество серверов не обращалось к репозиториям одновременно.

Проверить текущее расписание и конфигурацию можно так:

    
systemctl list-timers | grep apt-daily systemctl cat apt-daily.timer systemctl cat apt-daily-upgrade.timer

Если вам требуется строгое фиксированное обслуживание, можно создать собственный таймер systemd и назначить точное время запуска обновлений. К примеру, назначить выполнение обновления каждую субботу в 03:15 с сохранением вывода в лог, чтобы повысить надежность.

Создайте сервис /etc/systemd/system/apt-weekly-upgrade.service:

    
sudo tee /etc/systemd/system/apt-weekly-upgrade.service >/dev/null <<'EOF' [Unit] Description=Weekly APT upgrade [Service] Type=oneshot ExecStart=/usr/bin/apt-get update ExecStart=/usr/bin/apt-get -y upgrade ExecStart=/usr/bin/apt-get -y autoremove EOF

Создайте таймер /etc/systemd/system/apt-weekly-upgrade.timer:

    
sudo tee /etc/systemd/system/apt-weekly-upgrade.timer >/dev/null <<'EOF' [Unit] Description=Run APT upgrade weekly [Timer] OnCalendar=Sat *-*-* 03:15:00 Persistent=true [Install] WantedBy=timers.target EOF

Включите таймер:

    
sudo systemctl daemon-reload && sudo systemctl enable --now apt-weekly-upgrade.timer

Проверьте:

    
systemctl list-timers | grep apt-weekly-upgrade systemctl status apt-weekly-upgrade.timer

Таймеры systemd удобны тем, что их проще мониторить: у них есть статус, журнал выполнения и единый механизм настройки расписания. Это делает их предпочтительным способом автоматизации запуска обновлений на отдельных серверах.

Методы автоматизации обновлений: сравнение

В таблице ниже приведены основные подходы к автоматизации обновлений и их особенности: области применения, уровень контроля, сложность внедрения и возможные риски.

Подход

Где применяют

Контроль окна

Отчеты

Сложность

Риск

unattended-upgrades

1-20 серверов, базовый патчинг

Средний

Встроенные email, логи

Низкая

Низкий при security-only

Таймер systemd /cron

Кастомные окна и сценарии

Высокий

Что напишете в скрипте

Средняя

Зависит от качества скрипта

Ansible

Парки серверов, staged rollout

Высокий

Централизованные отчеты

Средняя

Низкий при тестировании

Puppet/Chef

Большие организации, строгие политики

Высокий

Централизованные отчеты

Высокая

Низкий при зрелых процессах

Заключение

Автоматические обновления безопасности — это простой способ сократить окно уязвимости и убрать рутину из администрирования серверов. unattended-upgrades закрывает базовые риски на уровне пакетов, если ограничить его только security-репозиториями и включить логирование. Главное — помнить, что автообновления не заменяют процессы тестирования, мониторинга и управления изменениями, а лишь дополняют их.

7
12 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Пока нет комментариев