13 Administration

13.1 Berechtigungen für Dateien

Berechtigungen für Dateien werden in der inode festgelegt. Die Ausgabe von stat zeigt uns den Inhalt der inode und somit auch die Berechtigungen und den Besitzer einer Datei:

user@debian:~$ stat datei 
Datei: datei
Größe: 6            Blöcke: 8          EA Block: 4096   reguläre Datei
Gerät: 801h/2049d   Inode: 797921      Verknüpfungen: 2
Zugriff: (0646/-rw-r--rw-)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Zugriff: 2024-03-13 13:25:02.346951953 +0100
Modifiziert: 2024-03-13 13:25:11.663607836 +0100
Geändert: 2024-03-13 15:39:39.799558556 +0100
Geburt: 2024-03-13 13:25:02.346951953 +0100

Im Feld “Zugriff” sehen wir folgende Zeichenfolge für die die Zugriffsrechte auf die Datei:

-rw-r-- rw-

Jedes Zeichen repräsentiert eine bestimmte Berechtigung:

Zum Beispiel bedeutet -rw-r--r--, dass der Besitzer die Datei lesen und schreiben kann, die Gruppe nur lesen kann und alle anderen Benutzer sie ebenfalls nur lesen können.

13.2 Besitzer (Owner) von Dateien

Jede Datei hat einen Besitzer und eine Gruppe. Gruppen können mehrere Benutzer enthalten und ein Benutzer kann Mitglied mehrerer Gruppen sein.

Benutzer werden mit einer Uid (User id) angegeben und Gruppen mit einer Gid (Group id).

Die Benutzer IDs und die Gruppenzugehörigkeiten der Benutzer werden in einer gesonderten Datei verwaltet. Diese Datei liegt unter:

/etc/passwd

13.3 Root User

Berechtigungen können grundsätzlich nur durch den Owner geändert werden. Eine Außnahme stellt der Root User (Uid: 0) dar. Der Root User hat vollen Schreibzugriff auf alle inodes und ist somit in der Lage, sämtliche Dateiberechtigungen auf dem System zu ändern.

13.4 Mounten und Unmouten

Das Ein- und Aushängen von Laufwerken im Dateisystem heißt unter Linux mounten bzw. unmounten. Das sind typische und gängige Vorgänge, den Administratoren, aber auch einzelne User vornehmen müssen/können/sollen/dürfen/whatever. Ohne die Möglichkeit zu “mounten” wäre ein zugriff auf eine gerade eingesteckte USB-Festplatte nicht möglich. Denn nur so wird sie dem Dateisystem des Linux Servers oder Desktop zur Verfügung gestellt.

13.4.1 Was ist alles bereits gemountet?

Das kann man gut erkennen, wenn man den Befehl mount in der Konsole ausführt. Man erhält eine ziemlich unübersichtliche Auflistung aller Mounts des Systems. Zum mounten benötigt man das Gerät selbst und den Punkt im Dateisystem wo es eingehängt werden soll.

13.4.2 Das händische Mounten/unmounten

Macht man i. d. R. dann, wenn eine neue (USB-)Festplatte/Gerät an ein System geklemmt wird. Dabei führt man den entsprechenden Mount-Befehl aus, um diese Festplatte oder sonstiges Gerät einzuhängen, um zu benutzen. Benötigt man das nicht mehr, kann das Gerät mittels Unmounten ausgehängt werden, um es dann abzustecken. Nehmen wir einfach mal an wir wollen unsere neue USB-Festplatte in /media/usb/ mounten, um dann darauf arbeiten zu können.

Um ein Gerät einzuhängen, benutzt man den Mount-Befehl wie folgt:

mount

mount -t ext3 /dev/sdb1 /media/usb/

Das Gerät /dev/sdb1 (die 1 steht für die Partition) ist nun betriebsbereit und kann ganz normal verwendet werden. Am Ende der “Operationen” des Users möchte man die Disk natürlich auch wieder abstecken und mitnehmen können. Dazu ist es nötig das Gerät zunächst auszuhängen bevor man es abstecken darf. Macht man das nicht, so stehen die Chancen gut, dass etliche Gb Daten im Ram des Systems stehen und noch nicht auf die Disk geschrieben wurden. Erst der Befehl umount sorgt dafür, dass die Daten auf die Platte geschrieben werden und dann ausgehängt wird. Ein Unmounten macht man folgendermaßen:

Wir können das Gerät angeben, was wir unmounten wollen: umount /dev/sdb1

oder

wir können den Mountpoint angeben, wo die Disk gemountet wurde: umount /media/usb/

13.4.3 Automatisch beim Start durch /etc/fstab

Ein weiterer Weg ist, dass die Festplatte direkt in /etc/fstab eingetragen und beim Startvorgang des Systems direkt gemountet wird. Die Datei /etc/fstab beinhaltet Einträge zu allen (dem System) bekannten Geräten, die gemountet werden können. Sinnvollerweise trägt man dort beispielsweise Festplatten ein, die immer dem System zur Verfügung stehen sollen.

Ein Eintrag in der /etc/fstab schaut wie folgt aus:

/dev/sdc1 / ext4 errors=remount-ro 0 1 /dev/sdc2 /home/share ext4 defaults 0 1

13.4.4 Automatisches Mounten mittels autofs

Zum Schluss noch die dritte Variante des Mountens. Das Paket autofs mountet ein Gerät automatisch, wenn es gebraucht wird. Das funktioniert wie folgt: autofs kennt das Device und das Verzeichnis in das es mounten soll. Wechselt ein User in dieses Verzeichnis hinein, so mountet autofs das Gerät automatisch. Der Mount bleibt solange bestehen bis der User das Verzeichnis wieder verlässt. Nach einer vordefinierten Zeit, die das Device nicht genutzt wird, hebt autofs den Mount automatisch wieder auf.

13.5 Sudoer,Shadow und Passwd

  1. sudoer: Ein “sudoer” ist ein Benutzer, dem die Berechtigung erteilt wurde, bestimmte Befehle als Superuser (root) oder als ein anderer Benutzer auszuführen. Die Datei /etc/sudoers enthält eine Liste von Benutzern und Gruppen mit Berechtigungen zum Ausführen bestimmter Befehle mit erhöhten Privilegien. Die Verwendung von sudo vor einem Befehl ermöglicht einem Benutzer die Ausführung des Befehls mit Superuser-Privilegien, sofern er in der sudoers-Datei aufgeführt ist und sein eigenes Passwort eingibt.

  2. passwd: Das “passwd”-Kommando wird verwendet, um das Passwort eines Benutzers in Unix-ähnlichen Betriebssystemen zu ändern. Wenn Sie das passwd-Kommando ausführen, werden Sie aufgefordert, das aktuelle Passwort (falls zutreffend) und dann das neue Passwort einzugeben, das verschlüsselt und in der Datei /etc/shadow gespeichert wird.

  3. shadow: Der “shadow” bezieht sich auf die Datei /etc/shadow in Unix-ähnlichen Betriebssystemen, die verschlüsselte Benutzerpasswörter und andere passwortbezogene Informationen enthält. Sie ist nur für den Root-Benutzer lesbar, um die Sicherheit zu erhöhen und den unbefugten Zugriff auf Passwort-Hashes zu verhindern.

13.6 Owndership prüfen

1. ls -l: Zeigt den Besitzer, die Besitzergruppe und die Berechtigungen der Datei oder des Verzeichnisses an. Außerdem werden Informationen wie Dateityp, Größe, Erstellungs-/Änderungsdatum und andere Details aufgelistet.

    ls -l

    -rw-r--r-- 1 benutzer benutzergruppe 123 Mär 22 10:30 datei_name

2. stat: Zeigt detaillierte Statistiken zur Datei an, einschließlich des Besitzers und der Besitzergruppe. Informationen wie Dateigröße, Inode-Nummer und Erstellungs-/Änderungs-/Änderungszeit werden ebenfalls angezeigt.

     stat dateiname

     Datei: beispiel.txt
        Größe: 123          Blöcke: 8          IO-Block: 4096   gewöhnliche Datei
        Gerät: 801h/2049d   Inode: 305711      Verknüpfungen: 1
        Zugriff: (0644/-rw-r--r--)  Uid: ( 1000/ benutzer)   Gid: ( 1000/ benutzergruppe)
        Zugriff: 2024-03-22 10:30:00.000000000 +0000
        Änderung: 2024-03-22 10:30:00.000000000 +0000
        Modifikation: 2024-03-22 10:30:00.000000000 +0000
        Geburt: -

3. ls -n****: Zeigt die numerischen Benutzer- und Gruppen-IDs (UID und GID) des Besitzers und der Besitzergruppe der Datei oder des Verzeichnisses an. Anstelle von Benutzer- und Gruppennamen werden deren numerische IDs angezeigt.

ls -n

-rw-r--r-- 1 1000 1000 123 Mär 22 10:30 datei_name

4. getfacl: Zeigt die vollständige Berechtigungsliste, den Besitzer und die Besitzergruppe der Datei oder des Verzeichnisses an. Zusätzlich zu POSIX-Berechtigungen zeigt es auch ACLs (Access Control Lists) an.

getfacl dateiname

# Datei: beispiel.txt
# Besitzer: benutzer
# Gruppe: benutzergruppe
user::rw-
group::r--
other::r--

5. id: Zeigt die Identifikationsinformationen (UID und GID) des aktuellen Benutzers oder des angegebenen Benutzers an. Zusätzlich werden auch zusätzliche Gruppenmitgliedschaften des Benutzers aufgelistet.

id

uid=1000(benutzer) gid=1000(benutzergruppe) Gruppen=1000(benutzergruppe),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)

6. lsattr: Zeigt die Attribute der Datei oder des Verzeichnisses an, zu denen auch Eigentum, Zugriffszeit, Änderungszeit usw. gehören. Es zeigt auch an, welche Attribute auf welche Dateien oder Verzeichnisse angewendet wurden.

lsattr dateiname


----i-------------- datei_name

7. getent: Ruft Informationen aus Systemdatenbanken ab, z. B. die UID und GID eines Benutzers oder einer Gruppe. Es zeigt Benutzer- und Gruppeninformationen aus Systemdateien wie /etc/passwd und /etc/group an.

getent passwd benutzername



benutzer:x:1000:1000:Benutzer:/home/benutzer:/bin/bash

8. ls -o:

Zeigt eine ähnliche detaillierte Liste wie “-l” an, zeigt jedoch die Benutzerkennung (UID) anstelle des Benutzernamens. Somit werden alle Informationen außer dem Gruppennamen angezeigt.

-rw-r--r-- 1 1000 1000 1024 Mär 22 10:00 datei.txt

13.7 Die meistgenutzten Befehle für die Festplattenverwaltung

Befehl Beschreibung
lsblk Zeigt die angeschlossenen Festplatten an.
df -h Zeigt die Nutzung des Dateisystems auf dem aktuellen Datenträger an.
sudo fdisk -l Listet die vorhandenen Festplatten und ihre Partitionen auf.
sudo fdisk /dev/xvdf Führt Partitionierungsvorgänge wie das Erstellen von Partitionen für die Festplatte mit dem Namen xvdf durch.
sudo parted /dev/xvdf Ermöglicht das Partitionieren, Verkleinern oder Vergrößern von Partitionen auf der Festplatte mit dem Namen xvdf.
sudo mount /dev/xvdf1 /mnt/disk1 Mountet das Volume mit dem Namen xvdf1 in das Verzeichnis /mnt/disk1. Nach dem Mounten kann die Verwendung des neuen Dateisystems mit dem Befehl “df -h” überprüft werden.

13.7.1 DisklabelType

13.7.2 Festplattenpartition

Eine Festplattenpartition ist ein logischer Abschnitt einer Festplatte, der dazu dient, den verfügbaren Speicherplatz in separate Bereiche aufzuteilen. Diese Partitionen ermöglichen es, das Betriebssystem und Daten separat zu organisieren und zu verwalten. Hier sind die verschiedenen Arten von Partitionen und ihre Bedeutungen:

13.7.2.1 Primäre Partitionen:

13.7.3 Erweiterte Partitionen:

13.7.4 Logische Partitionen:

Zusammengefasst bieten Partitionen die Möglichkeit, den Speicherplatz einer Festplatte logisch zu organisieren und zu verwalten. Primäre Partitionen sind die grundlegenden Partitionstypen, während erweiterte Partitionen als Container für logische Partitionen dienen, die eine weitere Unterteilung des verfügbaren Speicherplatzes ermöglichen.

13.8 Journalisierendes Dateisystem

Das journalisierendes Dateisystem verwendeteine Journaling-Technik , um die Integrität von Dateisystemoperationen sicherzustellen und Datenverlust im Falle eines unerwarteten Systemabsturzes oder Stromausfalls zu verhindern. Das Journaling-Verfahren zeichnet alle bevorstehenden Änderungen an Dateisystemmetadaten in einem speziellen Journal auf, bevor sie tatsächlich auf die Festplatte geschrieben werden.

13.8.1 Die Hauptziele eines journalisierenden Dateisystems

Bekannte Beispiele für journalisierende Dateisysteme sind ext3, ext4 (beide für Linux), NTFS (für Windows) und HFS Plus (für macOS). Diese Dateisysteme verwenden unterschiedliche Implementierungen von Journaling, aber das zugrunde liegende Konzept bleibt dasselbe: Sicherstellen der Datenintegrität und schnelle Wiederherstellung im Falle eines Systemfehlers.

13.8.2 “Systemd-analyze” - Analysiere und debugge den Systemmanager

Systemd-analyze kann verwendet werden, um Leistungsstatistiken beim Systemstart zu ermitteln und andere Zustands- und Tracing-Informationen vom System- und Servicemanager abzurufen sowie die Korrektheit von Unit-Dateien zu überprüfen. Es wird auch verwendet, um auf spezielle Funktionen zuzugreifen, die für fortgeschrittene Systemmanager-Debugging-Zwecke nützlich sind.

13.8.3 systemd-analyze time

Dieser Befehl gibt die Zeit aus, die im Kernel verbracht wurde, bevor der Benutzerbereich erreicht wurde, die Zeit, die im initrd verbracht wurde, bevor der normale Systembenutzerbereich erreicht wurde, und die Zeit, die der normale Systembenutzerbereich benötigt hat, um initialisiert zu werden.

# in a container
$ systemd-analyze time
Startup finished in 296ms (userspace)
multi-user.target reached after 275ms in userspace

# on a real machine
$ systemd-analyze time
Startup finished in 2.584s (kernel) + 19.176s (initrd) + 47.847s (userspace) = 1min 9.608s
multi-user.target reached after 47.820s in userspace

13.8.4 systemd-analyze blame

Zeigt eine Liste aller laufenden Programme und Dienste an, sortiert nach der Zeit, die sie brauchten, um sich zu starten. Das kann helfen, langsame Programme zu finden und den Startvorgang zu beschleunigen. Beachte jedoch, dass die Zeit, die ein Programm braucht, auch davon abhängen kann, dass es auf ein anderes Programm wartet. Außerdem zeigt der Befehl keine Ergebnisse für sehr einfache Programme an. Er zeigt auch nicht an, wie lange Programme auf andere Programme warten müssen.

$ systemd-analyze blame
     32.875s pmlogger.service
     20.905s systemd-networkd-wait-online.service
     13.299s dev-vda1.device
     ...
        23ms sysroot.mount
        11ms initrd-udevadm-cleanup-db.service
         3ms sys-kernel-config.mount

13.8.5 systemd-analyze critical-chain

Zeigt eine Liste von Einheiten und deren Startzeiten an, die für den erfolgreichen Start anderer Einheiten wichtig sind. Es zeigt, wie lange eine Einheit braucht, um zu starten, und ob sie auf eine andere Einheit wartet. Die Ausgabe kann jedoch nicht alle Arten von Wartezeiten genau erfassen und ist möglicherweise nicht vollständig.

$ systemd-analyze critical-chain
    multi-user.target @47.820s
    └─pmie.service @35.968s +548ms
     └─pmcd.service @33.715s +2.247s
       └─network-online.target @33.712s
         └─systemd-networkd-wait-online.service @12.804s     +20.905s
          └─systemd-networkd.service @11.109s +1.690s
              └─systemd-udevd.service @9.201s +1.904s
                  └─systemd-tmpfiles-setup-dev.service @7.306s +1.776s
                     └─kmod-static-nodes.service @6.976s +177ms
                      └─systemd-journald.socket
                          └─system.slice
                           └─-.slice

13.8.6 systemd-analyze dump

Wenn du diesen Befehl ohne Zusatz verwendest, zeigt er dir eine lange Liste aller laufenden Programme und Dienste auf deinem Computer. Du kannst auch Muster angeben, um die Liste auf bestimmte Programme zu beschränken. Die Ausgabe ist für normale Anwendungen nicht immer leicht zu verstehen und kann sich ändern. Und nicht-Admin-Benutzer können diesen Befehl nur begrenzt verwenden.

$ systemd-analyze --user dump
Timestamp userspace: Thu 2019-03-14 23:28:07 CET
Timestamp finish: Thu 2019-03-14 23:28:07 CET
Timestamp generators-start: Thu 2019-03-14 23:28:07 CET
Timestamp generators-finish: Thu 2019-03-14 23:28:07 CET
Timestamp units-load-start: Thu 2019-03-14 23:28:07 CET
Timestamp units-load-finish: Thu 2019-03-14 23:28:07 CET
-> Unit proc-timer_list.mount:
        Description: /proc/timer_list
    ...
-> Unit default.target:
        Description: Main user target

13.8.7 systemd-analyze plot

Dieser Befehl gibt entweder eine SVG-Grafik aus, die detailliert darstellt, welche Systemdienste zu welcher Zeit gestartet wurden und wie lange sie für die Initialisierung benötigt haben, oder die Rohzeitdaten im JSON- oder Tabellenformat.

$ systemd-analyze plot >bootup.svg
$ eog bootup.svg&

13.8.8 systemd-analyze dot

Dieser Befehl erstellt eine Beschreibung der Abhängigkeiten zwischen den verschiedenen Diensten auf deinem System im dot-Format. Diese Beschreibung kann dann mit dem GraphViz-Tool dot verwendet werden, um einen grafischen Abhängigkeitsbaum zu erstellen. Wenn du beispielsweise systemd-analyze dot | dot -Tsvg >systemd.svg eingibst, wird eine SVG-Datei mit dem Baum erstellt. Du kannst auch Muster angeben, um nur bestimmte Einheiten oder Dienste in den Baum aufzunehmen.

$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg >avahi.svg
$ eog avahi.svg

$ systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' \
  | dot -Tsvg >targets.svg
$ eog targets.svg

13.8.9 systemd-analyze capability

Dieser Befehl zeigt eine Liste von Linux-Fähigkeiten zusammen mit ihren Zahlenwerten an. Wenn keine Argumente angegeben sind, werden alle Fähigkeiten aufgelistet, die dem Servicemanager und dem Kernel bekannt sind. Fähigkeiten, die nur vom Kernel definiert sind, werden als “cap_???” angezeigt. Wenn du spezifische Fähigkeiten anzeigen möchtest, kannst du ihre Namen oder Zahlenwerte als Argumente verwenden.

$ systemd-analyze capability 0 1 {30..32}
NAME              NUMBER
cap_chown              0
cap_dac_override       1
cap_audit_control     30
cap_setfcap           31
cap_mac_override      32

13.8.10 systemd-analyze calendar

Dieser Befehl analysiert und normalisiert wiederkehrende Kalenderzeitereignisse und berechnet, wann sie als nächstes eintreten werden. Dabei verwendet er dieselbe Eingabe wie die OnCalendar= Einstellung in systemd.timer(5), wobei die Syntax in systemd.time(7) beschrieben wird. Standardmäßig wird nur der nächste Zeitpunkt angezeigt, an dem der Kalenderausdruck eintritt. Mit –iterations= kannst du die angegebene Anzahl der nächsten Zeitpunkte anzeigen lassen, an denen der Ausdruck eintritt. Jedes Mal, wenn der Ausdruck eintritt, bildet sich ein Zeitstempel, siehe das Verb “timestamp” weiter unten.

$ systemd-analyze calendar --iterations=5 '*-2-29 0:0:0'
Original form: *-2-29 0:0:0
Normalized form: *-02-29 00:00:00
Next elapse: Sat 2020-02-29 00:00:00 UTC
   From now: 11 months 15 days left
   Iter. #2: Thu 2024-02-29 00:00:00 UTC
   From now: 4 years 11 months left
   Iter. #3: Tue 2028-02-29 00:00:00 UTC
   From now: 8 years 11 months left
   Iter. #4: Sun 2032-02-29 00:00:00 UTC
   From now: 12 years 11 months left
   Iter. #5: Fri 2036-02-29 00:00:00 UTC
   From now: 16 years 11 months left

13.8.11 systemd-analyze timestamp

Dieser Befehl analysiert einen Zeitstempel (d. h. einen einzelnen Zeitpunkt) und gibt die normalisierte Form sowie die Differenz zwischen diesem Zeitstempel und der aktuellen Zeit aus. Der Zeitstempel sollte der Syntax entsprechen, die in systemd.time(7), Abschnitt “PARSING TIMESTAMPS” dokumentiert ist.

$ systemd-analyze timestamp yesterday now tomorrow
    Original form: yesterday
Normalized form: Mon 2019-05-20 00:00:00 CEST
     (in UTC): Sun 2019-05-19 22:00:00 UTC
UNIX seconds: @15583032000
      From now: 1 day 9h ago

  Original form: now
Normalized form: Tue 2019-05-21 09:48:39 CEST
      (in UTC): Tue 2019-05-21 07:48:39 UTC
 UNIX seconds: @1558424919.659757
    From now: 43us ago

 Original form: tomorrow
Normalized form: Wed 2019-05-22 00:00:00 CEST
    (in UTC): Tue 2019-05-21 22:00:00 UTC
 UNIX seconds: @15584760000
      From now: 14h left

13.8.12 systemd-analyze cat-config

Dieser Befehl ähnelt “systemctl cat”, funktioniert jedoch auf Konfigurationsdateien. Er kopiert den Inhalt einer Konfigurationsdatei und eventueller Drop-Ins in die Standardausgabe, unter Verwendung des üblichen systemd-Verzeichnis- und Prioritätsregelsatzes. Jedes Argument muss entweder ein absoluter Pfad einschließlich des Präfix sein (wie /etc/systemd/logind.conf oder /usr/lib/systemd/logind.conf) oder ein Name relativ zum Präfix (wie systemd/logind.conf).

$ systemd-analyze cat-config systemd/logind.conf
# /etc/systemd/logind.conf
...
[Login]
NAutoVTs=8
...

# /usr/lib/systemd/logind.conf.d/20-test.conf
... some override from another package

# /etc/systemd/logind.conf.d/50-override.conf
... some administrator override

13.8.13 systemd-analyze verify

Dieser Befehl lädt Einheitsdateien und gibt Warnungen aus, wenn Fehler gefunden werden. Er lädt die Dateien, die du auf der Befehlszeile angegeben hast, sowie alle anderen Einheiten, auf die sie verweisen. Du kannst auch einem Einheitsnamen auf der Festplatte einen Alias zuweisen. Der Suchpfad für Einheiten wird durch die Verzeichnisse der Befehlszeilenargumente und die üblichen Suchpfade gebildet. Du kannst auch die Variable $SYSTEMD_UNIT_PATH verwenden, um den Suchpfad anzupassen. Einheiten in Verzeichnissen, die in den Befehlszeilenargumenten angegeben sind, haben Vorrang vor anderen Pfaden.

Die folgenden Fehler werden derzeit erkannt:

Unbekannte Abschnitte und Anweisungen, - Fehlende Abhängigkeiten, - die erforderlich sind, um die angegebene Einheit zu starten, - Man-Pages, - die in “Documentation=” aufgeführt sind, - aber nicht im System gefunden werden, - Befehle, - die in “ExecStart=” und ähnlichen Feldern aufgeführt sind, - aber nicht im System gefunden werden oder nicht ausführbar sind.

Beispiel: Einheit umbenennen

$ cat /tmp/source
[Unit]
Description=Hostname printer

[Service]
Type=simple
ExecStart=/usr/bin/echo %H
MysteryKey=true

$ systemd-analyze verify /tmp/source
Failed to prepare filename /tmp/source: Invalid argument

$ systemd-analyze verify /tmp/source:alias.service
alias.service:7: Unknown key name 'MysteryKey' in section 'Service', ignoring.

13.8.14 systemd-analyze security

Dieser Befehl überprüft die Sicherheitseinstellungen von einem oder mehreren spezifizierten Diensten. Wenn du einen Dienstnamen angibst, zeigt er detaillierte Informationen zu dessen Sicherheitseinstellungen an. Ohne Angabe eines Dienstnamens überprüft er alle laufenden Dienste und zeigt eine kurze Tabelle mit den Ergebnissen an. Er bewertet die Sicherheitsstufe jedes Dienstes basierend darauf, wie gut er gegen potenzielle Angriffe geschützt ist. Eine hohe Sicherheitsstufe bedeutet eine geringere Anfälligkeit für Angriffe, während eine niedrige Sicherheitsstufe auf mögliche Schwachstellen hinweist. Beachte jedoch, dass diese Analyse nur die Sicherheitseinstellungen berücksichtigt, die von systemd selbst umgesetzt werden. Es werden keine zusätzlichen Sicherheitsmaßnahmen berücksichtigt, die möglicherweise vom Dienst selbst implementiert wurden.

$ systemd-analyze security --no-pager systemd-logind.service
  NAME                DESCRIPTION                              EXPOSURE
✗ PrivateNetwork=     Service has access to the host's network      0.5
✗ User=/DynamicUser=  Service runs as root user                     0.4
✗ DeviceAllow=        Service has no device ACL                     0.2
✓ IPAddressDeny=      Service blocks all IP address ranges
...
→ Overall exposure level for systemd-logind.service: 4.1 OK 🙂
    

13.8.15 systemd-analyze inspect-elf

Dieser Befehl lädt die angegebenen Dateien. Falls es sich bei diesen Dateien um ELF-Objekte handelt (das sind beispielsweise ausführbare Dateien, Bibliotheken oder Kerneldateien), wird der in den Dateien eingebettete Verpackungsmetadaten analysiert. Wenn solche Metadaten vorhanden sind, werden sie in einer Tabelle oder im JSON-Format ausgegeben.

$ systemd-analyze inspect-elf --json=pretty \
       core.fsverity.1000.f77dac5dc161402aa44e15b7dd9dcf97.58561.1637106137000000
{
       "elfType" : "coredump",
       "elfArchitecture" : "AMD x86-64",
      "/home/bluca/git/fsverity-utils/fsverity" : {
              "type" : "deb",
              "name" : "fsverity-utils",
              "version" : "1.3-1",
             "buildId" : "7c895ecd2a271f93e96268f479fdc3c64a2ec4ee"
      },
      "/home/bluca/git/fsverity-utils/libfsverity.so.0" : {
             "type" : "deb",
             "name" : "fsverity-utils",
             "version" : "1.3-1",
             "buildId" : "b5e428254abf14237b0ae70ed85fffbb98a78f88"
     }
}

13.8.16 systemd-analyze image-policy

Dieser Befehl analysiert den angegebenen Image-Richtliniensatz gemäß systemd.image-policy(7). Die Richtlinie wird normalisiert und vereinfacht. Für jeden aktuell definierten Partitionskennzeichner (gemäß der Spezifikation für entdeckbare Partitionen) wird die Wirkung des Image-Richtliniensatzes in tabellarischer Form angezeigt.

PARTITION       MODE        READ-ONLY GROWFS
root            encrypted   -         -
usr             verity      yes       -
home            ignore      -         -
srv             ignore      -         -
esp             ignore      -         -
xbootldr        ignore      -         -
swap            encrypted   -         -
root-verity     ignore      -         -
usr-verity      unprotected yes       -
root-verity-sig ignore      -         -
usr-verity-sig  ignore      -         -
tmp             ignore      -         -
var             ignore      -         -
default         ignore      -         -

13.9 Systemd

Systemd ist eine Programm-paket, die eine Reihe von Systemkomponenten für Linux-Betriebssysteme bereitstellt. Die Hauptkomponente ist ein “System- und Service-Manager” - ein Init-System, das zum Booten des User-Space und zur Verwaltung von Benutzerprozessen verwendet wird.

Zu den weiteren Funktionen gehören der parallele Start von Diensten, die Socket- und D-Bus-Aktivierung zum Starten von Diensten, das bedarfsorientierte Starten von Daemons, die Verfolgung von Prozessen mit Hilfe von Linux-Control-Groups, die Verwaltung von Mount- und Automount-Punkten und die Implementierung einer ausgefeilten transaktionalen, abhängigkeitsbasierten Dienststeuerungslogik.

Zu den weiteren Teilen gehören ein Logging-Daemon, Dienstprogramme zur Steuerung der grundlegenden Systemkonfiguration wie Hostname, Datum, Gebietsschema, die Aufrechterhaltung einer Liste von angemeldeten Benutzern und laufenden Containern und virtuellen Maschinen, Systemkonten, Laufzeitverzeichnisse und -einstellungen sowie Daemons zur Verwaltung der einfachen Netzwerkkonfiguration, Netzwerk-Zeitsynchronisation, Log-Weiterleitung und Namensauflösung.

13.9.1 sbin/init

Das Programm /sbin/init (auch als init bezeichnet) koordiniert den Rest des Bootvorgangs und konfiguriert die Umgebung für den Benutzer. Wenn der init-Befehl startet, wird er zum Eltern- oder Großelternprozess aller Prozesse, die automatisch im System starten. Heutzutage ist sbin/initunter Debian (und alle seine Derivate) ein Symlink, welcher zu /lib/systemd/system verweist. Der Grund für den Erhalt von sbin/init ist die Kompatibilität mit alten Programmen.

13.10 Base64

Base64 ist ein Kodierungsverfahren, das verwendet wird, um binäre Daten in Textform umzuwandeln. Es wandelt die binären Daten in eine ASCII-Zeichenfolge um, indem es jede Gruppe von drei Bytes in vier Base64-Zeichen kodiert. Dies ermöglicht es, binäre Daten sicher in Textform zu übertragen, da Base64 nur aus ASCII-Zeichen besteht und somit in verschiedenen Systemen ohne Datenverlust übertragen werden kann.

Hier ist ein Beispiel für die Verwendung des Base64-Befehls in der Linux/Unix-Umgebung, um eine Datei zu kodieren:

Angenommen, wir haben eine Datei namens “example.txt”, die wir in Base64 kodieren möchten.

  1. Dateiinhalt anzeigen: Zuerst schauen wir uns den Inhalt der Datei an:

    cat example.txt

    Ausgabe:

    Dies ist ein Beispieltext.
  2. Datei in Base64 kodieren: Verwenden Sie den Base64-Befehl, um die Datei zu kodieren:

    base64 example.txt

    Ausgabe:

    RGllcyBpc3QgZWluIEV4YmVzcGVsdGV4dC4K

    Die Ausgabe ist die Base64-kodierte Version des Textes in der Datei.

  3. Base64-kodierte Daten wieder in ursprüngliche Datei dekodieren (optional): Wenn Sie die Base64-kodierte Zeichenfolge wieder in die ursprüngliche Datei zurückkonvertieren möchten, können Sie den Befehl verwenden:

    base64 -d base64_encoded_file > decoded_file

    Hierbei ist “base64_encoded_file” die Datei mit den Base64-kodierten Daten und “decoded_file” ist der Name der Datei, in die die ursprünglichen Daten zurückgeschrieben werden.

Das ist im Wesentlichen, wie Base64 funktioniert und wie der Base64-Befehl in der Praxis verwendet wird.

13.11 Desktopmanager

Bei der Verwendung von Linux kann man entweder die Command Line Interface (CLI) oder eine grafische Benutzeroberfläche (GUI) verwenden. Die Verwendung der GUI ist oft schnell und einfach. Jedoch ist bei sich wiederholenden Aufgaben die CLI oft effizienter, während die GUI einfacher zu navigieren ist.

Eine Desktop-Umgebung besteht aus einem Desktopmanager, der die Komponenten der grafischen Sitzung startet und verwaltet, und dem Windowmanager, der die Platzierung und Bewegung von Fenstern, Fenster Titelleiste und Steuerelementen steuert.

Beispiel hierfür: Ein User rechtsklickt mit seiner Maus auf einem leeren Bildschirm, wodurch sich ein kleines Fenster öffnet. Die Maus schickt ein Interrupt. Dieser Interrupt wird vom Desktopmanager interpretiert, darauf erfolgt dann ein Event, wobei vom Desktopmanager auch gelenkt wird wo dies geschieht.

Es werden im Allgemeinen eine Reihe von Dienstprogrammen, ein Desktopmanager und ein Windowmanager zusammen als Einheit verwendet und stellen zusammen eine nahtlose Desktop-Umgebung bereit.