Серверы из готового образа месяцами не получали обновления безопасности Ubuntu
На четырех серверах с Ubuntu 24.04, созданных из образа хостера 20 июля, unattended-upgrades с июля не установил ни одного пакета. Причина в файле источников apt: в нем не оказалось карманa noble-security, где Canonical публикует исправления безопасности.
Главное в цифрах
- Пакетов с исправлениями на каждом из четырех серверов: от 53 до 58
- Доступных обновлений после возврата строфы noble-security: от 182 до 197 на сервер
- Обновлений безопасности накопилось на серверах другого проекта: от 14 до 118
- Время перезагрузки самого долгого сервера: около 3 минут
Нашлось это 2 ноября, когда панель мониторинга начала сверять установленные пакеты с базой уязвимостей Canonical. На каждом из четырех серверов оказалось от 53 до 58 пакетов, для которых исправление уже вышло, но установлено не было. Среди них openssl в версии 3.0.13-0ubuntu3.11 при исправленной 3.0.13-0ubuntu3.16, а также glibc, openssh, mysql-8.0 и brotli.
В файле /etc/apt/sources.list.d/ubuntu.sources остались три кармана, а строфа с noble-security пропала. Рядом лежит ubuntu.sources.curtin.orig от установщика Ubuntu, где эта строфа на месте. Похоже, при сборке образа источники перевели на российское зеркало, а строфу с безопасностью потеряли.
Почему unattended-upgrades ничего не видел
Исправления безопасности Ubuntu публикуются в noble-security, и многие из них потом попадают и в noble-updates. Unattended-upgrades по умолчанию берет пакеты только из самого релиза и из -security, а строка с -updates в его конфиге закомментирована. Поэтому исправления, которые лежат только в noble-security, на сервере не видны вовсе, а часть обновлений из noble-updates пропускается.
На стенде с чистым ubuntu:24.04 это воспроизвели: без строфы apt показывал обновление, но ставить было нечего. После возврата строфы доступных пакетов стало два, для libpcre2-8-0. На реальных серверах после исправления источников встало от 182 до 197 пакетов на сервер.
Мониторинг показывал ноль
Apt помечает обновление безопасности по карману, из которого оно пришло: в выводе apt list это строка вида openssl/noble-updates,noble-security. Без подключенного noble-security такой пометки нет ни у одного пакета. Панель считала обновления безопасности именно так и показывала ноль при 197 доступных обновлениях.
На серверах другого проекта, тоже созданных из готового образа, таймеры apt не срабатывали ни разу. Службы apt-daily и apt-daily-upgrade в образе были замаскированы, и к моменту проверки на серверах накопилось от 14 до 118 обновлений безопасности.
Что сделали
Вернули стандартную строфу из образа Ubuntu, сняли маску только с apt-daily и apt-daily-upgrade и добавили отдельный файл для PHP из PPA ondrej/php, чтобы патч-релизы PHP ставились автоматически. Метапакеты без версии в нем запрещены, иначе php-fpm подтянул бы новую ветку PHP. После обновления встало новое ядро 6.8.0-147, серверы перезагрузили по одному. Дольше всех поднимался сервер приложения, около 3 минут.

