Der Begriff systemd
wird immer umfassender da es sich nicht mehr (wie ursprünglich) nur um ein init
Systemd handelt, sondern immer weitere Komponenten hinzugefügt wurden. Wir werden uns nicht mit allen Komponenten beschäftigen, aber mit den wichtigsten für deine Arbeit.
systemd
gibtsystemd
(core und ancillary) und für was diese da sindsystemd
unit
isttimer
verwendestmount
units verwendestresolved
funktioniertDie offizielle systemd Dokumentation für sämtliche Komponenten findest Du hier:
Freedesktop
Show archive.org snapshot
Du kannst auch die man pages mit den gleichen Inhalten verwenden z.b. man systemd.service
oder man systemd.timer
man loginctl
man file-hierarchy
Erstelle dir eine Anwendung für einen Service
Für Testzwecke brauchst du eine einfache App die du später als Service starten kannst. Du kannst dir die
badapp
Show archive.org snapshot
herunterladen. Das ist eine Go binary, die du erst ausführbar machen musst. Anschließend kannst du diese mit ./badapp
starten. Die Anwendung startet einen Webserver. Mit curl localhost:8080
kannst du testen ob es funktioniert.
Erstelle einen systemd Service der badapp
startet.
Wenn die App erfolgreich startet, versuche als nächstes deinen Service so anzupassen, dass der Service automatisch neu gestartet wird, wenn er abstürzt. Stelle aber sicher, dass das nicht unendlich oft passieren kann. Einen Absturz kannst du herbeiführen indem du den Pfad /crash
von der badapp aufrufst.
Wie kannst du den Log deiner Anwendung sehen?
Von deinem Service wird es automatisch logs geben. Finde heraus, wie du dir diese anschauen kannst. Finde auch heraus, wie du den Zeitraum für die Logs, die dir angezeigt werden, begrenzen kannst oder du nur eine begrenzte Anzahl von Zeilen erhältst.
Schreibe einen Service für eine nicht dauerhaft laufende Aufgabe
Schreibe einen Service für ein Script, das immer nur einmal ausgeführt wird und durchläuft. Zum Beispiel ein Backup oder etwas, das laufen würde, bevor ein anderer Service startet. Die Unitfile hierfür wird anders aussehen als vom vorherigen Service. Der Service soll außerdem als System User Service laufen.
Führe deinen neuen Service regelmäßig aus
Setze einen timer
unit ein, um deinen Service regelmäßig laufen zu lassen.
Lass dir Informationen über angemeldete Benutzer anzeigen
Finde heraus, wie du dir anzeigen lassen kannst, welche Benutzer an deinem System angemeldet sind und finde heraus, ob diese lokal oder remote (z. B. über SSH) angemeldet sind.
Verbanne einen User vom System
Ein Hacker hat eines deiner Benutzerkonten gekapert. Was kannst du tun, um schnell alle Sitzungen dieses Benutzers zu beenden und gleichzeitig sicherzustellen, dass sich dieser Benutzer nicht mehr anmelden kann?
Konfiguriere dein Netzwerk
Bei Ubuntu Server kommt standardmäßig
Netplan
Show archive.org snapshot
zum Einsatz. Starte eine Ubuntu Vagrant VM und konfiguriere dein Netzwerk stattdessen mit systemd-networkd
. Dazu musst du dir erst noch vagrant
und virtualbox
installieren. Lege anschließend einen Ordner an der eine Vagrantfile
enthält und paste den im folgenden gezeigten Content. Anschließend kannst du die VM mit vagrant up
starten. Mit vagrant ssh
kannst du dich zu der Instanz verbinden. Wenn du fertig bist, kannst du die VM mit vagrant destroy
wieder löschen.
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.network 'private_network', type: 'dhcp'
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = "2"
end
end
Konfiguriere eine statische IP-Adresse
Nutze statt DHCP eine statische Adresse für das zweite Netzwerkinterface der VM. Das Netzwerkinterface mit der IP im 10er Netz darfst du nicht verändern.
Konfiguriere DNS
Suche dir zwei beliebige DNS-Anbieter aus (z. B. Cloudflare, Google DNS, Quad9) und konfiguriere dein Netzwerk so, dass diese verwendet werden.
Unterschiedliche Resolver-Typen
Mit systemd kann man einen Stub-Resolver verwenden oder nicht. Was ist der Unterschied? Wie kannst du dir anzeigen lassen, ob du einen Stub-Resolver verwendest?
Das /tmp
Verzeichnis
Starte eine Vagrant VM mit der archlinux/archlinux
Box. Wenn du df -h / /tmp
ausführst, siehst du, dass für /tmp
ein tmpfs
verwendet wird. Dieses ist aber nicht in /etc/fstab
konfiguriert. Was löst das Mounten des tmpfs
aus?
Besonderheiten von tmpfs
Warum wird bei /tmp
nicht einfach auf die Root-Partition geschrieben? Was sind die Unterschiede von tmpfs
?