Linux

Verschiedene Grundlagen zum Linux Kernel bzw. insbesondere zu diversen Linux Distributionen. SystemD, Autostart, Desktopumgebungen, SSH, ...

Autostart

Je nach Linux Distribution stehen verschiedene Möglichkeiten zur Auswahl, um Programme automatisch zu starten

GUI (z. B. KDE, Gnome, Xfce)

Bei Distributionen mit einer grafischen Desktopumgebung wie z. B. Ubuntu (Gnome), Linux Mint (KDE, Xfce, Cinnamon, Mate) oder Debian (KDE) gibt es in der Regel ein Programm mit dem Namen Autostart.

grafik.png

In dem Einstellungsfenster können nun für den aktuellen Benutzer Programme hinterlegt werden, welche beim Anmelden automatisch gestartet werden sollen. Dazu einfach auf das Pluszeichen oder Hinzufügen klicken. Es können nicht nur Programme ausgewählt werden, sondern auch An- und Abmelde Skripte, die ausgeführt werden sollen. Der folgende Screenshot zeit das Menü Autostart der Distribution Manjaro mit KDE als Desktopumgebung.

grafik.png

Als Beispiel wird nun Anwendung hinzufügen ausgewählt, was der häufigste Anwendungsfall sein dürfte. In dem Fall öffnet sich ein neues Fenster, in dem nun das Programm ausgewählt werden kann. Oben wird ein Suchfeld angezeigt, in das der Name des Programms oder ein Teil davon eingegeben werden kann, um die Liste zu durchsuchen.

grafik.png

Wird das Programm mit OK bestätigt, zeigt das Einstellungsfenster es nun in der Liste der Autostart Programme an. Dort kann es jederzeit wieder bearbeitet oder entfernt werden. Natürlich lassen sich noch weitere Programme oder Skripte zum Autostart hinzufügen.

grafik.png

Dateien live einlesen

Bei Logdateien ist es häufig hilfreich, wenn diese konstant eingelesen und dargestellt werden.

Hierfür bietet sich das Tool tail an. Angenommen wir haben eine Logdatei /var/log/mysql/abfragen.log. In diese Logdatei werden alle Abfragen eines MySQL-Servers geschrieben. Wenn nun live im Log gelesen werden soll, welche Abfragen gerade ausgeführt werden, so geht dies mit dem folgenden Befehl.

tail -f /var/log/mysql/abfragen.log

Wird der Befehl ausgeführt, wird die Datei geöffnet und ans Ende gesprungen. Ab dann werden alle neuen Einträge im Terminal angezeigt.

grafik.png

Automatische Updates

Um Linux Server automatisch auf dem neusten Stand zu halten und somit den besten Schutz gegen Angriffe bieten zu können, bieten sich die automatischen Updates an.

Automatische Sicherheitsupdates aktivieren

Hierfür steht das Paket unattended-upgrades bereit, welches ggf. mit folgenden Befehl nachinstalliert werden muss:

sudo apt -y install unattended-upgrades

Nach der Installation können die Auto-Updates wie folgt aktiviert werden:

sudo dpkg-reconfigure -plow unattended-upgrades

Zusätzlich sind noch einige Einstellungen vorzunehmen, damit auch wirklich alle Updates automatisch eingespielt werden.

Zuerst wird der automatische Neustart aktiviert, damit nach der Installation von Updates auch ein Neustart, sofern notwendig, durchgeführt wird. Hierfür ist die Konfigurationsdatei /etc/apt/apt.conf.d/50unattended-upgrades anzupassen. Diese enthält diverse Einstellungen, also am besten nach Automatic-Reboot suchen, auskommentieren und auf true ändern, wie im folgenden Beispiel zu sehen.

// Automatically reboot *WITHOUT CONFIRMATION* if
//  the file /var/run/reboot-required is found after the upgrade
Unattended-Upgrade::Automatic-Reboot "true";

Sicherheits- und Standard-Pakete aktualisieren

Die Datei noch nicht schließen, denn standardmäßig werden nur Sicherheitsupdates installiert. Also in der selben Konfigurationsdatei nach folgender Zeile suchen und die Kommentarzeichen entfernen.

"${distro_id}:${distro_codename}-updates";

Zeitpunkt der Suche/Installation anpassen

Nun können wir noch den Zeitpunkt anpassen, wann nach Updates gesucht und wann diese Installiert werden sollen. Dazu dient der folgenden Befehl, mit dessen Hilfe die Konfigurationsdatei bearbeitet wird.

sudo systemctl edit apt-daily.timer

Daraufhin öffnet sich die Konfiguration für die Update-Suche. Um die Updates z. B.  jeden Tag um 01:00 Uhr automatisch suchen zu lassen, wird die Update-Suche wie folgt konfiguriert.

### Editing /etc/systemd/system/apt-daily.timer.d/override.conf
### Anything between here and the comment below will become the new contents of the file

[Timer]
OnCalendar=
OnCalendar=01:00
RandomizedDelaySec=0

### Lines below this comment will be discarded

### /lib/systemd/system/apt-daily.timer
# [Unit]
# Description=Daily apt download activities
# 
# [Timer]
# OnCalendar=*-*-* 6,18:00
# RandomizedDelaySec=12h
# Persistent=true
# 
# [Install]
# WantedBy=timers.target

Die Konfiguration für die Installation der Updates könnte z. B. wie folgt gestaltet werden, um diese eine halbe Stunde nach der Suche zu installieren.

sudo systemctl edit apt-daily-upgrade.timer

Und folgendes in die Konfigurationsdatei.

### Editing /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
### Anything between here and the comment below will become the new contents of the file

[Timer]
OnCalendar=
OnCalendar=01:30
RandomizedDelaySec=0

### Lines below this comment will be discarded

### /lib/systemd/system/apt-daily-upgrade.timer
# [Unit]
# Description=Daily apt upgrade and clean activities
# After=apt-daily.timer
# 
# [Timer]
# OnCalendar=*-*-* 6:00
# RandomizedDelaySec=60m
# Persistent=true
# 
# [Install]
# WantedBy=timers.target

Nun noch die Dienste neu starten und den Status prüfen.

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

Unter /var/log/unattended-upgrades/ werden die verschiedenen Logs für Update-Suche, Installation und Neustart abgelegt. Das Log /var/log/unattended-upgrades/unattended-upgrades.log enthält z. B. die wichtigsten Informationen zu installierten Updates und Neustart.

Zusätzliche Pakete aktualisieren

Wenn auf einem System zusätzliche Paketquellen wie z. B. für Docker hinzugefügt wurden, dann müssen diese manuell mit aufgenommen werden.

Mit folgenden Befehl können alle Paketquellen des Systems eingelesen werden.

ls -l /var/lib/apt/lists/ | grep "Release"
# Optional kann auch der folgende Befehl genutzt werden, um verschiedene Standard-Paketquellen rauszufiltern
ls -l /var/lib/apt/lists/ | grep "Release" | grep -v "security.ubuntu.com\|asi-fs-n."

Die Ausgabe könnte z. B. wie folgt aussehen.

grafik.png

Hier sehen wir nun oben die Standard-Pakete von Contabo unter Ubuntu und ganz unten eine Paketquelle von Docker, die zur Zeit nicht aktualisiert wird. Also ermitteln wir zuerst einige Informationen über diese Paketquelle mit folgendem Befehl.

cat /var/lib/apt/lists/download.docker.com_linux_ubuntu_dists_jammy_InRelease | grep "Origin\|Suite"

In diesem Fall wird nun folgendes ausgegeben.

grafik.png

Jetzt können wir das Docker Paket hinzufügen, indem wir wieder die Datei /etc/apt/apt.conf.d/50unattended-upgrades bearbeiten. In dieser fügen wir die Zeilen in folgendem Abschnitt zwischen den geschweiften Klammern hinzu. Das Format für die Eingabe ist: "<Origin>:<Suite>";und somit in diesem Fall: "Docker:jammy";.

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
        "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

Danach sieht der Abschnitt wie folgt aus und wir speichern die Änderung.

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
        "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
        "Docker:jammy";
};

Nun das ganze einmal mit folgendem Befehl testen.

sudo unattended-upgrade --dry-run --debug

Jetzt sollten auch die Docker Updates angewendet werden. Aufgrund des Parameters --dry-run wird der Vorgang nur simuliert und nimmt keine Änderungen am System vor.