Автоматические обновления: руководство по unattended-upgrades
Установка и настройка unattended-upgrades, только обновления безопасности, уведомления по email, тестирование, риски и меры по их снижению.
Содержание
Автоматические обновления: руководство по unattended-upgrades
Одно из фундаментальных требований безопасности сервера — своевременное применение патчей безопасности. Забывание о ручных обновлениях может оставить ваш сервер уязвимым к известным эксплойтам. Пакет unattended-upgrades автоматически применяет обновления безопасности на системах Ubuntu и Debian. В этом руководстве рассматриваются установка, настройка и лучшие практики.
Что такое unattended-upgrades?
unattended-upgrades — плагин APT, который автоматически загружает и устанавливает обновления безопасности без вмешательства человека. Идеально подходит для:
- Быстрого применения критических патчей безопасности
- Автоматических обновлений в нерабочее время или в окна обслуживания
- Упрощения отслеживания обновлений при управлении несколькими серверами
Автоматические обновления иногда могут вызывать перебои в работе служб. Обновления ядра в особенности требуют перезагрузки. Тщательно настраивайте в производственных средах.
Установка
Ubuntu/Debian
# Установить пакет
sudo apt update
sudo apt install unattended-upgrades apt-listchanges -y
# Проверить установку
dpkg -l unattended-upgrades
# Проверить статус службы
systemctl status unattended-upgrades
Мастер автоматической настройки
# Автоматически настроить базовые параметры
sudo dpkg-reconfigure -plow unattended-upgrades
# Выберите "Yes"
Базовая конфигурация
Основной файл конфигурации: /etc/apt/apt.conf.d/50unattended-upgrades
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:
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:
# Установить 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
# Тест email
echo "Тестовое сообщение" | mail -s "Тест обновления сервера" admin@rexe.tr
Тестирование конфигурации
Пробный запуск (Dry Run)
# Симулировать без фактического обновления
sudo unattended-upgrade --dry-run --debug
# Более подробный вывод
sudo unattended-upgrade -d --dry-run
Ручной запуск
# Запустить unattended-upgrades немедленно
sudo unattended-upgrade -d
# Запустить в подробном режиме
sudo unattended-upgrade --verbose
Просмотр файлов журнала
# Основной файл журнала
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
Обновления ядра и перезагрузки
Обновления ядра требуют особого внимания:
# Проверить, требуется ли перезагрузка
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";
Перед включением автоматических перезагрузок оцените, может ли ваше приложение переносить перезапуски. Для критических производственных систем предпочтительны ручные перезагрузки.
Риски и меры по их снижению
Возможные риски
- Перебои в работе служб: некоторые обновления перезапускают службы
- Конфликты зависимостей: конфликты пакетов могут возникать в редких случаях
- Изменения конфигурации: обновления могут изменять файлы конфигурации
- Обновления ядра: требуют перезагрузки
Снижение рисков
Unattended-Upgrade::Package-Blacklist {
// Критический сервер баз данных
"mysql-server";
"postgresql";
// Веб-сервер
"nginx";
"apache2";
// Ядро (для ручных обновлений)
"linux-image*";
"linux-headers*";
};
# Проверить статус служб после обновлений
systemctl --failed
# Регулярно проверять журналы
tail -100 /var/log/unattended-upgrades/unattended-upgrades.log
dnf-automatic для CentOS/AlmaLinux/RHEL
Системы на основе RPM используют dnf-automatic:
# Установить
sudo dnf install dnf-automatic -y
# Настроить
sudo nano /etc/dnf/automatic.conf
[commands]
# Только обновления безопасности
upgrade_type = security
# Автоматически применять обновления
apply_updates = yes
[emitters]
# Уведомление по email
emit_via = email
email_to = admin@rexe.tr
# Включить службу
sudo systemctl enable --now dnf-automatic.timer
# Проверить статус
sudo systemctl status dnf-automatic.timer
На системах Ubuntu и CentOS внимательно следите за файлами журналов в течение первой недели после включения автоматических обновлений. Это поможет вам обнаружить неожиданные проблемы на ранней стадии.
Заключение
unattended-upgrades — мощный инструмент для обеспечения безопасности серверов REXE. Автоматически применяя только обновления безопасности, добавляя критические пакеты в чёрный список и включая уведомления по email, вы можете поддерживать как безопасную, так и стабильную серверную среду. Регулярные проверки журналов и валидация в тестовой среде делают процесс автоматического обновления более надёжным.
Связанные статьи
Подключение к VDS по SSH: PuTTY, терминал и SSH-ключи
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Подключение к Windows VDS по RDP: полное руководство
Пошаговое руководство по RDP-подключению к Windows Server VDS: настройка, безопасность NLA, правило фильтрации Path Panel и устранение неполадок.
Смена ОС VDS-сервера: пошаговое руководство (Reinstall)
Смена операционной системы VDS через панель REXE: советы по резервному копированию, поддерживаемые дистрибутивы Linux и версии Windows Server.