Перейти к основному содержимому
Вернуться в категорию

Автоматические обновления: руководство по unattended-upgrades

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

Время чтения: 10 мин Управление сервером
unattended-upgradesавтоматические обновленияобновления безопасностиubuntudebianlinuxapt

Содержание

Автоматические обновления: руководство по unattended-upgrades

Одно из фундаментальных требований безопасности сервера — своевременное применение патчей безопасности. Забывание о ручных обновлениях может оставить ваш сервер уязвимым к известным эксплойтам. Пакет unattended-upgrades автоматически применяет обновления безопасности на системах Ubuntu и Debian. В этом руководстве рассматриваются установка, настройка и лучшие практики.

Что такое unattended-upgrades?

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

  • Быстрого применения критических патчей безопасности
  • Автоматических обновлений в нерабочее время или в окна обслуживания
  • Упрощения отслеживания обновлений при управлении несколькими серверами

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

Установка

Ubuntu/Debian

hljs bash
# Установить пакет
sudo apt update
sudo apt install unattended-upgrades apt-listchanges -y

# Проверить установку
dpkg -l unattended-upgrades

# Проверить статус службы
systemctl status unattended-upgrades

Мастер автоматической настройки

hljs bash
# Автоматически настроить базовые параметры
sudo dpkg-reconfigure -plow unattended-upgrades
# Выберите "Yes"

Базовая конфигурация

Основной файл конфигурации: /etc/apt/apt.conf.d/50unattended-upgrades

hljs bash
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
    // Обновления безопасности Ubuntu
    "${distro_id}:${distro_codename}-security";

    // Все обновления (не рекомендуется — предпочтительно только безопасность)
    // "${distro_id}:${distro_codename}";
    // "${distro_id}:${distro_codename}-updates";
};

// Исключить определённые пакеты из обновлений
Unattended-Upgrade::Package-Blacklist {
    // "nginx";
    // "mysql-server";
    // "php*";
};

// Автоматическая перезагрузка после обновлений
Unattended-Upgrade::Automatic-Reboot "false";

// Время перезагрузки (только если Automatic-Reboot true)
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

// Удалять неиспользуемые зависимости
Unattended-Upgrade::Remove-Unused-Dependencies "true";

// Удалять неиспользуемые пакеты ядра
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";

// Уведомление по email
Unattended-Upgrade::Mail "admin@rexe.tr";

// Отправлять email только при изменениях
Unattended-Upgrade::MailReport "on-change";
// Варианты: "always", "only-on-error", "on-change"

// Вести журнал обновлений
Unattended-Upgrade::SyslogEnable "true";

Расписание обновлений

Частота обновлений настраивается в /etc/apt/apt.conf.d/20auto-upgrades:

hljs bash
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
// Обновлять список пакетов ежедневно
APT::Periodic::Update-Package-Lists "1";

// Загружать обновляемые пакеты ежедневно
APT::Periodic::Download-Upgradeable-Packages "1";

// Запускать unattended-upgrades ежедневно
APT::Periodic::Unattended-Upgrade "1";

// Очищать старый кэш пакетов каждые 7 дней
APT::Periodic::AutocleanInterval "7";

Значения указываются в днях. "1" = ежедневно, "7" = еженедельно, "0" = отключено.

Только обновления безопасности

Автоматическое применение только обновлений безопасности — наиболее безопасный подход для производственных серверов:

Unattended-Upgrade::Allowed-Origins {
    // ТОЛЬКО обновления безопасности
    "${distro_id}:${distro_codename}-security";
};

// Закомментировать все остальные источники обновлений
// "${distro_id}:${distro_codename}";
// "${distro_id}:${distro_codename}-updates";

Уведомления по email

Для уведомлений об обновлениях требуется mailutils или postfix:

hljs bash
# Установить mailutils
sudo apt install mailutils -y

# Для простой настройки SMTP
sudo apt install ssmtp -y
sudo nano /etc/ssmtp/ssmtp.conf
root=admin@rexe.tr
mailhub=smtp.gmail.com:587
AuthUser=ваш-email@gmail.com
AuthPass=ваш-пароль-приложения
UseTLS=YES
UseSTARTTLS=YES
hljs bash
# Тест email
echo "Тестовое сообщение" | mail -s "Тест обновления сервера" admin@rexe.tr

Тестирование конфигурации

Пробный запуск (Dry Run)

hljs bash
# Симулировать без фактического обновления
sudo unattended-upgrade --dry-run --debug

# Более подробный вывод
sudo unattended-upgrade -d --dry-run

Ручной запуск

hljs bash
# Запустить unattended-upgrades немедленно
sudo unattended-upgrade -d

# Запустить в подробном режиме
sudo unattended-upgrade --verbose

Просмотр файлов журнала

hljs bash
# Основной файл журнала
cat /var/log/unattended-upgrades/unattended-upgrades.log

# Журналы ошибок
cat /var/log/unattended-upgrades/unattended-upgrades-dpkg.log

# Мониторинг журнала в реальном времени
tail -f /var/log/unattended-upgrades/unattended-upgrades.log

Обновления ядра и перезагрузки

Обновления ядра требуют особого внимания:

hljs bash
# Проверить, требуется ли перезагрузка
cat /var/run/reboot-required

# Какие пакеты требуют перезагрузки
cat /var/run/reboot-required.pkgs

# Проверка необходимости перезагрузки
if [ -f /var/run/reboot-required ]; then
  echo "Требуется перезагрузка!"
fi

Настройка автоматической перезагрузки

// Включить автоматическую перезагрузку
Unattended-Upgrade::Automatic-Reboot "true";

// Время перезагрузки (2:00 ночи)
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

// Не перезагружать при активных пользователях
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";

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

Риски и меры по их снижению

Возможные риски

  1. Перебои в работе служб: некоторые обновления перезапускают службы
  2. Конфликты зависимостей: конфликты пакетов могут возникать в редких случаях
  3. Изменения конфигурации: обновления могут изменять файлы конфигурации
  4. Обновления ядра: требуют перезагрузки

Снижение рисков

Unattended-Upgrade::Package-Blacklist {
    // Критический сервер баз данных
    "mysql-server";
    "postgresql";
    // Веб-сервер
    "nginx";
    "apache2";
    // Ядро (для ручных обновлений)
    "linux-image*";
    "linux-headers*";
};
hljs bash
# Проверить статус служб после обновлений
systemctl --failed

# Регулярно проверять журналы
tail -100 /var/log/unattended-upgrades/unattended-upgrades.log

dnf-automatic для CentOS/AlmaLinux/RHEL

Системы на основе RPM используют dnf-automatic:

hljs bash
# Установить
sudo dnf install dnf-automatic -y

# Настроить
sudo nano /etc/dnf/automatic.conf
hljs ini
[commands]
# Только обновления безопасности
upgrade_type = security
# Автоматически применять обновления
apply_updates = yes

[emitters]
# Уведомление по email
emit_via = email
email_to = admin@rexe.tr
hljs bash
# Включить службу
sudo systemctl enable --now dnf-automatic.timer

# Проверить статус
sudo systemctl status dnf-automatic.timer

На системах Ubuntu и CentOS внимательно следите за файлами журналов в течение первой недели после включения автоматических обновлений. Это поможет вам обнаружить неожиданные проблемы на ранней стадии.

Заключение

unattended-upgrades — мощный инструмент для обеспечения безопасности серверов REXE. Автоматически применяя только обновления безопасности, добавляя критические пакеты в чёрный список и включая уведомления по email, вы можете поддерживать как безопасную, так и стабильную серверную среду. Регулярные проверки журналов и валидация в тестовой среде делают процесс автоматического обновления более надёжным.