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

    Команда Simple-Server
    03.06.2026
    12 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Почему важна автоматизация обновлений 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 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/ — логи работы механизма.

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

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

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

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

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

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

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

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

    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

    Если таймер находится в состоянии 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.

    /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;

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

    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-upgrades1-20 серверов, базовый патчингСреднийВстроенные email, логиНизкаяНизкий при security-only
    Таймер systemd /cronКастомные окна и сценарииВысокийЧто напишете в скриптеСредняяЗависит от качества скрипта
    AnsibleПарки серверов, staged rolloutВысокийЦентрализованные отчетыСредняяНизкий при тестировании
    Puppet/ChefБольшие организации, строгие политикиВысокийЦентрализованные отчетыВысокаяНизкий при зрелых процессах

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

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

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

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

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

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

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


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны