Короткий ответ
На Ubuntu LTS security-обновления должны ставиться автоматически через unattended-upgrades с origin ${distro_id}:${distro_codename}-security (и ESM, если есть Ubuntu Pro). Это не apt full-upgrade/dist-upgrade без окна: замена пакетов universe и мажорные переходы — отдельно. Проверьте таймер, origins, логи /var/log/unattended-upgrades/. Не отключайте обновления «чтобы ничего не сломалось» — тогда ломает атакующий. Если автопатч уже ломает сервис: окно и pin, не полный запрет security.
Хост host.example (10.0.20.10), работы под admin.
Симптомы и как отличить
apt-get -s upgradeпоказывает пачки-security, они висят неделями;systemctl list-timers | grep aptпусто / disabled;- файл
20auto-upgradesс нулями; - политика «обновляем раз в год вручную».
| Сигнал | Не эта статья |
|---|---|
| Репозиторий 404 / NO_PUBKEY | сломан apt, чините sources |
| Автообновление уже ставит и валит nginx | ломает сервисы |
| Нет места на диске | сначала диск |
| Только phased updates задержаны | подождите/форс в окно |
Возможные причины
- Пакет
unattended-upgradesне установлен (минимальный cloud-образ). APT::Periodic::Unattended-Upgrade "0".- Origins не включают
-security, только${distro_codename}без кармана. apt-daily/apt-daily-upgrade.timermasked.- Зеркало без security, только «основной» archive.
- Hold на пакетах (
apt-mark hold). - Нет сети до
security.ubuntu.com/ ESM (egress). Firewall: не disable, а allow HTTPS к репо. См. firewall.
Диагностика
lsb_release -a
dpkg -l unattended-upgrades update-notifier-common 2>/dev/null | grep ^ii
systemctl status unattended-upgrades.service apt-daily.timer apt-daily-upgrade.timer --no-pager
systemctl list-timers apt-daily* --no-pagerКонфиг:
sudo apt-config dump | grep -E 'Unattended|Periodic'
sudo grep -vE '^#|^$' /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/50unattended-upgrades 2>/dev/null | head -n 80Что реально ждёт:
sudo apt-get update
apt-get -s upgrade | grep -E '^Inst ' | head
sudo unattended-upgrade --dry-run --debug 2>&1 | tail -n 40
ls -l /var/log/unattended-upgrades/Hold:
apt-mark showholdИсточники:
grep -rE 'deb |security' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/nullНа 24.04 часто ubuntu.sources в deb822. Читайте фактические файлы, не только sources.list.
Решение
Сценарий A. Включить только security unattended
sudo apt-get update
sudo apt-get install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgradesПроверьте /etc/apt/apt.conf.d/20auto-upgrades:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";В 50unattended-upgrades должны быть раскомментированы строки вида:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};ESM-строки имеют смысл при Ubuntu Pro; без Pro они просто не сработают, не выдумывайте ключи. Не включайте -updates и -backports в unattended, если политика — только security.
Отключите слепой ребут, пока нет окна:
Unattended-Upgrade::Automatic-Reboot "false";Ядра без ребута не полностью применяются. Ребут планируйте. Needrestart:
sudo apt-get install -y needrestartНе ставьте Automatic-Reboot true на БД без согласования.
Сценарий B. Таймеры masked
sudo systemctl unmask apt-daily.timer apt-daily-upgrade.timer
sudo systemctl enable --now apt-daily.timer apt-daily-upgrade.timerНе mask «чтобы не мешало 1С». Перенесите окно: OnCalendar drop-in, см. соседнюю статью про поломки.
Сценарий C. Ручной security сейчас, без dist-upgrade
sudo apt-get update
sudo apt-get install --only-upgrade -y $(apt-get -s upgrade | awk '/^Inst / && /security/ {print $2}')Если список пуст — unattended-upgrade -d. Не подменяйте это на dist-upgrade ради одного openssl.
Сценарий D. Нет egress до репозитория
Разрешите HTTPS (и HTTP, если зеркало http) к зеркалу в nft/UFW, HTTP proxy Acquire::http::Proxy. Не ufw disable.
После патчей имеет смысл baseline и аудит учёток, если хост давно не трогали.
Ubuntu 22.04 vs 24.04: на 24.04 источники часто Types: deb в /etc/apt/sources.list.d/ubuntu.sources. Security карман должен присутствовать явно (Components + Suites с -security или отдельный URI http://security.ubuntu.com/ubuntu). Dry-run unattended, который говорит «no allowed origin», почти всегда отсюда, не от «сломанного unattended».
Phased updates: пакет в security может быть не для 100% машин. Для сервера с политикой «закрыть CVE сегодня» в окне допустим APT::Get::Always-Include-Phased-Updates "true" точечно, не глобально навсегда без наблюдения. Не путайте фазу с «unattended выключен».
Прокси и TLS inspection: корпоративный HTTPS-break ломает подпись репозитория. Чините trust store, не Acquire::AllowInsecureRepositories. Egress firewall: allow к зеркалу по IP/имени, не disable UFW.
needrestart на 24.04 может предлагать рестарт ssh.service после libc — не рестартуйте sshd в той же SSH-сессии без второй. Unattended сам обычно не рестартит sshd агрессивно, если needrestart в режиме list; проверьте /etc/needrestart/needrestart.conf ($nrconf{restart}).
Ядро: пакеты linux-image-generic висят в reboot-required. Это не провал unattended. Имейте календарь. Старые ядра не удаляйте все до успешного boot в новое (linux-image-$(uname -r) живой).
Документируйте в заявке: дата последнего успешного /var/log/unattended-upgrades/unattended-upgrades.log, список hold, факт Pro/ESM. Без этого через полгода снова «вроде обновляется».
Как проверить, что проблема устранена
systemctl is-enabled unattended-upgrades
sudo unattended-upgrade --dry-run
ls -lt /var/log/unattended-upgrades/ | head
apt-get -s upgrade | grep security || echo 'no pending security in simulation'Ожидание: таймеры enabled, dry-run не ошибка origins, в логе недавний успешный прогон (после реальной ночи). Automatic-Reboot соответствует политике. Firewall активен.
Проверка версии пакета, который висел (пример имя пакета своё):
apt-cache policy opensslЕсли не помогло
- Dry-run: origin не матчится — поправьте Allowed-Origins под
apt-cache policy. - Phased updates:
echo 'APT::Get::Always-Include-Phased-Updates "true";'только осознанно. - Hold на libc6 — снимете hold в окно, не force.
- Зеркало внутреннее без security pocket — добавьте.
- Автоматически ставится universe и ломает — уберите лишние origins, не security.
- dpkg lock — не ломайте lock kill -9; дождитесь или разберите.
Профилактика
- Образ с пакетом unattended-upgrades.
- Мониторинг: возраст
apt-get -ssecurity, файл лога unattended, reboot required (/var/run/reboot-required). - Календарь ребутов отдельно от unattended install.
- Не
apt-mark holdна всё «на всякий».
FAQ
Чем upgrade отличается от dist-upgrade?
upgrade не удаляет пакеты ради зависимостей. dist-upgrade/full-upgrade может снять пакеты. Unattended по умолчанию ближе к контролируемому upgrade security. Не делайте dist-upgrade синонимом «просто обновить».
Нужен ли Ubuntu Pro?
Для расширенного ESM — по подписке. Без Pro security карманы LTS всё равно должны работать на стандартном сроке. Не выдумывайте токены.
Можно ли отключить unattended и патчить руками раз в квартал?
Плохая политика для security. Руками — kernel/major и приклад, security — автоматом.
unattended ставит и ребутает ночью
Automatic-Reboot false + таймер окна + мониторинг reboot-required. Не отключайте установку пакетов.
Это замена auditd?
Нет. Патчи закрывают известное. Аудит — след. auditd.