Zum Inhalt springen
SHIELDMYSERVER

Automatische Sicherheitsupdates einrichten

unattended-upgrades so konfiguriert, dass es wirklich läuft: Quellen prüfen, Neustartverhalten festlegen, Benachrichtigung einrichten und feststellen, ob je etwas eingespielt wurde.

kritischHeute erledigen. Ohne das ist der Server angreifbar.

veröffentlicht 13.08.2026 · 3 min

Titelbild: Automatische Sicherheitsupdates einrichten

Es gibt zwei Arten, einen Server zu verlieren. Die seltene ist ein gezielter Angriff auf eine unbekannte Lücke. Die häufige ist ein automatisierter Scan, der eine Lücke findet, für die seit sechs Wochen ein Patch bereitliegt.

Warum kritisch

Zwischen der Veröffentlichung einer Lücke und dem ersten öffentlichen Exploit liegen häufig nur Tage. Wer manuell patcht, misst diesen Abstand in Wochen und zwar genau so lange, bis er einmal vergisst hinzusehen. Das ist der Normalfall, kein Versagen.

Das Fenster, das du beeinflusst#

Zeitachse von der stillen Existenz einer Lücke über die CVE-Veröffentlichung und den öffentlichen Exploit bis zum eigenen Patch. Dazwischen ist das Risikofenster markiert.
Die Größe dieses Fensters ist die einzige Zahl, die du wirklich beeinflusst.

Auf den Zeitpunkt der Veröffentlichung hast du keinen Einfluss. Auf den Zeitpunkt, an dem der Patch auf deiner Maschine landet, schon und automatische Updates verkürzen diesen Abstand von Wochen auf Stunden, ohne dass jemand wach sein muss.

Einrichten#

sudo apt install -y unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades

Der zweite Befehl legt /etc/apt/apt.conf.d/20auto-upgrades an. Prüfen, dass darin beides auf "1" steht:

cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Die Einstellungen, die zählen#

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

Unattended-Upgrade::Origins-Pattern {
    "origin=Debian,codename=${distro_codename},label=Debian-Security";
    "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
};

// Kaputte Pakete nicht liegen lassen — sonst blockiert ein halber Zustand
// alle folgenden Läufe.
Unattended-Upgrade::AutoFixInterruptedDpkg "true";

// Alte Kernel und Abhängigkeiten entfernen, sonst läuft /boot voll.
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

// Neustart: bewusst entscheiden, siehe unten.
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";
Unattended-Upgrade::Automatic-Reboot-Time "04:30";

// Bei Fehlern melden. Ohne Mailweg: leer lassen und stattdessen überwachen.
Unattended-Upgrade::MailReport "on-change";
/boot läuft voll

Remove-Unused-Kernel-Packages ist kein Aufräumkomfort, sondern verhindert einen Ausfall: Eine volle /boot-Partition lässt Kernel-Updates fehlschlagen und zwar still. Der Server läuft weiter, bekommt aber keine Sicherheitsupdates mehr. Ein Fall, der monatelang unbemerkt bleibt.

Neustarten: ja oder nein?#

Die einzige Stelle, an der es eine echte Abwägung gibt.

LageEmpfehlung
Einzelner VPS, kein ErsatzAutomatic-Reboot "true" mit fester Uhrzeit
Zwei Maschinen hinter einem Load Balancermanuell, versetzt
Datenbank ohne Replikatmanuell, mit Wartungsfenster
Nur Kernel-Updates störenneedrestart und kexec prüfen

Ein Kernel-Update wirkt erst nach einem Neustart. Ein Server, der monatelang nicht neu startet, hat den Patch installiert, aber nicht in Betrieb:

# Läuft der Kernel, der installiert ist?
[ -f /var/run/reboot-required ] && cat /var/run/reboot-required.pkgs

Bei laufenden Diensten ohne kompletten Neustart hilft needrestart, das nur die betroffenen Dienste anfasst:

sudo apt install -y needrestart
sudo needrestart -r l          # zeigt, was neu gestartet werden müsste

Prüfen, ob es tatsächlich läuft#

Der wichtigste Abschnitt. Eine eingerichtete Automatik, die nie läuft, ist gefährlicher als keine, weil man sich auf sie verlässt.

# Probelauf, ohne etwas zu installieren
sudo unattended-upgrades --dry-run --debug

# Was wurde tatsächlich eingespielt?
sudo tail -40 /var/log/unattended-upgrades/unattended-upgrades.log

# Laufen die Timer überhaupt?
systemctl list-timers 'apt-daily*'

Wenn die Logdatei leer ist oder der letzte Eintrag Monate alt: Die Timer sind abgeschaltet oder die Origins-Angabe passt nicht zur Distribution. Beides passiert nach einem Distributions-Upgrade regelmäßig.

In die Überwachung hängen#

Ein Wert, der zeigt, ob die Maschine hinterherhinkt:

# Wie viele Sicherheitsupdates stehen aus?
apt-get -s -o Debug::NoLocking=true upgrade \
  | grep -c '^Inst.*-security'

# Wie alt ist der letzte erfolgreiche Lauf (in Tagen)?
echo $(( ( $(date +%s) - $(stat -c %Y /var/log/unattended-upgrades/unattended-upgrades.log) ) / 86400 ))

Beide Zahlen gehören ins Monitoring, Details dazu in Protokolle, die den Angreifer überleben. Sinnvolle Schwellen: mehr als 0 ausstehende Sicherheitsupdates seit über 48 Stunden, oder letzter Lauf älter als 3 Tage.

Was bewusst nicht automatisch läuft#

Automatische Updates gelten hier nur für Sicherheitsquellen der Distribution. Nicht automatisch:

  • Hauptversionssprünge der Distribution. Siehe Distribution aktualisieren, ohne den Dienst zu verlieren.
  • Anwendungen aus Fremdquellen, Container-Images, Sprachpakete, alles was nicht aus dem Distributionsarchiv kommt. Die haben ihren eigenen Rhythmus.
  • Datenbanken. Ein Schemawechsel um vier Uhr morgens ist kein Sicherheitsgewinn.

Für alles außerhalb des Distributionsarchivs braucht es einen eigenen, bewussten Ablauf mit Rückweg: Wartungsfenster und der Weg zurück.

MRMedia

Geschrieben aus dem laufenden Betrieb: MRMedia betreibt eigene Hosts, Kundendienste und deren Härtung in der EU. Eine veraltete Anleitung ist hier ein Sicherheitsproblem, kein Schönheitsfehler. Korrekturen bitte über Discord.