Debian-VM


LRZ-Update-Mechanismus

Funktionsweise

Durch einen Cronjob (/etc/cron.d/lrz-base) wird gemäß LRZ-Standard-Policy zweimal täglich das Skript /usr/sbin/update-debian.sh ausgeführt, welches sich um Paketupdates und das LRZ-seitige Monitoring der VM kümmert.

Für die Paketupdates wird der in Debian nativ vorhandene unattended-upgrades Mechanismus von unserem Skript ausgelöst. Um Redundanzen zu vermeiden, sind dessen eigene Automatismen deaktiviert.
Die genaue Konfiguration von unattended-upgrades lässt sich unter /etc/apt/apt.conf.d/90lrz-base-unattended-upgrades bearbeiten. Dort wird definiert, aus welchen Repositories Updates installiert werden sollen und welche Pakete eventuell nicht angefasst werden dürfen.

Diese Datei sollte mit Vorsicht behandelt werden, um Fehlkonfigurationen von wichtigen Sicherheitsupdates zu vermeiden.

Bitte beachten:

Standardmäßig werden nur jene Repositories vom LRZ-Update-Mechanismus abgedeckt, welche bei der Auslieferung der VM vorkonfiguriert sind! Dies sind die Debian-Standard-Repositories inkl. "debian-security" und "volatile", sowie das LRZ-eigene Repository, welches zusätzliche Software bereitstellt.

Falls weitere externe Repositories in das System eingebunden werden, so muss man diese selbst in die Konfigurationsdatei /etc/apt/apt.conf.d/90lrz-base-unattended-upgrades zusätzlich eintragen, damit auch hier automatische Updates stattfinden können! Anderenfalls müssen deren Pakete regelmäßig (d.h. spätestens alle 7 Tage) manuell auf den neuesten Stand gebracht werden!


Einbinden zusätzlicher Repositories in den Update-Mechanismus

Zunächst müssen ein paar Variablen für die Repositories ermittelt werden, die man dann für die Update-Konfiguration verwenden kann. Hierfür ist das Kommando apt-cache policy hilfreich:

root@linux:~# apt-cache policy
Package files:
 100 /var/lib/dpkg/status
     release a=now
 500 https://download.docker.com/linux/debian buster/stable amd64 Packages
     release o=Docker,a=buster,l=Docker CE,c=stable,b=amd64
     origin download.docker.com
 500 https://artifacts.elastic.co/packages/7.x/apt stable/main amd64 Packages
     release o=elastic,a=stable,n=stable,l=. stable,c=main,b=amd64
     origin artifacts.elastic.co
 500 http://debian.mirror.lrz.de/debian-lrz buster/non-free amd64 Packages
     release o=LRZ,a=stable,n=buster,c=non-free,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian-lrz buster/main amd64 Packages
     release o=LRZ,a=stable,n=buster,c=main,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian buster-updates/non-free amd64 Packages
     release o=Debian,a=stable-updates,n=buster-updates,l=Debian,c=non-free,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian buster-updates/main amd64 Packages
     release o=Debian,a=stable-updates,n=buster-updates,l=Debian,c=main,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian-security buster/updates/non-free amd64 Packages
     release v=10,o=Debian,a=stable,n=buster,l=Debian-Security,c=non-free,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian-security buster/updates/main amd64 Packages
     release v=10,o=Debian,a=stable,n=buster,l=Debian-Security,c=main,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian buster/contrib amd64 Packages
     release v=10.4,o=Debian,a=stable,n=buster,l=Debian,c=contrib,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian buster/non-free amd64 Packages
     release v=10.4,o=Debian,a=stable,n=buster,l=Debian,c=non-free,b=amd64
     origin debian.mirror.lrz.de
 500 http://debian.mirror.lrz.de/debian buster/main amd64 Packages
     release v=10.4,o=Debian,a=stable,n=buster,l=Debian,c=main,b=amd64
     origin debian.mirror.lrz.de
Pinned packages:


In diesem Beispiel betrachten wir die manuell hinzugefügten Docker- und Elastic-Repositories und deren Release-Schlüsselwörter genauer:


https://download.docker.com/linux/debian
Schlüsselwort
(Abkürzung)
Schlüsselwort
(vollständiger Name)
Wert
oorigin

Docker

aarchivebuster
ncodenamehier nicht gesetzt
llabelDocker CE
ccomponentstable


https://artifacts.elastic.co/packages/7.x/apt
Schlüsselwort
(Abkürzung)
Schlüsselwort
(vollständiger Name)
Wert
oorigin

elastic

aarchivestable
ncodenamestable
llabel. stable
ccomponentmain


Mit Hilfe dieser Informationen lassen sich nun entsprechende Regeln in die Konfigurationsdatei /etc/apt/apt.conf.d/90lrz-base-unattended-upgrades einfügen. Die zu modifizierende Sektion bzw. APT-Variable lautet Unattended-Upgrade::Origins-Pattern. Hier befinden sich bereits die von uns vorkonfigurierten Standard-Regeln für die Updates aus den Standard-Repositories. Ein einfaches Hinzufügen einer neuen Zeile pro Repository genügt. Für das Docker- und Elastic-Repository könnte die Konfiguration z.B. so aussehen:

/etc/apt/apt.conf.d/90lrz-base-unattended-upgrades
Unattended-Upgrade::Origins-Pattern {
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
        "origin=LRZ,codename=${distro_codename}";                               // LRZ-provided packages, do not disable!
        "origin=Debian,codename=${distro_codename},label=Debian-Security";      // security fixes
        "origin=Debian,codename=${distro_codename},label=Debian";               // point releases, important but not security relevant
        "origin=Debian,codename=${distro_codename}-updates";                    // selected ("volatile") updates outside point releases (i.e. clamav)
        "origin=Docker,label=Docker CE";                                        // Docker CE packages
        "origin=elastic,codename=stable";                                       // Elastic packages
};

Bitte auf keinen Fall eine der bereits vorhandenen Regeln in irgendeiner Weise modifizieren oder gar löschen! Dies könnte die Sicherheit Ihres Systems gefährden und zur Abschaltung Ihrer VM führen!


Durch diese Konfiguration werden nun auch alle Pakete der eingebundenen Docker- und Elastic-Repositories vom LRZ-Update-Mechanismus vollständig erfasst.


Automatischer Reboot

Falls Updates installiert werden, die einen Reboot erfordern (derzeit unter Debian nur Kernelupdates), wird ein "Flag" (/var/run/lrz-base-reboot-required) gesetzt.
Die Existenz dieses Flags wird durch einen weiteren Cronjob (/etc/cron.d/lrz-base-automatic-reboot) in regelmäßigen Abständen geprüft und dann der Server automatisch rebootet, falls nötig.

Die Zeiten, in denen ein automatischer Reboot erfolgen darf, werden durch diesen Cronjob geregelt und können bei Bedarf angepasst werden.
Das Standardzeitfenster ist von Montag bis Freitag zwischen 07:00 und 07:30 definiert.
Von einer kompletten Deaktivierung raten wir jedoch dringend ab.


Security

Host-Firewall

Auf den Debian-VMs des LRZ wird die "Uncomplicated Firewall" (UFW) als Host-Firewall-Lösung verwendet. Diese ist im Auslieferungszustand aktiviert und lässt lediglich den SSH-Zugriff von einem oder mehrerer bei der Bestellung angegebenen Subnetze bzw. IP-Adressen zu. Alle anderen Zugriffe werden blockiert.

Eine ausführliche Anleitung zur Konfiguration der UFW finden Sie hier: https://help.ubuntu.com/community/UFW

Zugriff über SSH: Zusätzliche Systemgruppe ssh-login

Als zusätzlichen Sicherheitsmechanismus hat das LRZ ab Debian 10 (Buster) eine zusätzliche Systemgruppe mit dem Namen ssh-login auf den Debian-Systemen eingeführt. Nur Benutzer, die dieser Gruppe angehören, können sich per SSH in das System einloggen. Dies dient als zusätzliche Sicherungsschicht gegen ungewollte Login-Versuche auf Systembenutzer oder weitere lokale Benutzer, die nicht explizit für den Remote-Login auf den Systemen vorgesehen sind.

Um z.B. einen Benutzer joe in die Gruppe ssh-login aufzunehmen, kann eines der beiden folgenden Kommandos verwendet werden. Diese sind gleichwertig:

root@linux:~# adduser joe ssh-login

ODER

root@linux:~# usermod -aG ssh-login joe