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-
Das erste Zeichen in dieser Zeichenfolge gibt an, um welche Art von Datei es sich handelt, z.B.:
- reguläre Datei
d Verzeichnis
l symbolischer Link
Die nächsten drei Zeichen rw- geben die
Berechtigungen für den Dateibesitzer an.
Die nächsten drei Zeichen r-- geben die
Berechtigungen für die Gruppe an, zu der die Datei
gehört.
Die letzten drei Zeichen r-- geben die
Berechtigungen für alle anderen Benutzer an.
Jedes Zeichen repräsentiert eine bestimmte Berechtigung:
r steht für Leserechte (read)w steht für Schreibrechte (write)x steht für Ausführungsrechte (execute)- bedeutet, dass die entsprechende Berechtigung nicht
vorhanden ist.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.
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
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.
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.
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.
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/
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
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.
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.
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.
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.
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
| 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. |
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:
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.
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.
Datensicherheit : Das Journaling-Verfahren schützt vor Datenverlust, indem es sicherstellt, dass Dateisystemmetadaten konsistent bleiben, selbst wenn das System unerwartet abstürzt.
Schnelle Wiederherstellung: Im Falle eines Systemabsturzes oder unerwarteten Herunterfahrens kann das journalisierende Dateisystem die Konsistenz des Dateisystems schnell wiederherstellen, indem es das Journal verwendet, um unvollständige oder unterbrochene Operationen zu vervollständigen.
Verbesserte Leistung : Einige journalisierende Dateisysteme bieten verbesserte Leistung, indem sie Schreibvorgänge optimieren und weniger Fragmentierung zulassen.
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.
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.
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
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
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
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
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&
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
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
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
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
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
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.
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 🙂
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"
}
}
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 - -
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.
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.
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.
Dateiinhalt anzeigen: Zuerst schauen wir uns den Inhalt der Datei an:
cat example.txt
Ausgabe:
Dies ist ein Beispieltext.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.
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.
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.