Automatische Sicherheitsupdates schützen Server vor bekannten Sicherheitslücken ohne manuellen Eingriff. Besonders kritische Patches werden so zeitnah eingespielt.

Warum automatische Updates?

Vorteile

  • Schnelle Reaktion: Sicherheitsupdates innerhalb von Stunden
  • Kein Vergessen: Updates passieren auch im Urlaub
  • Geringeres Risiko: Bekannte Lücken werden zeitnah geschlossen

Risiken

  • Unerwartete Änderungen: Selten, aber möglich
  • Neustart erforderlich: Manche Updates benötigen Reboot
  • Abhängigkeiten: Theoretisch können Updates etwas "kaputt" machen

Empfehlung: Nur Sicherheitsupdates automatisch, keine Feature-Updates.

Ubuntu/Debian: Unattended-Upgrades

Installation

apt update
apt install unattended-upgrades apt-listchanges

Automatische Aktivierung

dpkg-reconfigure -plow unattended-upgrades
# "Ja" auswählen

Konfiguration prüfen

cat /etc/apt/apt.conf.d/20auto-upgrades

Inhalt sollte sein:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Detaillierte Konfiguration

/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
    // Sicherheitsupdates (wichtigste)
    "${distro_id}:${distro_codename}-security";

    // Empfohlene Updates (optional)
    // "${distro_id}:${distro_codename}-updates";

    // Für ESM (Ubuntu Pro)
    // "${distro_id}ESMApps:${distro_codename}-apps-security";
    // "${distro_id}ESM:${distro_codename}-infra-security";
};

// Pakete vom Upgrade ausschließen
Unattended-Upgrade::Package-Blacklist {
    // "linux-image*";
    // "mysql-server*";
};

// Bei Upgrade-Problemen Mail senden
Unattended-Upgrade::Mail "admin@example.com";

// Nur bei Fehlern mailen
Unattended-Upgrade::MailReport "on-change";

// Ungenutzte Kernel entfernen
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";

// Ungenutzte Abhängigkeiten entfernen
Unattended-Upgrade::Remove-Unused-Dependencies "true";

// Automatischer Neustart wenn nötig (Vorsicht!)
// Unattended-Upgrade::Automatic-Reboot "true";
// Unattended-Upgrade::Automatic-Reboot-Time "02:00";

// Download-Limit
// Acquire::http::Dl-Limit "1000";

// Logging
Unattended-Upgrade::SyslogEnable "true";
Unattended-Upgrade::SyslogFacility "daemon";

Wichtigste Einstellungen

| Option | Empfehlung | Bedeutung | |--------|------------|-----------| | Allowed-Origins | Nur -security | Welche Quellen | | Package-Blacklist | kritische Pakete | Ausnahmen | | Mail | Admin-Adresse | Benachrichtigungen | | Automatic-Reboot | false | Automatischer Neustart | | Remove-Unused | true | Aufräumen |

E-Mail-Benachrichtigung einrichten

Postfix für lokale Mails

apt install postfix mailutils
# "Local only" auswählen

Test-Mail

echo "Test" | mail -s "Unattended-Upgrades Test" admin@example.com

Konfiguration für E-Mails

# /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::MailReport "on-change";
// oder "always" für jede Ausführung

Manueller Test

Dry-Run (Simulation)

unattended-upgrades --dry-run --debug

Echte Ausführung

unattended-upgrades -v

Logs prüfen

cat /var/log/unattended-upgrades/unattended-upgrades.log
tail -f /var/log/unattended-upgrades/unattended-upgrades.log

Zeitplan anpassen

Standard-Timer

systemctl status apt-daily.timer
systemctl status apt-daily-upgrade.timer

Timer anzeigen

systemctl list-timers | grep apt

Zeitpunkt ändern

# Override für apt-daily-upgrade erstellen
systemctl edit apt-daily-upgrade.timer
[Timer]
OnCalendar=
OnCalendar=*-*-* 4:00
RandomizedDelaySec=0
systemctl daemon-reload

Neustart-Management

Automatischen Neustart aktivieren (optional)

# /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";

Prüfen ob Neustart nötig

# Datei existiert wenn Neustart nötig
ls /var/run/reboot-required

# Details
cat /var/run/reboot-required.pkgs

Benachrichtigung statt automatischem Reboot

# Skript erstellen
cat > /usr/local/bin/check-reboot-required.sh << 'EOF'
#!/bin/bash
if [ -f /var/run/reboot-required ]; then
    echo "Neustart erforderlich auf $(hostname)" | \
    mail -s "Reboot Required: $(hostname)" admin@example.com
fi
EOF

chmod +x /usr/local/bin/check-reboot-required.sh

# Cron-Job
echo "0 8 * * * root /usr/local/bin/check-reboot-required.sh" >> /etc/crontab

Pakete ausschließen

Blacklist für kritische Pakete

Unattended-Upgrade::Package-Blacklist {
    // Datenbanken
    "mysql-server";
    "mariadb-server";
    "postgresql";

    // Kernel (wenn manuell verwaltet)
    // "linux-image*";
    // "linux-headers*";

    // Webserver
    // "nginx";
    // "apache2";
};

Regex-Patterns

Unattended-Upgrade::Package-Blacklist {
    "^libc";  // Alle Pakete die mit libc beginnen
};

CentOS/AlmaLinux/Rocky: dnf-automatic

Installation

dnf install dnf-automatic

Konfiguration

# /etc/dnf/automatic.conf

[commands]
# Nur Sicherheitsupdates
upgrade_type = security

# Updates herunterladen und installieren
download_updates = yes
apply_updates = yes

[emitters]
emit_via = email,stdio

[email]
email_from = root@localhost
email_to = admin@example.com
email_host = localhost

[base]
debuglevel = 1

Aktivieren

systemctl enable --now dnf-automatic.timer

Status prüfen

systemctl status dnf-automatic.timer
systemctl list-timers | grep dnf

Monitoring und Alerting

Update-Status überwachen

# Skript: /usr/local/bin/check-updates.sh
#!/bin/bash
UPDATES=$(apt list --upgradable 2>/dev/null | grep -c "upgradable")
if [ "$UPDATES" -gt 0 ]; then
    echo "WARN: $UPDATES updates pending"
    exit 1
fi
echo "OK: System up to date"
exit 0

Integration mit Monitoring

  • Nagios/Icinga: check_apt Plugin
  • Zabbix: apt.* Items
  • Prometheus: node_exporter + Textfile

Troubleshooting

Updates werden nicht installiert

# Logs prüfen
cat /var/log/unattended-upgrades/unattended-upgrades.log

# Debug-Modus
unattended-upgrades --dry-run --debug 2>&1 | less

APT ist gesperrt

# Prüfen ob APT läuft
ps aux | grep apt

# Lock-Datei prüfen
lsof /var/lib/dpkg/lock-frontend

Fehler bei bestimmten Paketen

# Manuell beheben
apt update
apt --fix-broken install
apt upgrade

Best Practices

Do's

  • Nur Sicherheitsupdates automatisch
  • E-Mail-Benachrichtigung aktivieren
  • Logs regelmäßig prüfen
  • Reboot-Required überwachen
  • Backup vor kritischen Systemen

Don'ts

  • Automatischen Reboot auf Produktivsystemen ohne Wartungsfenster
  • Alle Updates automatisch (nicht nur Security)
  • Kritische Datenbank-Updates automatisch

Zusammenfassung

# Ubuntu/Debian
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

# Test
unattended-upgrades --dry-run

# Logs
tail -f /var/log/unattended-upgrades/unattended-upgrades.log
# CentOS/AlmaLinux
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer

Fazit

Automatische Sicherheitsupdates sind für Server essentiell. Die Einrichtung unter Ubuntu/Debian mit unattended-upgrades ist einfach und zuverlässig. Beschränken Sie automatische Updates auf Sicherheits-Patches, richten Sie E-Mail-Benachrichtigungen ein und überwachen Sie, ob Neustarts erforderlich sind. Kritische Produktivsysteme sollten trotzdem regelmäßig manuell geprüft werden.