Короткий ответ

На 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 задержаныподождите/форс в окно

Возможные причины

  1. Пакет unattended-upgrades не установлен (минимальный cloud-образ).
  2. APT::Periodic::Unattended-Upgrade "0".
  3. Origins не включают -security, только ${distro_codename} без кармана.
  4. apt-daily/apt-daily-upgrade.timer masked.
  5. Зеркало без security, только «основной» archive.
  6. Hold на пакетах (apt-mark hold).
  7. Нет сети до 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 -s security, файл лога 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.