Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux

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.

Struktur

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.

Init System

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:

  • systemd: systemd ist das modernste und am weitesten verbreitete Init-System in den meisten aktuellen Linux-Distributionen. Systemd verwendet Unit-Dateien, um Dienste zu definieren und zu verwalten. Systemd verwendet cgroups für die Ressourcenverwaltung.
  • SysVinit: SysVinit war das traditionelle Init-System in den älteren Linux-Distributionen. Es verwendet Skripte im „init.d“-Verzeichnis, um den Start und die Beendigung von Diensten zu verwalten. SysVinit verwendet eine sequenzielle Methode zum Starten der Dienste und arbeitet mit Runlevels, die verschiedene Systemkonfigurationen repräsentieren.
  • Upstart: Upstart wurde entwickelt, um die Funktionalität von SysVinit zu erweitern. Es führte ereignisgesteuerte Init-Prozesse ein und ermöglichte eine parallelere Startsequenz. Upstart verwaltet Dienste mit Hilfe von Job-Konfigurationsdateien und kann auf Ereignisse wie Hardware-Änderungen oder Benutzeraktionen reagieren. Es wurde in einigen Distributionen wie Ubuntu verwendet.
  • OpenRC: OpenRC ist ein Init-System, das in einigen Distributionen wie Gentoo, Alpine Linux und Artix Linux verwendet wird. Es basiert auf dem Konzept von SysVinit, bringt aber einige Verbesserungen mit sich.

Benutzer

Jeder Benutzer hat eine eindeutige Benutzerkennung (User ID, UID) und eine Gruppenkennung (Group ID, GID). Die wichtigsten Werkzeuge zur Benutzerverwaltung sind:

  • useradd: Ermöglicht das Hinzufügen neuer Benutzerkonten.
  • userdel: Löscht Benutzerkonten.
  • usermod: Ändert die Eigenschaften von Benutzerkonten.
  • passwd: Erlaubt es Benutzern, ihre Passwörter zu ändern.

Zugriffsrechte

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:

  • Als numerischer Modus: Hier werden die Zugriffsrechte als dreistellige Zahl angegeben. Jede Ziffer repräsentiert die Rechte für den Eigentümer, die Gruppe und andere Benutzer. Zum Beispiel steht „chmod 644 datei.txt“ für -rw-r–r–.
  • Als symbolischer Modus: Hier werden die Zugriffsrechte als Kombination von Buchstaben und Symbolen angegeben. Zum Beispiel steht „chmod u+rwx, g=rw, o=r datei.txt“ für den gleichen Zugriffsmodus wie oben.

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>

Paketmanager

Siehe apt, yum, dnf

Netzwerk

Zu den Netzwerkverwaltungstools gehören:

  • ifconfig: Zeigt Informationen über die Netzwerkinterfaces an und ermöglicht deren Konfiguration.
  • ip: Bietet umfangreiche Netzwerkkonfigurationsmöglichkeiten und zeigt Informationen über das Netzwerk an.
  • route: Ermöglicht das Hinzufügen, Löschen und Anzeigen von Routing-Tabelleneinträgen.
  • netstat: Zeigt Informationen über Netzwerkverbindungen, Routing-Tabellen und Netzwerkstatistiken an.

Networkd

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.

Network Manager

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:

  • /etc/NetworkManager/NetworkManager.conf: In dieser Konfigurationsdatei können globale Einstellungen für den Network Manager vorgenommen werden, z. B. DNS-Konfiguration, Einstellungen für WLAN- und Ethernet-Schnittstellen usw.
  • /etc/NetworkManager/system-connections/: In diesem Verzeichnis werden Konfigurationsdateien für einzelne Netzwerkverbindungen gespeichert. Jede Verbindung hat eine separate Konfigurationsdatei, in der Details wie SSID, Passwort, IP-Adressen, Proxy-Einstellungen usw. festgelegt werden können.

GUI

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:

  • GNOME: Eine moderne und benutzerfreundliche Desktop-Umgebung, die auf visuelle Eleganz und Benutzerfreundlichkeit abzielt.
  • KDE Plasma: Eine leistungsstarke und anpassbare Desktop-Umgebung mit vielen erweiterten Funktionen und Effekten.
  • Xfce: Eine ressourcenschonende Desktop-Umgebung, die sich gut für ältere oder weniger leistungsstarke Computer eignet.
  • Cinnamon: Eine elegante und benutzerfreundliche Desktop-Umgebung, die eine ähnliche Benutzererfahrung wie traditionelle Windows-Systeme bietet.
  • LXDE und LXQt: Leichte Desktop-Umgebungen, die sich durch hohe Geschwindigkeit und minimale Ressourcenanforderungen auszeichnen.
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>

Linux Verzeichnisstruktur

Verknüpfungen

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] <ziel> <quelle>

ln [-s] /var/log/syslog /home/syslog

//hardlink
ln /var/log/syslog syslog

//softlink
ln -s /var/log/syslog syslog

Services

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

Namespaces

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:

  • PID (Prozess-ID) Namespace: Isoliert die Prozess-ID-Ressourcen. Prozesse innerhalb eines PID-Namespaces können nur Prozesse innerhalb desselben Namespaces sehen und beeinflussen.
  • Network Namespace: Isoliert Netzwerkressourcen wie Netzwerkgeräte, IP-Adressen, Routing-Tabellen usw. Jeder Netzwerk-Namespace hat seine eigene Netzwerkschnittstelle, IP-Adressen und Routing-Tabellen.
  • Mount Namespace: Isoliert das Dateisystem. Prozesse innerhalb eines Mount-Namespaces haben ihre eigenen Dateisystemansichten, was es ermöglicht, verschiedene Dateisysteme zu mounten, ohne dass dies andere Prozesse beeinflusst.
  • UTS Namespace: Isoliert Hostnamen und NIS-Domänennamen. Jeder UTS-Namespace hat seinen eigenen Hostnamen und NIS-Domänennamen.
  • IPC Namespace: Isoliert Interprozesskommunikationsressourcen wie IPC-Objekte (z. B. Shared Memory).
  • User Namespace: Ermöglicht die Isolierung von Benutzer- und Gruppen-IDs. Dies ermöglicht es einem Prozess in einem Benutzer-Namespace, Root-Rechte innerhalb dieses Namespaces zu haben, ohne tatsächlich Root-Rechte im Host-System zu besitzen.

Diese Namespaces können einzeln oder in Kombination verwendet werden, um umfassende Isolationsumgebungen für Anwendungen und Prozesse zu schaffen.

Container

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.

Umgebungsvariablen / PATH

# show current PATH
echo $PATH

# add "/home/portableapps" to PATH
export PATH=/home/portableapps:$PATH

Benutzer und Gruppen

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

Netzwerk

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

Virtuelle Interfaces

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

Festplatten

Siehe auch Dateisystem, LVM

lsblk
fdisk -l
mkfs.ext4 /dev/sdb
df -h -s /var
du -h -s /var

Netzlaufwerke

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

BackTrack (Kali) Linux Key expired

apt-get update EXPKEYSIG

gpg --keyserver hkp://keys.gnupg.net --recv-key 7D8D0BF6
gpg --fingerprint 7D8D0BF6
gpg -a --export 7D8D0BF6 | apt-key add -

Active Directory

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]

realm - freedesktop.org

PAM

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

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.

Entropy

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

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
linux.txt · Zuletzt geändert: 2025/03/07 09:36 von jango