Linux ist ein weit verbreitetes Betriebssystem, das auf dem Unix-Betriebssystem basiert. Es wurde von Linus Torvalds im Jahr 1991 entwickelt und hat sich seitdem zu einer der beliebtesten Plattformen für Server, Desktop-Computer und Mobilgeräte entwickelt.
Die Ordnerstruktur in Linux basiert auf dem sogenannten „Filesystem Hierarchy Standard“ (FHS). Dieser Standard legt fest, wie das Dateisystem organisiert ist. Die wichtigsten Ordner sind:
Ordner | Beschreibung |
---|---|
/ | Das Stammverzeichnis des Dateisystems. Alle anderen Ordner und Dateien sind darunter organisiert. |
/bin | Enthält ausführbare Binärdateien (Programme), die für das System und alle Benutzer verfügbar sein sollen. |
/boot | Hier befinden sich die Dateien für den Bootloader, z. B. den Linux-Kernel und die Boot-Konfigurationsdateien. |
/dev | Enthält Gerätedateien, die das Dateisystem für die Kommunikation mit angeschlossenen Geräten verwendet. |
/etc | Hier werden Konfigurationsdateien für das System und verschiedene Anwendungen gespeichert. |
/home | In diesem Ordner befinden sich die Benutzerverzeichnisse. Jeder Benutzer hat normalerweise ein eigenes Unterverzeichnis hier, um seine persönlichen Dateien zu speichern. |
/lib und /lib64 | Hier werden Bibliotheksdateien (Shared Libraries) gespeichert, die von den Programmen während der Laufzeit verwendet werden. |
/media | Ein Ort, an dem temporär angeschlossene Speichergeräte, wie z. B. USB-Sticks oder externe Festplatten, automatisch eingehängt werden. |
/mnt | Ein Verzeichnis, in dem temporäre Dateisysteme manuell eingehängt werden können. |
/opt | Wird verwendet, um optionale Softwarepakete zu installieren. Hier werden Anwendungen von Drittanbietern häufig installiert. |
/proc | Ein virtuelles Dateisystem, das Informationen über laufende Prozesse und das System bereitstellt. Es ermöglicht den Zugriff auf systembezogene Informationen. |
/root | Das Home-Verzeichnis des Root-Benutzers (Administrator). Es enthält die persönlichen Dateien und Konfigurationen des Root-Benutzers. |
/sbin | Ähnlich wie /bin enthält dieser Ordner ausführbare Binärdateien, jedoch sind sie speziell für Systemadministrationsaufgaben reserviert und erfordern normalerweise erhöhte Berechtigungen. |
/srv | Hier können Daten für bestimmte Dienste gespeichert werden, die auf dem System ausgeführt werden. |
/tmp | Ein Verzeichnis für temporäre Dateien, die von Anwendungen und dem System verwendet werden. Der Inhalt wird regelmäßig gelöscht. |
/usr | Enthält die meisten Benutzerprogramme und -daten. Es ist in mehrere Unterverzeichnisse aufgeteilt, z. B. /usr/bin für ausführbare Dateien, /usr/lib für Bibliotheksdateien und /usr/share für gemeinsam genutzte Daten. |
/var | Enthält variable Daten, die sich während der Systemnutzung ändern. Dies umfasst Protokolldateien, Druckwarteschlangen, E-Mail- und Webserverdaten usw. |
Das Init-System ist für das Starten und Verwalten von Prozessen und Diensten während des Systemstarts verantwortlich. Der Init-Prozess hat immer die Prozess-ID (PID) 1. Es ist der erste Prozess, der während des Systemstarts gestartet wird und fungiert als Elternprozess für alle anderen Prozesse im System.
In Linux gibt es mehrere Init-Systeme, hier sind einige der bekanntesten:
Jeder Benutzer hat eine eindeutige Benutzerkennung (User ID, UID) und eine Gruppenkennung (Group ID, GID). Die wichtigsten Werkzeuge zur Benutzerverwaltung sind:
Es gibt drei Arten von Zugriffsrechten: Lesen ®, Schreiben (w) und Ausführen (x). Diese Rechte können für den Eigentümer der Datei, die Gruppe und andere Benutzer definiert werden. Siehe auch SELinux
Um die Zugriffsrechte auf eine Datei oder einen Ordner anzuzeigen, kann der Befehl „ls -l“ verwendet werden.
-rw-r--r-- 1 benutzer gruppe 1024 Jun 1 10:30 datei.txt
Um die Zugriffsrechte zu ändern, wird der Befehl „chmod“ verwendet.
chmod <Zugriffsmodus> <Datei/Ordner>
Der Zugriffsmodus kann auf verschiedene Arten definiert werden:
Es gibt auch den Befehl „chown“, um den Eigentümer einer Datei oder eines Ordners zu ändern, und den Befehl „chgrp“, um die Gruppe zu ändern.
chown <benutzer>:<gruppe> <datei> chgrp <gruppe> <datei>
Zu den Netzwerkverwaltungstools gehören:
networkd (systemd-networkd) ist Teil des Systemd-Projekts und oft auf serverbasierten Distributionen zu finden. Die Konfiguration von networkd erfolgt hauptsächlich über Konfigurationsdateien, die in der Regel im Verzeichnis „/etc/systemd/network/“ gespeichert sind. Networkd wird häufig in Kombination mit anderen systemd-Komponenten verwendet.
Der Network Manager ist in der Regel auf Desktop-Distributionen standardmäßig installiert. Die Konfiguration des Network Managers erfolgt normalerweise über grafische Tools, Befehlszeilenwerkzeuge wie „nmcli“ oder Konfigurationsdateien:
Linux unterstützt eine Vielzahl von grafischen Benutzeroberflächen (GUIs), die es Benutzern ermöglichen, das Betriebssystem intuitiv zu bedienen. Die beliebtesten GUIs für Linux sind:
apt update apt upgrade apt dist-upgrade apt-cache search <package> apt list --upgradable
du -hs // h=human readable, s=summary, d=depth lsb_release -a cat /etc/os-release find /dir -type f testfile | wc -l history -c //clear Ctrl-Z // process to background fg // bring backgrounded process to front nload - traffic stats getfacl <file> setfacl <file> setfacl -m u:BENUTZER:-,g:GRUPPE:RECHTE,... DATEI ... sed "s/Manuel/Daniel/" file.txt
Logout user
who // to see who is logged in on what tty ps -dN // to find process id kill -9 <process-id>
Hardlinks bleiben bestehen auch wenn die Quelle gelöscht wird, können aber nicht über die Grenzen von Dateisystemen hinweg verlinkt werden.
Softlinks gehen verloren wenn die Quelle gelöscht wird, dafür kann man sie auch über die Grenzen von Dateisystemen hinweg verlinken.
ln [-s] /var/log/syslog /home/syslog
//hardlink ln /var/log/syslog syslog //softlink ln -s /var/log/syslog syslog
systemctl list-units --type=service --state=active systemctl list-unit-files -t service systemctl -t service service --status-all systemctl start|stop|status|enable|disable <service> service <service> start|stop|status|enable|disable
Um ein Service zu registrieren legt man eine Datei mit dem Namen des Service und der Endung .service
an.
[Unit] Description=Prometheus Monitor After=network.target [Service] Type=simple ExecStart=/usr/local/bin/prometheus/prometheus --config.file=/usr/local/bin/prometheus [Install] WantedBy=multi-user.target
Linux Namespaces sind ein Mechanismus des Linux-Kernels, der dazu dient, verschiedene Systemressourcen zu isolieren und zu virtualisieren. Dadurch können Prozesse innerhalb eines Namespace isoliert werden, sodass sie nur die Ressourcen innerhalb dieses Namespace sehen und darauf zugreifen können. Dies ermöglicht eine effektive Ressourcentrennung und verbessert die Sicherheit sowie die Effizienz von Anwendungen.
Es gibt verschiedene Arten von Namespaces, die verschiedene Arten von Ressourcen isolieren:
Diese Namespaces können einzeln oder in Kombination verwendet werden, um umfassende Isolationsumgebungen für Anwendungen und Prozesse zu schaffen.
Linux Container (LXC) sind eine Art von Virtualisierungstechnologie, die es ermöglicht, mehrere isolierte Linux-Umgebungen (Container) auf einem einzigen Linux-Host zu betreiben. Im Gegensatz zu herkömmlichen virtuellen Maschinen (VMs), die einen eigenen Betriebssystemkernel benötigen, teilen Container den Kernel des Host-Betriebssystems und isolieren nur die Benutzerbereiche und Prozesse voneinander.
# show current PATH echo $PATH # add "/home/portableapps" to PATH export PATH=/home/portableapps:$PATH
adduser --home path username deluser username --remove-all-files --remove-home usermod options user // [-g] set primary [-G] add addgroup username groupname delgroup username groupname
Man kann einen Benutzer auch einer Gruppe zuweisen indem man ihn in der Datei /etc/group
einträgt.
Siehe auch adduser, deluser (see https://wiki.ubuntuusers.de/deluser/) und usermod.
see https://wiki.ubuntuusers.de/Benutzer_und_Gruppen/ and https://wiki.linuxquestions.org/wiki/Users,_Groups,_Ownership_and_Permissions
Die Datei /etc/network/interfaces
bearbeiten
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 8.8.8.8
Den Cache leeren.
ip addr flush eth1
Service neu starten
/etc/init.d/networking restart // oder service networking restart // oder systemctl restart networking
Create a virtual interface
ip link add br0 type bridge ip link set eth0 master br0
See this.
Create a bond interface
ip link add bond1 type bond miimon 100 mode active-backup ip link set eth0 master bond1 ip link set eth1 master bond1 ip link del bond1
Create a teamed interface
sudo apt install libteam-utils teamd -o -n -U -d -t team0 -c '{"runner": {"name": "activebackup"},"link_watch": {"name": "ethtool"}}' ip link set eth0 down ip link set eth1 down teamdctl team0 port add eth0 teamdctl team0 port add eth1
Create vlans
ip link add link eth0 name eth0.10 type vlan id 10 ip link add link eth0 name eth0.20 type vlan id 20
Add a vxlan interface
ip link add vx0 type vxlan id 100 local 1.1.1.1 remote 2.2.2.2 dev eth0 dstport 4789
Add a Mac Vlan
ip link add macvlan1 link eth0 type macvlan mode bridge ip link add macvlan2 link eth0 type macvlan mode bridge ip netns add net1 ip netns add net2 ip link set macvlan1 netns net1 ip link set macvlan2 netns net2
Add a IP Vlan interface
ip netns add ns0 ip link add name ipvl0 link eth0 type ipvlan mode l2 ip link set dev ipvl0 netns ns0
Man kann Netzlaufwerke temporär einbinden
apt-get install cifs-utils keyutils mkdir /mnt/srv mount -t cifs //zarat.ml/files /mnt/srv -o uid=1000,gid=1000,rw,user,username=manuel,domain=zarat.ml
oder mit Hilfe von fstab
zarat.ml/files /mnt/srv cifs uid=1000,gid=1000,rw,user,username=manuel,domain=zarat.ml 0 0
Um nicht jedes mal die Credentials eingeben zu müssen kann man diese in der Datei
.smbcredentials
im Heimverzeichnis speichern.
username=manuel password=s3cr3t domain=zarat.ml
und in der fstab Datei referenzieren
zarat.ml/files /mnt/srv cifs uid=1000,gid=1000,rw,user,credentials=/home/manuel/.smbcredentials 0 0
apt-get update EXPKEYSIG
gpg --keyserver hkp://keys.gnupg.net --recv-key 7D8D0BF6 gpg --fingerprint 7D8D0BF6 gpg -a --export 7D8D0BF6 | apt-key add -
sudo apt install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin oddjob oddjob-mkhomedir packagekit realm discover [zarat.local] realm join --user=Administrator zarat.local [--computer-ou=OU=Special] realm list realm leave [zarat.local]
PAM ist ein System, das in UNIX-ähnlichen Betriebssystemen verwendet wird, um die Authentifizierung von Benutzern zu verwalten. Es ermöglicht die modulare Verwaltung von Authentifizierungsaufgaben, wie zum Beispiel das Überprüfen von Passwörtern oder das Einrichten von Sitzungen nach dem Login. Durch die Verwendung von PAM können Administratoren die Authentifizierungsmethoden ihres Systems flexibel konfigurieren und anpassen, ohne den Kern des Betriebssystems ändern zu müssen.
NSS ist ein System, das in UNIX-ähnlichen Betriebssystemen verwendet wird, um Informationen über Benutzer, Gruppen und andere Namen im System zu verwalten. Es ermöglicht die flexible Konfiguration von Datenquellen für verschiedene Systeminformationen wie Benutzerkonten, Gruppen, Hostnamen usw. NSS ermöglicht es, verschiedene Datenquellen wie lokale Dateien, NIS, LDAP usw. zu verwenden, um diese Informationen abzurufen, ohne dass Anwendungen spezifische Anpassungen vornehmen müssen.
Um die Entropie auf einem Linux-Server zu erhöhen, kannst du verschiedene Methoden anwenden. Eine Möglichkeit ist die Verwendung des Befehls rngd, um Zufallsdaten von Hardwaregeräten zu sammeln und die Entropie zu erhöhen.
# Zuerst überprüfen, ob `rngd` installiert ist sudo apt-get update sudo apt-get install rng-tools # Starte den rngd-Dienst, um die Entropie zu erhöhen sudo rngd -r /dev/urandom # Überprüfe den Status des rngd-Dienstes sudo systemctl status rng-tools
Mit diesem Befehl wird der rngd-Dienst gestartet, der Zufallsdaten von einem Hardware-RNG (Random Number Generator) sammelt und sie in den Systemzufallsdatenpool einspeist, um die Entropie zu erhöhen. Dies kann besonders nützlich sein, wenn der Server wenig Entropie hat, was zu Verzögerungen bei der Generierung von Zufallszahlen führen kann.
SELinux ist ein Sicherheitsmechanismus für Linux-Betriebssysteme, der eine erweiterte Zugriffskontrolle durch die Implementierung von Mandatory Access Controls (MAC) ermöglicht. Es erzwingt Sicherheitsrichtlinien, um unautorisierte Zugriffe zu verhindern und das Risiko von Sicherheitsverletzungen zu minimieren.
sestatus semanage permissive -a httpd_t setsebool -P httpd_can_network_connect 1 grep httpd_t /var/log/audit/audit.log | audit2allow -M my-httpd-policy