Automatische Updates für Linux Server

Updates sind enorm wichtig für die Sicherheit von Servern, Anwendungen und natürlich Netzwerken. Im besten Fall bringt ein Softwarehersteller umgehend nach der Entdeckung einer Schwachstellen ein Update heraus, dass die besagte Sicherheitslücke schließt und somit Angriffe verhindert. Das funktioniert leider nur, solange diese Updates auch installiert werden. Ein Großteil der Schwachstellen, die wir in Penetrationstests entdecken sind keine neuen Sicherheitslücken, sondern alte Bekannte, denen wir immer wieder über den Weg laufen.

Im heutigen Beitrag möchte ich daher unattended-upgrades vorstellen, ein Programm, das Administratoren von Linux Servern dabei hilft, auf dem aktuellen Softwarestand zu bleiben. Da unattended-upgrades auf dem Paketmanager apt aufbaut, richtet sich dieser Beitrag an Administratoren von Debian- oder Ubuntu-basierten Derivaten. SUSE, RedHat und CentOS haben für diesen Zweck ihre eigenen Lösungen, beispielsweise Yast2 Online Update und Yum-Cron.

Die Installation erfolgt kurz und schmerzlos über apt install unattended-upgrades apt-listchanges. Anschließend muss lediglich konfiguriert werden, welche Updates installiert werden sollen und zu welchem Zeitpunkt.

Als Erstes muss unattended-upgrades und das regelmäßige Aktualisieren der Paketlisten (apt update) aktiviert werden.

$ sudo vi /etc/apt/apt.conf.d/10periodic 
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Anschließend können die bevorzugten Einstellungen festgelegt werden.

$ sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
// Legt fest, aus welchen Repositories Updates installiert werden sollen (z.B. ubuntu/xenial und ubuntu/xenial-security)
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

// Liste an Paketen, die auf keinen Fall aktualisiert werden sollen. Unterstützt Regex-Angaben (z.B. "libc.*")
Unattended-Upgrade::Package-Blacklist {
//      "libc6";
};

// Gibt an, ob nach den Updates automatische Reboots durchgeführt werden sollen (wenn nötig, z.B. für Kernel-Updates) und zu welchem Zeitpunkt.
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "06:00";

// Gibt an, ob Updates in kleinen Schritten installiert werden sollen. Vorteilhaft, wenn das Update abgebrochen werden muss oder schiefgeht.
Unattended-Upgrade::MinimalSteps "true";

// Gibt an, ob unnötige Pakete nach den Updates entfernt werden sollen (apt-get autoremove)
Unattended-Upgrade::Remove-Unused-Dependencies "true";

Es sind noch weitere Optionen verfügbar. Beispielsweise können Updates nur beim Herunterfahren des Rechners installiert oder die Downloadgeschwindigkeit für Updates gedrosselt werden. Mehr dazu gibt es im Debian Wiki Eintrag dazu zu finden.

Testen lässt sich das Ganze mit dem Befehl sudo unattended-upgrade -v -d, bzw. sudo unattended-upgrade -v -d --dry-run.

Monitoring - Benachrichtigungen via E-Mail

Natürlich kann es passieren, dass bei Updates mal ein Fehler auftritt. Aus diesem Grund sollte eine Reporting-Funktion eingerichtet werden. Wer seine Server mit einem Monitoring-Programm wie z.B. Icinga2 oder Nagios verwaltet, kann dies über das apt-Plugin prüfen, ob alle Updates installiert wurden. Falls nicht, lässt sich über die Logs in /var/log/apt/ und /var/log/unattended-upgrades/ prüfen was schiefgegangen ist.

Alternativ kann unattended-upgrades auch E-Mails an den Administrator verschicken.

$ sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
...
// E-Mail-Adressen für Update-Berichte, benötigt das Programm 'mailx'.
Unattended-Upgrade::Mail "vedi.vini.pwny@lastbreach.com";

// Legt fest, ob E-Mails bei jedem Update oder nur bei Fehlern verschickt werden sollen
Unattended-Upgrade::MailOnlyOnError "true";

Für die E-Mails ist jedoch erforderlich, dass das System auch Mails verschicken kann. Wie das geht, zeige ich im nächsten Beitrag.