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 |
o | origin | Docker |
a | archive | buster |
n | codename | hier nicht gesetzt |
l | label | Docker CE |
c | component | stable |
https://artifacts.elastic.co/packages/7.x/apt | ||
---|---|---|
Schlüsselwort (Abkürzung) | Schlüsselwort (vollständiger Name) | Wert |
o | origin | elastic |
a | archive | stable |
n | codename | stable |
l | label | . stable |
c | component | main |
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:
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