Linux Basis Know How fuer System Administratoren

From Bitbull Wiki
Jump to navigation Jump to search

Contents

1 Einleitung

Warum ein Pinguin?
  • Kurs Dauer: 3 Tage
  • Publikum: System Administratoren

Ziel dieses Kurses ist es einen "Enterprise tauglichen" Einstieg in die OpenSource Welt zu finden.
Es werden alle wichtigen Faktoren besprochen um Entscheidungen für die Einführung von Systemen und Applikationen zu finden welche später nicht bitter und teuer bereut werden müssen.
Wir erlernen wir Basis Kenntnisse über Installation und Grund-Funktion des OpenSource Enterprise Betriebssystems CentOS 8 Core welches die freie Variante von "Red Hat Enterprise Linux" darstellt.
Des weiteren erarbeiten wir durch praxisnahe Beispiele einen Einstieg in die System Administration von CentOS.


2 Ziele

  • Das Konzept von Linux und OpenSource verstehen
  • Enterprise-relevante Kriterien von OpenSource Software analysieren
  • Ein CentOS 8 mit dem GUI Installer aufsetzen
  • Sich per SSH/Konsole auf einem Linux System anmelden
  • Grundlegende BASH Konsolen Kenntnisse erlangen
  • Das OS Derivat bestimmen
  • Pakete hinzufügen/entfernen
  • Config Files bearbeiten
  • Einen Dienst in Betrieb nehmen
  • Updates einspielen
  • Oberflächlicher Health Check
  • Log Files finden und lesen
  • Prozesse und deren Ressourcen finden
  • Dienste und deren Status prüfen
  • Rudimentäre Admin Arbeiten ausführen

3 Voraussetzungen

Um in der geplanten Zeit die Ziele erreichen zu können, setzen wir ein paar Dinge voraus...

3.1 Vorkenntnisse

Es wird davon ausgegangen das die Teilnehmer über mehrjährige Erfahrung im System-Administrations-Bereich und Grundwissen Wissen in den Bereichen

  • Hardware
  • Software
  • Betriebssysteme
  • Consolen Grundkenntnisse (DOS, BASH, KSH)
  • Netzwerk

verfügen.

Im Zweifelsfall ist vor der Durchführung mit dem Trainer Rücksprache zu halten.

3.2 Kurs Raum

Es wird ein Kurs Raum mit genügend Platz und den gängigen Mitteln benötigt:

  • Genügend Platz für alle Teilnehmer (Corona)
  • Beamer
  • Flip Chart
  • WLAN
  • Genügend Steckdosen
  • Getränke, Snaks
  • Kantine/Restaurant für Mittags-Pause

3.3 Arbeitsmittel der Teilnehmer

Zugriff auf eine VMware Virtualisierung mit mindestens folgenden Ressourcen:

  • 2 vCPU
  • 2GB Memory
  • 20 GB Disk
  • Internet Access via LAN für die VM

Ein Notebook mit WLAN, VMware Workstation und genügend Ressourcen ist absolut ausreichend, soll aber vor dem Kurs Beginn installiert, konfiguriert und getestet sein. Wird ein Remote LAB verwendet, soll vor dem Kurs sichergestellt werden das dies im Kursraum genutzt werden kann. (Zugriff, File Transfer, Copy Paste vom Notebook, …)

4 OpenSource Überblick

4.1 Ursprung

  • Angelehnt an MINIX welches als Anschauungs OS von Andrew S. Tannenbaum für den Unterricht entwickelt wurde
  • Erster Kernel 1991 von Linus Torvalds (10 000 Zeilen)
  • Aktueller Kernel 4.14.x LTS (25'071'693 Zeilen)

4.2 Einsatzgebiete

4.3 OpenSource verstehen

UNIX was not designed to stop you from doing stupid things, because that would also stop you from doing clever things.
— Doug Gwyn

OpenSource ist nicht einfach eine Lizenz, es ist viel mehr die einzig bislang funktionierende Form von Kommunismus in der Geschichte.
Die Grundsätze von OpenSource sind am einfachsten im Essay von Eric S. Raymond in Die Kathedrale und der Basar beschrieben.
Viele Davon würde sich so mancher Mitarbeiter heute in seiner Firma wünschen

Folgendes sind die Grundsätze dieses Textes:

  1. Jede gute Software wird von einem Entwickler geschrieben, der ein persönliches Problem lösen will.
  2. Gute Programmierer wissen, was sie schreiben müssen. Brillante wissen, was sie neuschreiben müssen (und was sie wiederverwenden können).
  3. Plane, eine Version zu verwerfen; du wirst es sowieso tun.
  4. Wenn du die richtige Einstellung hast, werden dich interessante Probleme finden.
  5. Wenn du das Interesse an einem Programm verlierst, ist es deine Pflicht, dieses einem kompetenten Nachfolger zu übergeben.
  6. Wenn du deine Benutzer als Mitprogrammierer betrachtest, ist dies der einfachste Weg zu schneller Verbesserung und effizientem Debugging.
  7. Veröffentliche früh. Veröffentliche häufig. Und höre auf die Benutzer.
  8. Mit einer hinreichend großen Gruppe von Betatestern und Mitentwicklern wird fast jedes Problem schnell erkannt und die Lösung von jemandem gefunden.
  9. Schlaue Datenstrukturen und einfacher Code (im englischen Original: „dumb code“) funktionieren viel besser als andersherum.
  10. Wenn du deine Betatester wie deine wertvollste Ressource behandelst, werden sie dies auch werden.
  11. Fast so gut wie eigene gute Ideen zu haben, ist es, gute Ideen von den Benutzern zu erkennen. Manchmal ist letzteres besser.
  12. Meist entstehen die brillanten Lösungen aus der Erkenntnis, dass das Problem falsch verstanden wurde.
  13. Perfektion (im Design) ist nicht erreicht, wenn man nichts mehr hinzufügen kann, sondern wenn nichts mehr entfernt werden kann.
  14. Jedes Tool soll so funktionieren, wie erwartet. Aber ein wirklich gutes Tool ermöglicht Verwendungszwecke, an die du niemals gedacht hättest.
  15. Wenn du Schnittstellencode schreibst, verhindere um jeden Preis, den Datenstrom zu verändern – und verwirf nur etwas, wenn dies der Empfänger verlangt.
  16. Wenn deine Programmiersprache nicht ansatzweise Turing-vollständig ist, kann syntaktischer Zucker dein Freund sein.
  17. Ein Sicherheitssystem ist nur so sicher wie sein Geheimnis. Vermeide Pseudogeheimnisse.
  18. Um ein interessantes Problem zu lösen, suche eines.
  19. Mit ausreichend guter Kommunikation, wie über das Internet, und Führung ohne Zwang, sind viele Köpfe immer besser als einer.

Ein gutes Beispiel für...

  • die Kathedrale ist Zimbra, Macintosh, Android, ChromeOS
  • den Basar ist Fedora, Arch, Debian

4.3.1 Copy Left

Jeder kennt ein Copyright, das Markante an Linux ist aber die Copyleft Lizenz welche das Gegenteil ist.
Wer das Produkt erweitert verpflichtet sich die Erweiterung zur Verfügung zu stellen.
Die wohl bekannteste Lizenz ist die GPL.

4.3.2 Community

Mitglieder der Community zeichnen sich dadurch aus, sie andere Community Mitglieder und/oder deren Prdukte unterstützen.
Dies kann in ganz vielen Formen geschehen:

  • Entwicklung
  • QA Testing
  • Dokumentation/HowTos/Übersetzungen
  • Forums Betreuung/Beiträge

Distributionen wie Fedora, CentOS, Debian, Ubuntu, Arch, ... sind zwar oft exklusiv einer Firma zugeordnet.
Es ist aber nicht möglich Dienstleistungen via SLA darauf zu beziehen, da das fortführen der zum Erhalt notwenidgen Arbeiten durch die Comunity geleistet wird.

4.3.3 Free Beer vs. Free Speak

Mit Forderungen und Negativer Kritik in Foren auf zu treten ist ein effizienter Weg sich nachhaltig unbeliebt zu machen.
Denkt daran, das die meisten Produkte unentgeltlich gepflegt werden, da macht es sich unglaublich schlecht wenn im Forum Fragen stellt welche in der Doku behandelt wurden.
Behandelt die Community Mitglieder wie eure Wertvollsten Mitarbeiter, Sie haben Sich durch Ihr Engagement bereits bewiesen.

Taucht dennoch ein Problem mit einer "Community Supported Software" auf, könnte folgendes Verhalten helfen:

  • Wertschätzung
Erst mal bedanken ist immer eine gute Idee.
  • Eine kleine Spende
Wenn eine Lösung dringend ist hat das Produkt offenbar einen Wert?!
  • Genaue Fehler Beschreibung
So das jeder der das liest das Problem selbst herbeiführen kann
  • Ein dediziertes System zur Analyse des Problems und externen Zugang bereit stellen
Den Zugang bitte nicht in den Foren posten
  • Workaround oder Lösung für andere Mitglieder aufbereiten
Dokumentation, Zusammenfassung, HowTo, ...

Neulich konnte ich ein Problem mit Guacamole (HTML5-Gateway) innerhalb von 24h im Code lösen.
Selbst gute Enterprise Firmen brauchen oft länger um ein Problem zu analysieren, geschweige denn zu Lösen.

5 Linux Derivate

Linux zeichnet sich nicht automatisch damit aus, das es in einer strukturierten und gepflegten Form daher kommt.
Somit haben sich ganz unterschiedliche Formen von Distributionen (gepflegtes Betriebssystem) gebildet.
Jedes mit einem eigenen Fokus und einer eigenen Community.

5.1 Red Hat basierend

CentOS ist die freie Version des Red Hat Enterprise Linux.
In der aktuellen Version 8 ist CentOS in zwei Varianten erhältlich:

  • CentOS 8 Stream
Auf Basis von Fedora Linux (current)
  • CentOS 8 (Core) EOL 2021 Dec.
Auf Basis von Red Hat Enterprise Linux (stable)
cat /etc/redhat-release
rpm -qa --last | tac
rpm -q --configfiles rsyslog
rpm -ql rsyslog | grep systemd
systemctl status rsyslog

5.2 Debian basierend

cat /etc/issue.net
dpkg -l
apt list --upgradable
apt list --installed

5.3 Einloggen und Derivat bestimmen

cat /etc/os-release

6 Installation eines CentOS 8 Core als VM

Die Installation eines CentOS ist sehr einfach, es sind keinerlei Linux Kenntnisse notwendig.

6.1 VM Hardware

Wir erstellen eine VM mit folgender Hardware.

  • 2vCPU
  • 2 GB Memory (wer hat, nimmt 4 GB)
  • 20 GB Disk (wer hat, nimmt 40 GB)
  • NIC mit NAT oder nach Bedarf
  • CentOS 8 Core - Boot Screen

6.2 Installer Sprache

  • CentOS 8 Core - Language selection

Dies bestimmt nur die Spache für den Setup Vorgang, dies ist nicht zwingend die System Sprache welche nach der Installation verwendet wird.

6.3 Tastatur Belegung

  • CentOS 8 Core - Tastatur Setup

Die Belegung der Tastatur ist bei VMs etwas problematisch. Je nach Art des Zugriffs auf die Konsole wird das Layout falsch übersetzt.
Das Layout kann nachträglich temporär mit dem Befehl loadkeys umgestellt werden.

6.4 System Sprache

  • CentOS 8 Core - Sprach Setup

Alle Sprachen auswählen welche vom System zur Verfügung gestellt werden sollen.
Generell ist Englisch zu Empfehlen und ausreichend.




6.5 Netzwerk Konfiguration

  • CentOS 8 Core - Netzwerk Setup
  • CentOS 8 Core - Netzwerk Autostart
  • CentOS 8 Core - IPv6 Ignore
  • CentOS 8 Core - IPv4 Static
  • NIC Aktivieren
  • Hostname als FQDN: hostname.domain.local
  • Configure > TAB: General > [X] Connect automatically with priority
  • Configure > TAB: IPv6 > Method: Ignore
  • Configure > TAB: IPv4 > Method: Manual > feed settings

6.6 Zeit/Zone/NTP

  • CentOS 8 Core - Sprach Setup
  • Zeitzone wählen: Entsprechend dem Standort der Systeme.
  • NTP Schalter aktivieren: Network Time ist nur aktivierbar wenn eine gültige Netzwerk Konfiguration besteht
  • NTP Schalter > Zahnrad > NTP Server
  • Status Symbol beachten, es zeigt den Zustand des verwendeten NTP Servers
  • Pool bedeutet, das der FQDN des NTP mehrere A-Records hat,
dies ist nicht mit Round-Robin zu verwechseln welches die Multi-Records als einfache Form von Load Balancing verwendet.
Ein Pool NTP fqdn löst zur Startzeit die dahinter liegenden IPs auf und kann somit aus einem einzigen FQDN eine vollständige Konfiguration ableiten
Ein NTP Client hat optimalerweise drei oder mehr Zeitserver konfiguiert, dies ermöglicht den Sicheren Betrieb im Split-Brain Fall
root@install:~# host ch.pool.ntp.org
  ch.pool.ntp.org has address 217.147.223.78
  ch.pool.ntp.org has address 46.165.252.57
  ch.pool.ntp.org has address 217.147.208.1
  ch.pool.ntp.org has address 162.159.200.1




6.7 Partitionierung

  • CentOS 8 Core - Disk Setup

Je nach verwendungszweck wird ein Disk Layout gewählt. Generell ist LVM (Logical Volume Management) mit xfs (Dateisystem Format) Partionen zu Empfehlen. Es bietet grösstmögliche Flexibilität.
Eine Verschlüsselung der Partitionen bedingt die eingabe eines Symetischen Schlüssels bei jedem Start Vorgang.
Es ist zu beachten, das die /boot Partition standardmässig immer noch mit ext4 formatiert wird.

6.7.1 Classic

  • Select Harddisk
  • Storage Configuration
(o) Custom
  • Done
  • Partition Scheme: Standard Partition
  • Click here to create them automatically

Es ist empfehlenswert Labels für die Partitionen zu setzen.

6.7.2 LVM

LVM Thin Provisioning
  • Select Harddisk
  • Storage Configuration
(o) Custom
  • Done
  • Partition Scheme: LVM
  • Click here to create them automatically




6.7.3 LVM Thin Provisioning

Dies ist für ein Server Betriebsystem nicht notwenig.
Thin Provisionierung wird verwendet um mehr Flexibilität im Storage Bereich zu erreichen.
So zum Beispiel für Filer oder De-Duplizierungs Apliances.

6.7.4 Software

  • CentOS 8 Core - Software Selection

6.7.5 KDUMP

  • CentOS 8 Core - KDUMP

Kdump dient dazu im Falle eines Crashes betriebs relevante Daten zu sammeln und abzuspeichern. Danach wird das System neu gebootet.
Dies ist nützlich, da ein gecrashtes System immer wieder online geht. Genauso ist es aber gefährlich, falls dieser Vorgang unbemerkt bleibt.

6.8 Root Password

Hier ist ein sicheres, Tastatur Layout unabhängiges Passwort zu wählen, das direkt nach der Installation via SSH geändert wird.

6.9 Admin User Erstellung

Die Erstellung eines Admin Users ist optional.
Der User kann Wahlweise als Mitglied der Gruppe Wheel (sudo berechtigt) erstellt werden.
Members der Gruppe wheel können mit dem Befehl sudo su - auf der Console zum root User wechseln.

6.10 Erster Login via SSH

Nach erfolgreicher Installation muss die IP der VM gefunden werdem:

hostname -I

Danach kann mit einem SSH Client wie putty als root eingeloggt werden

7 Linux Überblick

High Level Linux Distro Timeline

Die Gemeinsamkeit aller Linux Distributionen ist der Kernel, und die damit verbundene Lizenz.
Niemand der eine Linux Distribution pflegt programmiert einen eigenen Kernel.
Bekannte Abspaltungen des Ursprünglichen Linux Ursprungs sind:

  • Debian basierend (Ubuntu)
  • Red Hat basierend (CentOS)
  • Slackware basierend (SuSE)
  • Gentoo (Chrome OS)
  • Arch (System Rescue CD)

Distributionen können unter Disotrwatch gefunden werden, es sind ganz schön viele.
Das markanteste an einer jeden Linux Distribution ist wohl der Paket Manager hier sind DPKG (Debian) und RPM (Red Hat) die am weitesten verbreiteten Formate.

7.1 Alles ist eine Datei

  • Weitere Informationen:
https://de.wikipedia.org/wiki/Ger%C3%A4tedatei
lscpu
cat /proc/cpuinfo
lshw -class disk -class storage
echo -e 'print devices\nquit\n' | parted

  • Geräte: /dev/
  • Prozesse: /proc/
  • Memory: /dev/, /proc/
  • Kernel Parameter: /proc/, /sys/
  • Netzwerk Verbindungen: /proc/net/
  • Dateisystem

Viele dieser Zugriffe werden über Tools und Bibliotheken abstrahiert: top, lscpu, dstat, ps, ...

7.2 Dateisystem Hierarchie

man file-hierarchy

Unter Linux sind Disks, Partitionen, Prozesse, ... als Dateien abgebildet und werden darüber referenziert.

  • Linux Dateisystem Verzeichnis Struktur

Anbei eine Übersicht der wichtigsten Verzeichnisse und deren Inhalt

  • /

Das Verzeichnis / (auch "Wurzelverzeichnis" genannt) stellt den Basispfad des Systems dar.

  • /bin

In diesem Verzeichnis ("binaries") befinden sich wichtige Programme für Anwender, die immer verfügbar sein müssen, beispielsweise die Shell bash oder das Programm ls zur Anzeige von Verzeichnis-Inhalten.

  • /boot

In diesem Verzeichnis befinden sich die zum Hochfahren des Systems unbedingt erforderlichen Dateien. Am wichtigsten ist dabei der Kernel, üblicherweise eine Datei mit dem Namen vmlinuz-versionsname (andere Namen sind ebenfalls möglich).

  • /dev

In diesem Verzeichnis ("devices") befinden sich ausschließlich Geräte-Dateien. Diese speziellen Dateien stellen eine einfach nutzbare Schnittstelle zur Hardware dar.

Für jede Festplatte und ihre Partitionen existiert im /dev/-Verzeichnis ein eigener Eintrag. Beispielsweise bezeichnet, sofern vorhanden, /dev/hda ist die erste IDE-Festplatte, /dev/sda die erste SCSI-Festplatte im System. Höhere Buchstaben (sdb, sdc) stellen weitere Festplatten oder externe Speichermedien dar, Zahlen am Ende (sda1, sda2) benennen die Partitionen der Festplatten.

  • /etc

In diesem Verzeichnis ("etcetera") befinden sich zahlreiche Konfigurationsdateien, die Einstellungen zu den installierten Programmen sowie grundlegende Systeminformationen enthalten; viele dieser Dateien haben eigene Manpage, die in einer Shell mittels eines Aufrufs der Form man fstab aufgerufen werden kann.

  • /home

In diesem Verzeichnis befinden sich die persönlichen Verzeichnisse der einzelnen Benutzer.

  • /lib

In diesem Verzeichnis ("libraries") befinden sich die wichtigsten Funktionsbibliotheken des Systems; diese Dateien sollten nicht manuell verändert werden.

  • /media

In diesem Verzeichnis werden externe Datenträger als Unterverzeichnisse eingebunden. Bei aktuellen Ubuntu- und LinuxMint-Versionen werden automatisch erkannte USB-Sticks, Speicherkarten, externe Festplatten usw. in ein Verzeichnis der Art /media/benutzername/name-des-datentraegers eingebunden.

  • /proc

In diesem Verzeichnis ("processes") sind keine gewöhnlichen Dateien enthalten, sondern Schnittstellen zum Linux-Kernel. Jedes laufende Programm wird hier in einem Unterverzeichnis geführt, dessen Dateien viele Informationen beispielsweise über den aktuellen Programmstatus enthalten.

Zudem gibt es eine umfangreiche Verzeichnisstruktur mit Daten über den Kernel und die Hardware des Systems.

  • /root

In diesem Verzeichnis befinden sich die (persönlichen) Dateien des Systemverwalters ("Root", "Superuser"). Das Verzeichnis liegt im Wurzelverzeichnis, damit der Systemverwalter auch dann auf seine (Konfigurations-)Dateien zugreifen kann, wenn durch einen Fehler der Zugriff auf andere Partitionen nicht mehr möglich ist.

  • /sbin

In diesem Verzeichnis ("superuser-binaries") befinden sich ebenfalls ähnlich wie im /bin-Verzeichnis wichtige Programme, die allerdings für den Systemverwalter gedacht sind. Sie erfüllen Funktionen, auf die ein normaler Benutzer keinen Zugriff hat.

  • /srv

In diesem Verzeichniss werden Daten abgelegt welche von Serverdiensten bereitgestellt werden.

  • /tmp

Dieses Verzeichnis ("temporary") kann von jedem Benutzer und jedem Programm als temporäre Ablage für Dateien verwendet werden.

Damit sich Benutzer nicht gegenseitig ihre Dateien löschen, ist das sogenannte Sticky-Bit dieses Verzeichnisses gesetzt.

  • /usr

In diesem Verzeichnis ("unix system ressources") befinden sich der größte Teil der installierten Software. Auf vielen Systemen befinden sich innerhalb von /usr mehr Daten als in allen anderen Dateien zusammen. Die ausführbaren Programmdateien sind meist in /usr/bin, Programmbibliotheken in /usr/lib abgelegt.

  • /var

In diesem Verzeichnis ("variables") befinden sich hauptsächlich Dateien, die sich ständig verändern. Beispielsweise werden hier Log-Dateien gespeichert.

  • /opt

In diesem Verzeichnis ("optional") werden bei Bedarf sehr große Programme gespeichert, die nicht unmittelbar zum System gehören. Bei knappem Festplattenspeicher kann dieses Verzeichnis wie das /home-Verzeichnis auf einer externen Festplatte oder einer anderen Partition abgelegt werden.

7.3 Welche Bedeutung hat Mail?

E-Mail wird in Linux seit jeher als Weg benutzt um den SystemAdministrator zu kontaktieren.
Linux Dienste und Server Hardware überwachen sich nach Möglichkeit selber und informieren den root User wenn handlungsbedarf besteht.
Deshalb soll ein produktives Linux System immer mit einer gültigen E-Mail Konfiguration betrieben werden.
Die Regeln sind relativ einfach:

  • Jedes Linux System kann E-Mails versenden (interne Domain ist ausreichend)
curl -s https://raw.githubusercontent.com/ryran/xsos/master/xsos | bash -s -- -x -a | mail -s "System Report auf $HOSTNAME" root
  • Die E-Mail des root users auf einem Linux System wird an das Unix Team weiter geleitet
grep ^root /etc/aliases
  • Cron Jobs redirecten den stdout nach /dev/null und senden ihre Ausgaben an root
cat /etc/anacrontab
  • Im Optimal Fall sendet ein Linux System keine eMails
Wenn ein System täglich mailt, wird die eMail mit der Zeit nicht mehr beachtet. Monitoring oder Zentrales LogManagement sind hier angesagt.


Das Problem an dieser Sache ist gleich wie bei Backup und Monitoring. Wird die Konfiguration nicht beim Setup geprüft, zeigen sich die Probleme erst im Nachhinein

7.4 XFree86(X11), Xorg

  • Da die Lizenz von X11 umstritten war, hat die Linux Gemeinde 2003 mit einem Fork die Entwicklung unter dem Namen Xorg weiter geführt.
  • Xorg wird in den letzten Jahren mehr und mehr durch Wayland abgelöst.

7.5 Consolen

Eine Konsole ist ein lokales Terminal, welches sich physisch mit dem Computer verbindet (VGA, Serial, IPMI, ...)

  • Standardmässig startet Linux 7 lokale Konsolen (/dev/ttyX)
    • chvt X wechselt zwischen den consolen
    • Aus X11 (TTY7) kann mit <CTRL>+<ALT>+<Fxx> zwischen den Consolen gewechselt werden
    • Aus einer Text Console kann mit <ALT>+<Fxx> zwischen den Consolen gewechselt werden

Konsolen besitzen ein eigenes Tastatur Layout das von der Grafik (X11/Wayland) losgelöst ist.
Dies kann wie folgt umgestellt werden:

loadkeys us
loadkeys sg
loadkeys --help

7.5.1 Login

  • Console: beim starten einer Console wird mittels helper ein login Prozess aufgerufen
  • SSH: Stellt via Netzwerk ein SuperSet an Funktionalität der Console zur Verfügung, zB PortForwarding, DisplayForwarding, Language, FileTransfer, ...
  • X11: Beim Start einer X11 Session wird ein Display Manager (GDM) aufgerufen, welcher einen Login Screen bereitstellt
  • Eine Anmeldung wird in jedem Fall von PAM (Pluggeable Authentication Module) durchgeführt
    • Jede User Transition wird von PAM Auditiert
    • /etc/pam.d/ beinhaltet das Regelwerk für die Auditierung
ACHTUNG: Aenderungen werden sofort aktiv, ein Config Fehler führt zur deaktivierung der Transtion (kein Login mehr möglich)

7.5.2 Shell

  • Eine erfolgreiche Anmeldung an der Console startet einen Prozess der pro User zugeordnet wird
    • getent passwd zeigt die Default Shell eines Users an
    • Normalerweise wird hier eine Shell gestartet
    • Bash ist die am weitesten verbreitete Shell und auf fast allen Systemen installiert
    • Es kann jedoch auch ein Script oder eine API geladen werden (siehe VCSA, GSM)

7.6 Hilfe finden

7.6.1 man

man ist das System-Anzeigeprogramm für die Handbuchseiten. Jedes an man übergebene Argument Seite ist normalerweise der Name eines Programms oder einer Funktion.

rpm -qlf $(which man) | grep -e /etc/ -e systemd
cat /usr/lib/systemd/system/man-db-cache-update.service
mandb # updated die man Datenbank
man -k Nice # durchsucht die man-db nach einem Thema
man -K IOWeight # durchsucht die man-db nach Inhalt der Artikel
man -Kw IOWeight #

man ist in Sektionen unterteilt, diese beinhalten bestimmte Aspekte eines Programms:

  1. Ausführbare Programme oder Shell-Befehle
  2. Systemaufrufe (Kernel-Funktionen)
  3. Bibliotheksaufrufe (Funktionen in Programmbibliotheken)
  4. Spezielle Dateien (gewöhnlich in /dev)
  5. Dateiformate und Konventionen, z. B. /etc/passwd
  6. Spiele
  7. Verschiedenes (einschließlich Makropaketen und Konventionen), z. B. man(7), groff(7)
  8. Befehle für die Systemverwaltung (in der Regel nur für root)
  9. Kernel-Routinen [nicht Standard]

Der Update von manpages wird hier abgehandelt:

  • Dieser Service wird beim booten aufgerufen
[root@saturn ~]# cat /usr/lib/systemd/system/man-db-cache-update.service
[Unit]
DefaultDependencies=no
After=local-fs.target
Before=reboot.target shutdown.target halt.target
JobTimeoutSec=15min

[Service]
Type=oneshot
TimeoutStartSec=infinity
Environment=MAN_NO_LOCALE_WARNING=1
EnvironmentFile=/etc/sysconfig/man-db
ExecStart=/bin/sh -c '[ "$SERVICE" != "no" ] && /usr/bin/mandb $OPTS || true'
Nice=19
IOWeight=20
  • ebenfalls überwacht rpm bei der installation von software ob neue man-pages dazu gekommen sind
[root@saturn ~]# rpm -q --filetriggers man-db
transfiletriggerin scriptlet (using /bin/sh) -- /usr/share/man
if [ -x /usr/bin/systemd-run -a -x /usr/bin/systemctl ]; then
    /usr/bin/systemd-run /usr/bin/systemctl start man-db-cache-update >/dev/null 2>&1 || :
fi

# update cache
transfiletriggerpostun scriptlet (using /bin/sh) -- /usr/share/man
if [ -x /usr/bin/systemd-run -a -x /usr/bin/systemctl ]; then
    /usr/bin/systemd-run /usr/bin/systemctl start man-db-cache-update >/dev/null 2>&1 || :
fi

7.6.2 info

Info Seiten haben mehr Features als man pages, hauptsächlich aber, das diese untereinander verlinkt werden können. Die Navigation bei pinfo ist abweichend von man und info, siehe man pinfo

info  # alter viewer welcher nur mit Tastatur über links springen kann
pinfo # neuer viewer, der auch auf Maus Input reagiert
pinfo passwd

7.6.3 /usr/share/doc

  • Maintainer Dokumentationen
  • Helper Scripts
  • Beispiel Konfigurationen (Templates)
  • Weiterführende Informationen
rpm -ql bash-com<tab>
rpm -ql bash-completion | grep /doc/
less /usr/share/doc/bash-completion/README.md
find /usr/share/doc/ | grep -i bash
grep -Rl 'thin.*provis' /usr/share/doc/

7.6.4 bash auto completion

Autocomplet ist eine Ergänzung zu bestehenden shell Befhelen, diese werden in dein meisten Fällen nicht vom Entwickler der Programme selbst gepflegt.

rpm -q bash-completion || dnf -y install bash-completion
rpm -ql bash-completion
nmcli<tab><tab>
nmcli c<tab>

Anbei ein kleines Bespiel wie die auto compleation für eigene Belange erweitert werden kann

ssh -<tab><tab>                                     #alle optionen von ssh werden mit auto-complete angezeigt
complete -p ssh                                     # die complete konfiguration von ssh wird angezeigt
complete -F _ssh -W 'jumphost web1 web2 nas1' ssh   # eine neue option wird angezeigt (dies kann in .bashrc eingetragen werden)
ssh -XYC -lchris web<tab><tab>

7.7 Dateien Editieren via VIM

VIM Overview
  • VI (VISUAL EDITOR) heist der seit Urzeiten unter Unix/Linux bestehende Datei Editor
  • VIM (VI IMPROVED) heist der Nachfolger des VI welcher rückwärts kompatibel ist

vi schreckt neue Benutzer zunächst durch eine typische Eigenart der unix-basierten Editoren:

  • Es können nach dem Start nicht intuitiv Zeichen eingegeben werden.

Dieser Umstand ist darin begründet, dass alle vi-basierenden Editoren mindestens zwei unterschiedliche Betriebsarten aufweisen, zwischen denen nach Bedarf umgeschaltet werden muss:

  • Den Befehlsmodus (command mode):

In diesem Modus befindet man sich automatisch nach Start des Editors. Diese Betriebsart erlaubt die freie Bewegung im Text, Kopieren/Löschen/Umsetzen/Verschieben von Textteilen, Schreiben in andere Dateien oder Absetzen von Systembefehlen (ohne Beendigung des Editors).

Wenn man sich im Befehlsmodus befindet, dann springt der Cursor nach Eingabe von :, /, ? oder ! (das entspricht Einleitungen von bestimmten Befehlen) in die unterste Zeile des Bildschirms (die Editoren vi/vim wechseln dadurch in einen dritten Modus, den last line mode).

  • Den Einfügemodus (insert mode):

Der Einfügemodus unterscheidet die Betriebsarten einfügen und überschreiben, zwischen denen mit "Umweg" über den Befehlsmodus nach Bedarf umzuschalten ist ([Esc] + [i, a oder R]).

Den Einfügemodus erreicht man aus dem Befehlsmodus heraus durch Eingabe von einem der Befehle a, A, i, I, c, C, o, O, R, s oder S.
Zum Verlassen des Einfügemodus muss Esc betätigt werden.

VIM basics

<Esc>          Kommando Modus
i              Insert Modus
:              Komando zeilen modus
:help<Enter>   Hilfe finden
10g<Enter>     Springe zu Zeile 10
/string        Pattern suchen
:wq            Speichern und beenden
:q!            NICHT speichern und beenden

7.7.1 Übung

Um ein wenig Übung im Umgang mit dem Editor VIM zu bekommen benutzen wir das mitgelieferte Tutorial.
Dazu benötigst Du ca. 30 Minuten Zeit.

 which vimtutor >/dev/null 2>&1 || dnf -y install vim-enhanced
 vimtutor

7.8 Dateien Editieren via nano

Wer mit einem Befehls orientierten Editor nicht warm wird, kann auch nano verwenden.
Dieser wird zwar per default mit der minimal Installation nicht installiert, dies ist aber einfach nach zu holen:

dnf -y install nano

Danach kann die gewuenschte Datei mit einem Editor der an den dos editor erinnert bearbeitet werden:

nano /etc/fstab

7.9 System Meldungen

Jede Software hat Meldungen welche relevante Vorgänge mitteilt.
Anbei die gängigsten Formate/Standards.

7.9.1 Log Files

Klassische Logfiles sind der unabhängigste und zugleich schlechteste Weg um Mitteilungen einer Applikation zu speichern.
Logfiles befinden sich meistens unter /var/log/

lsof | grep /var/log/

7.9.2 Syslog

rpm -q nmap-ncat || yum -y install nmap-ncat
echo 'This is a test via /dev/log xxxxxx' | nc -u -U /dev/log
logger --tag myapp  --priority local3.alert test alert xxxxxx
grep xxxxxx /var/log/messages

Syslog ist ein 1980 von Eric Alman entwickeltes System, welches zentral Meldungen von anderen Diensten und Daemonen des Systems einsammelt, und beispielsweise in Logdateien schreibt, zum Beispiel nach /var/log/messages oder über das Netzwerk auf einen zentralen Logserver schickt.

Syslog wird mit zwei Tags versehen welche jede Meldung begleiten. Diese werden im RFC 5424 beschrieben:

  • Severity(Hierarchisch geordnetes Log Level)
  • emerg
  • alert
  • crit
  • err
  • warning
  • notice
  • info
  • debug


  • Facility (Applikations Kategorie)
  • authpriv
  • cron
  • daemon
  • ftp
  • kern
  • lpr
  • mail
  • news
  • syslog
  • user
  • uucp
  • local0..7
  • security

7.9.3 Journal

logger -p err help me now
logger -p info can you please help me
journalctl --priority info --catalog --boot --lines 10
journalctl --priority err --catalog --boot --follow
jorunalctl -af # show all, follow (merken :-)

Mit RHEL7 wird rsyslogd mit journald erweitert welches die Logdaten in eine strukturierte, indizierte Binärdateien, die hilfreiche Metadaten enthalten und schneller und einfacher zu durchsuchen sind. Journaldateien werden standardmäßig nicht dauerhaft gespeichert.

Um journal Daten persistent (über rebooten hinweg) zu speichern muss folgendes konfiguriert werden:

mkdir -p /var/log/journal
sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
systemctl restart systemd-journald.service

7.10 Linux comandline Basics

Jeder Teilnehmer dieses Kurser erhält den Linux Pocket Guide von o'Reilly. Dieser bietet eine gute Übersicht über die wichtigsten Komandozeilen Befehle.

Folgende Links können beim Einstieg helfen:

7.11 Administration via SSH

SSH ist der Weg um Linux Consolen über das Netzwerk auf einem sicheren Weg zu benutzen.
Ein SSH Server ist Grund Bestandteil einer jeden Linux Distribution. Clients sind für jedes netzwerkfähige Betriebssystem vorhanden.
SSH bietet folgende Funktionalität:

  • Consolen Access (Shell)
  • File Transfer (scp,sftp,rsync,sshfs)
  • Port Forwarding (forward, reverse)
  • X11-Forwarding (Benötigt einen X11/Wayland Server)

Um ein System zu Administrieren sind einige Kenntnisse Notwendig.

7.11.1 tmux/screen virtual terminal

Wenn eine SSH Verbindung während einem System Upgrade abreisst, so stirbt die Session und all Ihre Prozesse beim Logout.

Hier zwei Beispiele welche die Problematik verdeutlichen sollten:
Ein alter Kollege von mir hat mal am beim Warten am Flughafen Terminal ein System de ETH upgraded.
Leider ist die Session abgebrochen als er den Notebook zum CheckIn schliessen musste.
Das System wurde in einem un-bootbaren Zustand hinterlassen.
Da es sich um ein Cloud-basierendes System mit File-Level Backup handelte hat die Wiederherstellung mehrere Tausend Franken gekostet.

Ein Datenbank Administrator hat via SSH eine DB-Migration angestossen und den Notebook über nacht laufen lassen.
Leider ist der Notebook über nacht in den Standby Modus gefallen und die SSH Verbindung hat abgerissen, ebenso die Migration
Die Datenbank musst am Morgen danach aus dem Backup wiederhergestellt werden

Um dies zu vermeiden kann auf dem Zielsystem ein Virtuelles Terminal geöffnet werden. Reisst die Verbindung ungewollt ab, bleibt das virtuelle Terminal erhalten.

Screen ist nur auf CentOS 7 verfügbar und wird nicht mehr aktiv weiter entwickelt.

TMUXist der Nachfolger von screen er bietet mehr Flexibilität, Sicherheit und Neuerungen.
Tmux ist für CentOS 7 und 8 via Basis-Repository installierbar.

Hier das Beispiel einer TMUX verbindung:

  • Auf Ziel System (COS8) verbinden und TMUX Session erstellen
[ssh-client@lts1 ~]$ ssh -lroot nfs
[root@nfs ~]# dnf -y install tmux
[root@nfs ~]# tmux new -s migration

Die Session bekommt nun ein grünes Banner auf der Unterseite

  • Nun ein Komando starten welches lange läuft
[root@nfs ~]# for i in {1..999}; do echo this is important $i ; sleep 1;done
this is important 1
this is important 2
this is important 3
...
  • Laufende Verbindung trennen
Tippe: CTRL + b
Tippe: d

Die Verbindung zum Terminal wurde gelöst, es kann ausgeloggt werden:

[detached (from session migration)]
[root@nfs ~]# exit
logout
Connection to nfs closed.
[ssh-client@lts1 ~]$ 
  • Verbindung am Zielsystem wieder aufnehmen
[ssh-client@lts1 ~]$ ssh -lroot nfs

[root@nfs ~]# tmux ls
migration: 1 windows (created Tue Nov  3 15:51:56 2020) [118x26]
[root@nfs ~]# tmux a -t migration

Eine TMUX Session kann auch von mehreren Benutzern gleichzeitig geöffnet werden.
Dies ermöglicht das teilen einer SSH Session mit einem Kollegen

7.11.2 Key Based Authentication

SSH Public Key Auth Overview

Um sich an zu melden kann ein SSH Key verwendet werden, der die Möglichkeit bietet den Zugriff mittels asymmetrisch verschlüsselter authentivizierung zu sichern.
Der Private Key wird idealerweise mit einer Passphrase geschützt welche jedoch optional ist.

  • SSH Keypair auf Client System erstellen
wird bei Passphrase 2x Enter eingegeben, so wird der private Key nicht verschlüsselt
[alice@source ~]$ ssh-keygen
  Generating public/private rsa key pair.
Enter file in which to save the key (/home/alice/.ssh/id_rsa): 
  Created directory '/home/alice/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
  Your identification has been saved in /home/alice/.ssh/id_rsa.
  Your public key has been saved in /home/alice/.ssh/id_rsa.pub.
  The key fingerprint is:
  SHA256:/+0YSOSl/TGx7Fp73hs8ZihPbKWli/cYL81G1JlwWG0 alice@source
  The key's randomart image is:
  +---[RSA 3072]----+
  |              o..|
  |             o .E|
  |          . . +.+|
  |         o + . *.|
  |        S + . *o |
  |         o ..oB+ |
  |          o..OB* |
  |           .*OB==|
  |           .==B*+|
  +----[SHA256]-----+
  • Public Key auf das Zielsystem übertragen
[alice@source ~]$ ssh-copy-id bob@destination
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/alice/.ssh/id_rsa.pub"
The authenticity of host 'destination (192.168.99.99)' can't be established.
ECDSA key fingerprint is SHA256:EIrh8QBEiY2x74f........57ritT3RbmDQvi5g.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
bob@destination's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'bob@destination'"
and check to make sure that only the key(s) you wanted were added.
  • Key benutzen
[alice@source ~]$ ssh -lbob destination
Enter passphrase for key '/home/alice/.ssh/id_rsa': 
Last login: Tue Nov  3 14:33:48 2020 from 192.168.223.59

[bob@destination ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0   40G  0 disk 
├─vda1 253:1    0   38G  0 part /
└─vda2 253:2    0    2G  0 part [SWAP]
vdb    253:16   0 1000G  0 disk /srv

[bob@destination ~]# exit
logout
Connection to destination closed.

7.11.2.1 SSH Public Key Übung

  • 2 user anlegen (bob)
useradd alice
passwd alice
id alice
useradd bob
passwd bob
id bob
  • ssh testen, verlangt passwort (bob)
  su - alice
  ssh bob@localhost
  • ssh keypair erstellen (bob)
su - alice
ssh-keygen
  • ssh public key zu alice kopieren (bob)
su - alice
ssh-copy-id bob@localhost
  • zugriff testen (bob)
su - alice
id
ls -l .ssh/
cat .ssh/id_rsa.pub

ssh bob@localhost
id
cat .ssh/authorized_keys




7.11.3 File Transfer via SSH

File Transfer zwischen Linux Systemen werden im Normalfall NICHT mit Server Diensten wie NFS, CIFS, ... übertragen.
Mit SCP, SFTP, SSHFS und RSYNC werden standardmässig via ssh übertragen.

Der Linux Ansatz "Alles ist eine Datei" ermöglicht hier das übertragen von Dateisystemen, Paritionen, Tapes, Verzeichnissen, VMs, Listen Ports, IPs, ...

Hier einige Beispiele:

7.11.3.1 SCP

[ssh-client@lts1 ~]$ scp root@nfs:/etc/hostname /tmp/
hostname                                                                            100%    4    10.1KB/s   00:00    
[ssh-client@lts1 ~]$ cat /tmp/hostname 
nfs
[ssh-client@lts1 ~]$ rm -fv /tmp/hostname
removed '/tmp/hostname'

7.11.3.2 SFTP

[ssh-client@lts1 ~]$ sftp root@nfs
Connected to nfs.
sftp> lcd /tmp
sftp> get /etc/hostname 
Fetching /etc/hostname to hostname
/etc/hostname                               100%    4     0.2KB/s   00:00    
sftp> exit
[ssh-client@lts1 ~]$ cat /tmp/hostname 
nfs
[ssh-client@lts1 ~]$ rm -fv /tmp/hostname
removed '/tmp/hostname'

7.11.3.3 SSHFS

[root@lts1 ~]# dnf config-manager --enable powertools
[root@lts1 ~]# yum -y install fuse-sshfs
[ssh-client@lts1 ~]$ mkdir -v $HOME/srv
mkdir: created directory '/home/ssh-client/srv'

[ssh-client@lts1 ~]$ sshfs -o cache=yes -o kernel_cache -o Ciphers=aes128-gcm@openssh.com -o Compression=no root@nfs:/srv $HOME/srv

[ssh-client@lts1 ~]$ df $HOME/srv
Filesystem      1K-blocks      Used Available Use% Mounted on
root@nfs:/srv  1031987352 821993948 209977020  80% /home/ssh-client/srv

[ssh-client@lts1 ~]$ ll /home/ssh-client/srv/nfs/data/
total 28
drwx------ 1 root root     4096 Mar 23  2020 backup
drwxr-x--- 1 chris family  4096 Jun 22 11:11 books
drwxr-x--- 1 chris family  4096 Sep 29 20:08 movies
drwxr-x--- 1 chris family 12288 Jan 26  2019 music

7.11.3.4 RSYNC

[ssh-client@lts1 ~]$ rsync -av root@nfs:/etc/hostname /tmp/
receiving incremental file list
hostname

sent 43 bytes  received 98 bytes  282.00 bytes/sec
total size is 4  speedup is 0.03
[ssh-client@lts1 ~]$ cat /tmp/hostname 
nfs
[ssh-client@lts1 ~]$ rm -fv /tmp/hostname
removed '/tmp/hostname'

7.12 Benutzer Konzept

7.12.1 Allgemein

  • User und Gruppen werden über IDs vom System abstrahiert.
  • In Inodes oder ACLs werden nur die IDs gespeichert
  • UserIDs werden Lokal in /etc/passwd gespeichert: man fgetpwent_r
  • GroupIDs werden Lokal in /etc/group gespeichert: man fgetgrent_r
  • Die Quellen der Benutzer und dessen hirarchische Ordnung werden in /etc/nsswitch.conf definiert
  • Der Wechsel zwischen Benutzern (Transition) wird von PAM Auditiert und gesteuert.

7.12.2 Benutzer

  • Jeder Benutzer hat zwingend eine ID, eine GID (UserID und Primäre Gruppe)
  • Jeder Benutzer kann Mitglied von beliebigen vorhandenen Gruppen sein
  • Jedes File/Directory/Prozess/Device wird von einem Benuter und einer Gruppe besessen

7.13 Berechtigungen

Die Posix Datei Berechtigungen bestehen seit Anbeginn des Computer Zeitalters.
Weitere Berechtigungs Systeme wie ACL, NFS4x, ... werden als Superset hinzugefügt.

7.13.1 Posix

Eine gute Einleitung in die Unix Datei Rechte ist auf Wikipedia zu finden.
Bitte lese diese Einleitung und erkläre danach die folgende Übung

[root@nfs ~]# mkdir /srv/tmp
[root@nfs ~]# cd /srv/tmp/
[root@nfs ~]# grep -i umask /etc/login.defs
UMASK           077
[root@nfs tmp]# umask
0022
[root@nfs tmp]# touch 1
[root@nfs tmp]# umask 0077
[root@nfs tmp]# umask
0077
[root@nfs tmp]# touch 2
[root@nfs tmp]# ls -l 1 2
-rw-r--r--. 1 root root 0 Nov  3 16:41 1
-rw-------. 1 root root 0 Nov  3 16:41 2

[root@nfs tmp]# chown -v chris.family 1
changed ownership of '1' from root:root to chris:family
[root@nfs tmp]# chmod -v o-rwx 1
mode of '1' changed from 0644 (rw-r--r--) to 0640 (rw-r-----)
[root@nfs tmp]# ls -l 1
-rw-r-----. 1 chris family 0 Nov  3 16:41 1

7.13.2 ACLs

ACLs sind ein Superset der Standard Posix ACLs. Sie ermöglichen eine feinere Unterteilung der Rechte. Details dazu sind in der ACL RefCard beschrieben.

7.14 Kernel

Linux Monolitic Kernel
Linux System Call Interface
  • Linux Basiert auf einem Monolithischen Kernel
  • Ein monolithischer Kernel ist ein Kernel, in dem nicht nur Funktionen zu Speicher- und Prozessverwaltung und zur Kommunikation zwischen den Prozessen, sondern auch Treiber für die Hardwarekomponenten und möglicherweise weitere Funktionen direkt eingebaut sind.
  • Treiber und Kernel Funktionalität wird über Module bei Bedarf geladen (XFS, KVM, SCSI, NET, ...)
  • Dies ermöglicht das auf einem AccessPoint und einem DB Server exakt der gleiche Kernel ausgeführt werden kann
  • Schlechter Treiber Code kann jedoch ein ganzes OS mit sich reissen (Gefahr von "Vendor Closed Source Treibern")
Bei einem Mikrokernel kann der defekte Bereich neu geladen werden, was aber auf Grund der abhängigkeiten (Appkikation, Netz, ...) in der Praxis keine besseren Resutlate bringt.

7.14.1 Treiber sind Kernel Module

Kernel Spaces

Kern Funktionalität und Treiber sind in Kernel Modulen zusammengefasst.
Dies bedingt das die Quellen aller Treiber offen zur Verfügung stehen.
Ist dies nicht der Fall, werden die Module nicht in den Vanilla Kernel aufgenommen.
Aus diesem Vanilla Kernel werden die Kernel aller Linux Distributionen abgeleitet.

Hier entsteht aber genau das erste Problem für eine Enterprise Distribution.
Wer garantiert mir ob meine neuen teuren Server auch wirklich mit Linux performant laufen?

Closed Treiber sind in der Community offenkundig verhasst. Wie zum Beispiel dieses provokative Statement von Linus zeigt.
Diese werden auch von den wenigsten Enterprise Distros supported und wenn dann nur für sehr hohe Gebühren an die Hersteller.

Ein manuell kompiliert und ins System geladenes Kernel Modul wird nach einem Kernel-Update des Betriebs Systems nicht mehr funktionieren.

7.14.2 Mehrere Kernel

Grub Kernel Selection

Linux unterstützt standardmässig das Auswählen eines Kernels oder dessen Optionen beim System Start.
Standardmässig wird immer der neuste Kernel gestartet.

  • Dies ermöglicht im Problemfall das System im "alten Kernel" welcher vor dem Update verwendet wurde zu booten.
  • Des weiteren können Optionen wie zum Beispiel ein "Rettungs Modus" gewählt werden.
Darin kann eine Reparatur eines Systems vorgenommen werden

7.15 Boot Vorgang

  • Vom Bootloader wird immer ein Kernel in eine RamDisk geladen, diese enthält zum Booten benötigte Konfigurationen und Programme
  • Dem Kernel übergebene Start Parameter können unter /proc/cmdline geprüft werden

7.15.1 Grub

Dies ist der Bootloader welcher die Startoptionen zur Verfügung stellt.
Hier können Kernel und Boot Optionen gewählt werden.

  • Auswahl der installierten Betriebsystem Kernel
  • Boot Optionen wie Rescue-Mode

Der Bootloader kann mit einem Passwort vor ungewollter Modifikation geschützt werden.

7.15.2 SystemV

SystemV Boot Prozess
  • Bis und mit RHEL6 wurde Linux nach dem SystemV Konzept gebootet.
  • Dieser Standard kommt aus den frühen Unix Tagen und ermöglicht ein einfaches, sequentielles starten von Diensten und Funktionen.
  • Um verschiedene Runlevels zu ermöglichen wurde jeweils ein Directory pro Runlevel benutzt
  • Die zentrale Konfigurations Datei eines SystemV Systems ist /etc/inittab
  • Die Start und Stop Scripte (/etc/rc.d/init.d/*) der Dienste wurden jeweils mit K (kill) oder S (start) in die Runlevel Directories gelinkt (/etc/rc.d/rcX.d)
  • Folgende Standard Runlevel haben sich etabliert:
    • 0 – halt
    • 1 – Single user mode
    • 2 – Multiuser, without NFS
    • 3 – Full multiuser mode
    • 4 – unused
    • 5 – X11
    • 6 – reboot
  • Das Runlevel kann mit dem init Befehl gewechselt werden: init 6 -> reboot

7.15.3 SystemD

SystemD Boot Prozess
systemctl --all --state=failed
systemctl --type service list-unit-files
echo xxxxxx >> /etc/chrony.conf
systemctl restart chronyd
sleep 1
systemctl --all --state=failed
systemctl status chronyd
sed -i '/xxxxxx/d' /etc/chrony.conf
systemctl restart chronyd
sleep 1
systemctl --all --state=failed
systemctl status chronyd


  • Mit RHEL7 wurde SystemD eingeführt, welcher ein dynamisches laden von Diensten und deren Abhängikeiten ermöglicht.
  • So kann zB Tomcat mit einer Abhängigkeit zum Netzwerk Dienst konfiguriert werden.
    • Ein Restart des Netzwerks kann beispielsweise automatisch einen Restart des Tomcat auslösen
  • Die Verwaltung von SystemD Diensten ist aufwändig, aber sehr mächtig
  • ACHTUNG: Verändern Sie NIE SystemD Service Dienste! Kopieren Sie diese immer nach /etc/systemd/system/

8 Basis- Wissen und Basis- Konfiguration

8.1 Sprache

Falls bei der Installation eine falsche Sprache gewählt wurde oder für das System noch keine locale gesetzt wurden können wir das auch ganz leicht nachholen. Wir verwenden Englisch als Standard Sprache.

Das die Keyboard Einstellungen wirken sich nicht auf SSH Sessions aus, sie sind nur für Konsolen Logins relevant.

localectl
env | grep en_US
localectl list-locales | grep ^de
localectl set-locale LANG=de_DE.utf8
localectl list-keymaps | grep ^ch
localectl set-keymap ch-legacy
dnf search langpack
dnf search langpack-de
dnf install glibc-langpack-de
man --help
LANG=de_DE.UTF-8  man --help


8.2 YUM/DNF Paket Manager

DNF (Dandified Yum) ist ein Paketmanagement-System, das für RPM]-basierte Linux-Systeme entwickelt wurde. Mit dem Kommandozeilenprogramm lassen sich RPM-Software-Pakete suchen, installieren und aktualisieren. DNF besitzt eine Plugin-Schnittstelle, um leicht Funktionalität hinzuzufügen. Über seine Modulschnittstelle kann es auch von anderen Python-Programmen genutzt werden.

8.2.1 Repositories

ls -l /etc/yum.repos.d/*.repo
rpm -qf /etc/yum.repos.d/*.repo
dnf search release
dnf repolist

Unter Linux wird es nach Möglichkeit vermieden Software "von Hand" auf die Systeme zu tragen. Deshalb ist ein integriertes Software Management System fester Bestandteil.
Die Verschiedenen Kanäle, nachfolgend Repositories genannt sind in Form von Text Dateien (/etc/yum.repos.d/*.repo) auf dem System hinterlegt.
Diese Repositoriy Konfig Files werden optimalerweise ebenfalls über Pakete verwaltet, was eine manuelle Bearbeitung weitgehend vermeidet.


8.2.2 Geschichte

DNF entstand 2012 als Fork von YUM3.4 und ist seit Fedora 18 in den Repositories vorhanden. In Fedora 22 wurde der Standard-Paketmanager YUM durch DNF abgelöst.

8.2.3 Vorteile DNF zu YUM

  • DNF arbeitet schneller und benötigt weniger RAM
  • DNF läuft im Gegensatz zu YUM sowohl unter Python 2 als auch Python 3.
  • Paketabhängigkeiten werden besser aufgelöst


8.2.4 Paket installieren

dnf install <Paket>

8.2.5 Paket suchen

dnf search <Suchbegriff>
dnf whatprovides <cmd-name>

8.2.6 Pakete aktualisieren

dnf update

8.2.7 Gesammtes System aktualisieren

Ist die gesammte Software eines Linux Systems über Repositories installiert worden kann ein Update mit dnf durchgeführt werden.

dnf makecache
dnf list --upgrade
dnf upgrade

8.2.8 Systeme automatisch aktualisieren

Für Systeme welche nicht zentral verwaltet werden empfieht es sich, diese automatisch mit Updates zu versorgen.
Dies wird wie folgt eingerichtet:

dnf install dnf-automatic

grep apply  /etc/dnf/automatic.conf
      apply_updates = no

sed -i 's/^apply_updates.*/apply_updates = yes/' /etc/dnf/automatic.conf

grep apply  /etc/dnf/automatic.conf
      apply_updates = yes

systemctl enable dnf-automatic.timer --now

8.2.9 Weblinks

8.3 Partitionen

lsblk # uebersicht der blockdevice konfiguration
blkid # uebersicht der blockdevice bezeichnungen (labels)

Die Namen von Festplatten und Partitionen unter Linux sind teilweise unterschiedlich zu denen bei anderen Betriebssystemen. Sie müssen die Namen kennen, die Linux nutzt, wenn Sie Partitionen erstellen und ins Dateisystem einbinden. Hier ein Basis-Namensschema:

  • Die erste SCSI-Festplatte (nach der SCSI-ID) heisst /dev/sda.
  • Die zweite SCSI-Festplatte (nach der SCSI-ID) heisst /dev/sdb und so weiter.
  • Das erste SCSI-CD-ROM-Laufwerk heisst /dev/scd0, auch als /dev/sr0 bekannt.
  • Die Master-Festplatte am primären IDE-Controller heisst /dev/hda.
  • Die Slave-Festplatte am primären IDE-Controller heisst /dev/hdb.
  • Master- und Slave-Festplatte am sekundären IDE-Controller heissen dementsprechend /dev/hdc und /dev/hdd.

Die Partitionen auf den einzelnen Festplatten werden gekennzeichnet über eine dezimale Nummer, die zur Festplattenbezeichnung hinzugefügt wird: sda1 und sda2 stellen die erste und zweite Partition auf der ersten SCSI-Festplatte im System dar.

Hier ein Beispiel aus dem wahren Leben. Wir nehmen an, Sie hätten ein System mit zwei SCSI-Platten, eine auf SCSI-Adresse 2 und die andere auf 4. Die erste Festplatte (auf Adresse 2) heißt dann sda und die zweite sdb. Wenn die sda-Platte 3 Partitionen enthält, wären das sda1, sda2 und sda3. Das gleiche gilt für die Festplatte sdb und ihre Partitionen.




8.4 LVM

LVM Overview

Der Logical Volume Manager (LVM) ermöglicht eine abstrahierte und flexible Verwaltung von Datenspeichern eines Computer-Systems. Gegenüber dem traditionellem Weg über Partitionen wird eine weitere, höhere Abstraktionsschicht eingeführt, die eine einfache und effiziente Verwaltung und Konfiguration der Datenträger ermöglichen soll. So können zum Beispiel mehrere Festplatten zu einem Logical Volume zusammengefasst und als ein gesamter Datenspeicher verwendet werden. Eine weitere Vereinfachung bietet die Möglichkeit der Gruppierung von Logical Volumes in Volume Groups, denen auch Bezeichnungen gegeben werden können. Durch diese Einordnungen und Namensgebungen ensteht für den Administrator auch ein logischer Bezug zu den sich in den Logical Volumes befindlichen Daten.

Dies ermöglicht eine einfachere Wartung des verwendeten Speichers und der darunterliegenden Disks

8.4.1 Grundbegriffe

  • Physical Extent

Das Physical Extent (PE) ist die kleinste mögliche Speichergrösse in einem LVM. Das PE ist vergleichbar mit den Sektoren von normalen Festplatten bzw. Partitionen.

  • Physical Volume

Ein Physical Volume (PV) ist der eigentliche Datenspeicher eines LVMs. Ein PV kann eine Partition oder ein ganzes Laufwerk sein. Es ist auch möglich, sogenannte "Loop-Dateien" zu verwenden.

  • Volume Group

Eine Volume Group (VG) ist eine Art Container für mindestens ein PV.

  • Logical Volume

Ein Logical Volume (LV oder auch Volume) ist im LVM Kontext für den Anwender eine Art Partition innerhalb einer Volume Group. Es ist nicht möglich Logical Volumes außerhalb einer VG zu erstellen. Das LV kann wie eine normale Partition verwendet werden, d.h. es können Dateisysteme darauf angelegt werden und es kann gemounted werden.


8.4.2 Vorteile

  • Volumes können im laufenden Betrieb vergrößert, angelegt und verkleinert werden
  • Probleme durch falsche Partitionierung können vermieden werden
  • Höhere Flexibilität
  • Die Kapazität mehrerer Festplatten kann zu einem Volume zusammengefasst werden
  • Verschiedene Versionen von Daten sind durch sogenannte "Snapshots" möglich
  • Die Datensicherung ("backup") wird durch diese "Snapshots" vereinfacht
  • LVM hat einen hohen Datendurchsatz ("performance") und beeinträchtigt das System nur unwesentlich
  • Austausch des unterliegenden Disk Systems im Betrieb (pvmove)

8.4.3 Nachteile

  • Liegen die Logical Volumes auf mehreren Festplatten, so wird das Risiko des "Single-Point-of-Failure" grösser, da beim Ausfall einer Platte alle Daten verloren sind, ähnlich wie bei RAID0
  • Zugriff auf LVM-Partitionen ist nur mit Linux möglich
  • Um auf Logical Volumes zugreifen zu können, benötigen sog. Rescue CDs auch LVM-Unterstützung

8.4.4 Beispiel Setup

  • Software installieren
rpm -q lvm2 || dnf -y install lvm2
  • PARTITION und PARTITION2 als Physical Volume initialisieren
pvcreate /dev/sdx /dev/sdy 
  • Erstellt Volume Group LV_GROUP_NAME, bestehend aus /dev/sdx und /dev/sdy
vgcreate LV_GROUP_NAME /dev/sdx /dev/sdy 
  • Erzeugt ein 2 GB grosses Logical Volume mit dem Namen VOL in der Volume Group LV_GROUP_NAME
lvcreate -L 2G -n VOL LV_GROUP_NAME

8.5 LVM Thin Provisioning

LVM Thin Provisioning

LVM weist normalerweise Blöcke zu, wenn Sie ein Volume erstellen. LVM Thin-Pools weisen stattdessen Blöcke zu, wenn sie geschrieben werden. Dieses Verhalten wird als Thin-Provisioning bezeichnet, da Volumes viel grösser sein können als der physikalisch verfügbare Platz.

Es können die normalen LVM-Kommandozeilenwerkzeuge verwenden, um LVM-Thin-Pools zu verwalten und zu erstellen (siehe man lvmthin).

Anbei ein Bespiel für die Erstellung einer Thin Volume Gruppe bei welcher die Logischen Volumes die Grösse des vorhandenen physischen Speichers überschreiten können. Der Tatsächliche Füllgrad der Logical Volumes darf die Grösse der Summe aller Physical Volumes in der Volume Gruppe nicht überschreiten.

8.5.1 Vorteile

  • Nur der in den Thin Logical Volumes tatsächlich verbrauchte Platz wird alloziert
  • Das Disk System kann bei Bedarf an die aktuellen Anforderungen angepasst werden

8.5.2 Nachteile

  • Findet eine über Provisionierung (Summe aller LVs > Summe aller PVs) statt, veweigert LVM stoppt LVM den Dienst
Dieser Füllgrad muss laufend überwacht werden
lvdisplay /dev/thin_vg/thin_pool | grep 'Allocated'
   Allocated pool data    0,00%
   Allocated metadata     0,88%
  • Metadaten werden für die Verwaltung von LVs Snapshots verwendet




8.5.3 Beispiel Setup

  • Benötigte Software installieren
which thin_check || yum install -y device-mapper-persistent-data
  • PARTITION und PARTITION2 als Physical Volume initialisieren
pvcreate /dev/sdx /dev/sdy 
  • Erstellt Volume Group LV_GROUP_NAME, bestehend aus /dev/sdx und /dev/sdy
vgcreate LV_GROUP_NAME /dev/sdx /dev/sdy 
  • Erzeugt einen 500 GB grossen Thin Pool
lvcreate -L 500G --thinpool THIN_POOL LV_GROUP_NAME 
  • Erzeugt ein 1 TB grosses Thin Volume (über Provisionierung)
lvcreate -V 1T --thin -n THIN_VOLUME LV_GROUP_NAME/THIN_POOL
  Using default stripesize 64,00 KiB.
  WARNING: Sum of all thin volume sizes (600,00 MiB) exceeds the size of thin pool vms/tpool (500,00 MiB).
  WARNING: You have not turned on protection against thin pools running out of space.
  WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
  Logical volume "THIN_VOLUME" created.











8.6 Netzwerk Konfiguration

nmtui Abbildung

Die Netzwerk Konfigurationen unter CentOS8 sind unter /etc/sysconfig/network-scripts/ifcfg-* abgespeichert.
Erfahrene System Administratoren können diese Files direkt bearbeiten und neu laden, dies bedarf jedoch einiger Erfahrung.

Es stehen standardmässig zwei konfigurations Werkzeuge zur verfügung:

  • ein ncurses basierendes Text User Interface welches intutiv zu bedienen ist (Network Manager Text User Interface)
nmtui
  • ein cli basierendes programm welches sich gut zum skripten eignet
nmcli

Wird via nmtui gearbeitet, werden konfigurationen nicht automatisch ins laufende System übernommen.
Dies kann aber via nmcli im laufenden Betrieb übernommen werden:

nmcli connection reload
nmcli device reapply <nic-name>

nmcli unterstützt die automatische komando ergänzung mit TAB
Dieses Tool existiert für CentOS7 und CentOS8

Diese Files können Netzwerk Konfigurationen enthalten (IP):

ls -l /etc/sysconfig/network /etc/sysconfig/network-scripts/{route,ifcfg}-*

8.7 sudo Rechte

ls -l /etc/sudo*
man sudoers
visudo

sudo ist ein Befehl unter Linux, der dazu benutzt wird, Prozesse mit den Rechten eines anderen Benutzers (z.B. des Superusers root zu starten. Im Gegensatz zu dem nicht zu sudo gehörenden su ist einstellbar, welche Befehle ausgeführt werden dürfen. Der dauerhafte Wechsel der Identität ist ebenfalls möglich durch sudo -s und sudo -i.

Standardmässig sind die Benutzer der Gruppe wheel berechtigt mit sudo root rechte zu erlangen.

cat /etc/sudoers | grep wheel
grep wheel: /etc/group | cut -d: -f4-

8.7.1 user als admin erstellen

useradd admin
passwd admin
id admin
usermod -a -G wheel admin
id admin
su - admin
# jetzt bist du als admin eingeloggt
sudo service chronyd restart
# das geht nur als root user (sudo rechte erteilt)

8.8 AT: Befehle zu einer bestimmten Zeit einmalig ausführen

  • Software installieren
which at || dnf -y install at
systemctl enable atd --now
  • Job Beispiel
echo "ls -l" | at 22:00 30.12.13
atq
at 22:00 31.12.13
  • Job Beispiel 2 (manuell)
[root@vm11 ~]# at 23:00
warning: commands will be executed using /bin/sh
at> reboot
at> <CTRL>+<d>
job 1 at Wed Feb  3 23:00:00 2021

8.9 Cron Scheduling

man -k cron

Mit Hilfe von Cronjobs können auf Unix- und Linux-Systemen Vorgänge automatisert und zu einem bestimmten Zeitpunkt immer wiederkehrend ausgeführt werden. Diese Vorgänge können einzelne Befehle, Shell-Scripts, Programme, PHP- und sonstige Scriptsprachen-Scripts oder auch eine Anreihung von Linux-Befehlen sein. Beispielsweisse werden Backups, die wöchentlich, täglich oder stündlich geschehen sollen meist per Cronjob ausgeführt.

Cron besitzt eine eigene Syntax um Befehle Zeitgesteuert starten zu lassen

* * * * * auszuführender Befehl
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └──── Wochentag (0-7, Sonntag ist 0 oder 7)
│ │ │ └────── Monat (1-12)
│ │ └──────── Tag (1-31)
│ └────────── Stunde (0-23)
└──────────── Minute (0-59)
  • Cron Syntax Online Helper

https://crontab.guru/


Standardmässig verfügt jeder User über die Rechte cron zu nutzen und Zeitgesteuerte Befehle zu pflegen.

  • Aktuelle Jobs für einen user anzeigen
crontab -l -u tim
  • Crontab für einen User editieren
crontab -e -u tim

Wird ein Cronjob ausgeführt und macht eine Ausgabe, so wird diese per Mail an den Systemadministrator versendet.
Deshalb ist es ratsam den standard ausgabe kanal (1) zu unterdrücken. Scheitert dann eine Ausführung, so wird die Fehlermeldung an den root Account gemailt welcher optimalerweise an eine team mailbox weitergeleitet wird.

8.9.1 User Cron Beispiele

  • Um zum Beispiel jede Nacht um 5 Uhr morgens das Backup auszuführen, würde man den Cronjob folgendermassen anlegen:
0 5 * * * /usr/local/sbin/backup.sh >/dev/null
  • Eine Erinnerungsmail um 8 und um 17 Uhr zu verschicken geht z.B. so:
0 8,17 * * * /usr/local/bin/send_reminder_mail.sh >/dev/null

8.9.2 System Cron Tabellen

ls -l /etc/cron*
cat /etc/crontab
systemctl status crond

Folgende Verzeichnisse, Dateien sind relevant und werden beachtet wenn der crond Dienst gestartet wird:

  • /etc/cron.allow + /etc/cron.deny

Das Ausführen von cron-jobs kann auf Benutzerebene erlaubt oder verboten werden. Dazu dienen die beiden oben genannten Dateien.

  • /etc/cron.d + /etc/crontab

Dies ist die Systemweite Crontab Datei, sie verfügt über über eine leicht abweisende Syntax gegenüber den regulären crontabs, dies weil der Username zusätzlich festgelegt werden muss.

  • /etc/cron.hourly

Skripte in diesem Ordner werden stündlich ausgeführt

  • /etc/cron.daily

Skripte in diesem Ordner werden täglich ausgeführt

  • /etc/cron.weekly

Skripte in diesem Ordner werden wöchentlich ausgeführt

  • /etc/cron.monthly

Skripte in diesem Ordner werden monatlich ausgeführt

8.10 Systemd Scheduling

systemctl list-unit-files --type timer

Systemd ist die Dienste Verwaltung von CentOS7 und neuer. Sie verfügt über weit flexiblere Konfigurationsmöglichkeiten als SystemV.
Ebenfalls kann dieser Scheduled Jobs erkennen von welchen System Events, Zeit, anderen Diensten, Targets, ... er abhängig ist.
Ein einfaches Beispiel ist die aktualiserung der man Datenbank:

[root@saturn ~]# rpm -ql dnf | grep /systemd/
/usr/lib/systemd/system/dnf-makecache.service
/usr/lib/systemd/system/dnf-makecache.timer
[root@saturn ~]# cat /usr/lib/systemd/system/dnf-makecache.timer
[Unit]
Description=dnf makecache --timer
ConditionKernelCommandLine=!rd.live.image
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target

[Timer]
OnBootSec=10min
OnUnitInactiveSec=1h
Unit=dnf-makecache.service

[Install]
WantedBy=multi-user.target

Beachte, das die Files unter /usr/lib/systemd/system nicht angepasst werden dürfen, dazu muss eine Kopie unter /etc/systemd/system/ erstellt und bearbeitet werden. Danach kann die Konfiguration mit dem folgenden Kommando neu eingelesen werden:

systemctl daemon-reload
systemctl restart 
man-db-cache-update




8.11 Cockpit Web Administration

Cockpit Storage Konfiguration
dnf search cockpit
dnf -y install cockpit cockpit-dashboard
firewall-cmd --add-port=9090/tcp
firewall-cmd --permanent --add-port=9090/tcp
systemctl enable cockpit.socket --now
firefox https://1.2.3.4:9090

Mit Cockpit steht ein Webinterface zum Verwalten von Linux-Systemen zur Verfügung. Auch Benutzer-Sessions lassen sich hiermit aufzeichnen und wieder abspielen. Selbst Container unterstützt Cockpit.
Auch eine Konsole steht unter dem Cockpit zur Verfügung.
Der Nachteil von Cockpit ist, wie bei allen GUIs, das die Veränderung nicht direkt abstrahiert werden kann und deshalb wird Cockpit eher von Einsteigern benutzt.

9 Netzwerk Dienste

Hier gehen wir kurz auf die wichtigsten Netzwerk Dienste ein welche zu einer minimalen Installation im Produktiven Betrieb gehören.

9.1 RSyslog

Wir verwalten diese Konfiguration über unsere Ansible OS Basis Rolle.
Anbei werfen wir einen Blick auf eine manuelle Konfiguration um besser verstehen zu können was konfiguriert wird.

  • Installation der Software
dnf install util-linux rsyslog
  • anzeigen der relevanten config files
rpm -q --configfiles rsyslog
  • forwarding von Syslog Daten an eine Graylog Instanz (Zentraler Syslog Server)
man rsyslog.conf
...
To forward messages to another host via UDP, prepend the hostname with the at sign ("@"). To forward it via plain tcp, prepend two at signs ("@@"). 
Example:
   *.* @192.168.0.1
  • forwarding ALLER Syslog Daten an eine Graylog Instanz (Zentraler Syslog Server)
# forward all logs to host graylog.mydomain.local on port 1514 (default syslog port is udp 514)
echo '*.* @graylog.mydomain.local:1514' > /etc/rsyslog.d/forward.conf


systemctl restart rsyslog
systemctl enable rsyslog
logger -t test123 xxxyyyzzz
# suche dieses pattern am ziel syslog server (graylog)

9.2 Snmpd

Wir verwalten diese Konfiguration über unsere Ansible OS Basis Rolle.
Anbei werfen wir einen Blick auf eine manuelle Konfiguration um besser verstehen zu können was konfiguriert wird.

  • Installation der Software
dnf install net-snmp net-snmp-utils
  • anzeigen der relevanten config files
rpm -q --configfiles net-snmp
  • forwarding von Syslog Daten an eine Graylog Instanz (Zentraler Syslog Server)
  • Anzeigen der Config File Hilfe
man snmpd.conf
  • Schreiben einer Config mit RO Comunity (für Monitoring)
cp -av /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig
echo '# manuelle snmp config
syscontact      team@mydomain.com
rouser          safereader auth
rwuser          safewriter priv

rocommunity     public 192.168.99.99
rocommunity     public 127.0.0.1
' > /etc/snmp/snmpd.conf
systemctl enable snmpd
systemctl restart snmpd
  • Testen der Konfiguration
snmpwalk -v2c -c public -On -t15 127.0.0.1:161 .1
snmpget -v2c -c public 127.0.0.1:161 .1.3.6.1.2.1.1.4.0

9.3 Postfix Mail

Wir verwalten diese Konfiguration über unsere Ansible OS Basis Rolle.
Anbei werfen wir einen Blick auf eine manuelle Konfiguration um besser verstehen zu können was konfiguriert wird.
Wir behandeln hier die Konfiguration welches dem Linux System ermöglicht eMails zu versenden. Keine Mailserver Konfiguration.

  • Installation der Software
dnf install mailx postfix
  • anzeigen der relevanten config files
rpm -q --configfiles postfix
  • forwarding von Syslog Daten an eine Graylog Instanz (Zentraler Syslog Server)
  • Anzeigen der Config File Hilfe
man -k postfix
man -k postfix | grep -i config
man 5 postconf
  • Schreiben einer Config mit Relay Host
cp -av /etc/postfix/main.cf /etc/postfix/main.cf.orig
DOMAIN=domain.ch
RELAY=mail.$DOMAIN
SENDER="$(hostname -s)@$DOMAIN"
TEAM="support@$DOMAIN"
echo "=== TEST VARS ===
DOMAIN=$DOMAIN
RELAY=$RELAY
SENDER=$SENDER
TEAM=$TEAM"
echo "# manuelle postfix client config
relayhost = $RELAY
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = ipv4
sender_canonical_maps = hash:/etc/postfix/canonical
" > /etc/postfix/main.cf
getent passwd root
usermod -c "System Admin auf $HOSTNAME" root
getent passwd root
cp -av /etc/postfix/canonical /etc/postfix/canonical.orig
echo root $SENDER > /etc/postfix/canonical
postmap /etc/postfix/canonical
grep ^root /etc/aliases || echo root: $TEAM >> /etc/aliases
grep ^root /etc/aliases
newaliases
systemctl enable postfix
systemctl restart postfix
  • Testen der Konfiguration
dmidecode | mail -s report root
mailq # zu versendende emails
journalctl -u postfix.service # logs einsehen
  • Mailq vor dem testen komplett loeschen (ACHTUNG, nicht auf PROD starten)
postsuper -d ALL

9.4 NTP/Chrony

Chrony ist eine neu Entwicklung des alt bekannten ntpd welcher nicht mehr weiter entwickelt wird.
Anbei werfen wir einen Blick auf eine manuelle Konfiguration um besser verstehen zu können was konfiguriert wird.


  • Installation der Software
dnf install chrony

  • anzeigen der relevanten config files
rpm -q --configfiles chrony
  • chrony konfigurations Syntax anzeigen
man chrony.conf
  • manuelle konfiguration von chrony
cp -av /etc/chrony.conf /etc/chrony.conf.orig
echo '#manuelle chrony konfiguration

# zeit sourcen 
pool ch.pool.ntp.org iburst

# zeit server funktion aktivieren
# allow 10.0.0.0/8
# allow 172.16.0.0/12
# allow 192.168.0.0/16

driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
' > /etc/chrony.conf
systemctl enable chronyd
systemctl restart chronyd
  • chrony status pruefen
chronyc clients
chronyc serverstats
chronyc sources
  • Host Firewall Port oeffnen (nur wenn als Server konfiguriert)
firewall-cmd --add-service=ntp
firewall-cmd --add-service=ntp --permanent
  • firewall rules auf ntp pruefen
iptables-save | grep 123 #falls iptables verwendet wird
nft list ruleset | egrep 'ntp|123' # falls nftables verwendet wird

10 Security

10.1 Firewalling

Linux Verfügt standardmässig über ein oder mehrere Firewalling Subsysteme.
Um herauszufinden über welches firewalling system ein CentOS/RHEL verfügt kann folgendes Kommando verwendet werden:

systemctl list-unit-files | egrep 'firewall|tables'

10.1.1 Iptables

IPTables Architektur
iptables-save # aktuell geladene Regeln anzeigen
systemctl stop iptables
cat /etc/sysconfig/iptables # persistente regeln anzeigen

Das älteste und bekannteste Firewall System welches bis heute in Linux existiert. Es ist einfach zu lesen und wird sequentiell abgearbeitet. Da es aber sehr alt ist, wurde es nach und nach erweitert, was dazu geführt hat, das neue Features parallel implementiert wurden:

  • iptables
  • ip6tables
  • arptables
  • ebtables
  • xtables

Iptables ist immernoch weit verbreitet, soll aber in den kommenden Jahren durch nftables ersetzt werden welches zeitgemässer zu konfigurieren ist und mehr Features bietet.
IPTables Regeln können mit dem Tool iptables-translate in nft Regeln übersetzt werden. Dies macht Migrationen wesentlich angenehmer.




10.1.2 FirewallD

Firewalld Architektur
firewall-cmd --state
firewall-cmd --get-services
firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd --zone=public --add-service=imaps --permanent
firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=12345 --permanent
firewall-cmd --reload
firewall-cmd --list-all-zones

Ist eine Abstrahierung der Firewall regeln welche für "host based firewalls" und einfache Server Anwendungen gedacht ist.
Es führt komplexe Konfigurationen welche mehr Wissen und IPTables Regeln benötigen auf einfache Weise Durch.
Firewalld kann auch nft Regeln verwalten, somit ist kein Wissen ueber nft und/oder iptables notwendig.











10.1.3 NFTables

NFTables Architektur
systemctl status nftables
nft list ruleset

Für CentOS7 und CentOS8 ist NFT verfügbar, es bietet folgende Vorzüge gegenüber Iptables:

  • Lookup tables anstelle von of linearer Abarbeitung
  • Ein gemeinsames Framework für IPv4 und IPv6 Protokolle.
  • Regeln werden angepasst und nicht komplett geladen (kein flush)
  • nftrace ist ein debugging tool welches fix in nft integriert ist
  • konsistente und kompakte syntax
  • eine API welche die Erweiterung/Bedienung durch weitere Programme vereinfacht

Anbei die offizielle Red Hat Dokumentation
Und ein guter Blog Eintrag um mit nftables zu starten






10.2 SELinux

SELinux Funktionsweise

SELinux (Security-Enhanced Linux; engl. "sicherheitsverbessertes Linux") ist eine Erweiterung des Linux-Kernels, die den ersten Versuch darstellt, das FLASK-Konzept des US-amerikanischen Geheimdienstes NSA umzusetzen. Es implementiert die Zugriffskontrollen auf Ressourcen im Sinne von Mandatory Access Control. SELinux wird massgeblich von der NSA und von dem Linux-Distributor Red Hat entwickelt. Unternehmen wie Network Associates, Secure Computing Corporation, und Tresys sind bzw. waren ebenfalls an der Arbeit an SELinux beteiligt, besonders Tresys übernimmt vermehrt Aufgaben am Projekt.

Wer sich für SELinux interessiert findet in der Red Hat Dokumentation weitere informationen.

10.2.1 SELinux betriebs Arten

  • Enforced

Eine Regelverletzung führt zur Verweigerung der Ziel Ressource
Die Regelverletzung wird protokolliert

  • Permissive

Der Zugriff wird immer erlaubt
Die Regelverletzung wird protokolliert

  • Disabled

SELinux ist inaktiv

Soll die Betriebsart von SELinux persistent geändert werden (reboot), so muss diese in /etc/selinux/config angepasst werden

10.2.2 einige nützliche Befehle

  • Ist SELinux aktiviert
getenforce
  • Umschalten von Permissive und Enforcing
setenforce 0 #permissive
setenforce 1 #enforcing
  • Anzeigen von SELinux Regel Verletzungen in lesbarer Form mit Erklärungen zum Hergang
sealert -a /var/log/audit/audit.log

10.2.3 Beispiel Anpassung für Apache Webserver

setenforce 0 # set permissive
semanage fcontext -l | grep /var/www
semanage fcontext -d -t httpd_sys_content_t "/data"
semanage fcontext -a -t httpd_sys_content_t "/data"
semanage fcontext -a -t httpd_sys_content_t "/data/www/([^/]*/)?www(/.*)?"
semanage fcontext -a -t httpd_config_t "/data/www/([^/]*/)?conf(/.*)?"
semanage fcontext -a -t httpd_log_t "/data/www/([^/]*/)?logs(/.*)?"
restorecon -Fr /data
ls -lZ /data
for i in $(rpm -ql policycoreutils | grep bin/ ); do man -k $(basename $i); done
semanage user -l httpd
systemctl restart httpd
sealert -a /var/log/secure
# fix if error
setenforce 1
sed -i 's/^SELINUX=.*/SELINUX=Enforcing/' /etc/selinux/config
grep ^SELINUX= /etc/selinux/config
getenforce

10.2.4 selinux mail alterting

SELinux schützt das System vor unerlaubten Zugriffen, Gesetzte machen aber wenig Sinn zuwiederhandlungen igoriert werden.
Natürlich wird das System eine Regelverletzung verweigern, es ist aber definitiv ein Anzeichen dafür das etwas schief gelaufen ist.

dnf -y install setroubleshoot-server setroubleshoot-plugins

vi /etc/setroubleshoot/setroubleshoot.conf

[email]
recipients_filepath = /var/lib/setroubleshoot/email_alert_recipients
smtp_port = 25
smtp_host = mail.domain.ch
from_address = selinux@domain.ch
subject = [DOMAIN] SELinux AVC Alert

vi /var/lib/setroubleshoot/email_alert_recipients

support@domain.ch


service messagebus restart

10.3 Hardening

Um die Sicherheit eines Systems zu erhoehen ist es ratsam die Berechtigungen auf ein benoetigtes minimum zu reduzieren.
Anbei befassen wir uns mit grundsaetzlichen Moeglichkeiten, sowie mit einigen Werkzeugen die uns dabei unterstuetzen.

10.3.1 Grub Passwort

Grub ist der Bootloader von Linux welcher den Kernel beim starten lädt.
Durch manuelles ändern von Kernel Optionen kann das root Passwort innerhalb von wenigen Minuten geändert und auf das System zugegriffen werden.
Das setzen dieses passwort verhindert das anpassen von Kernel optionen, der automatische Boot Vorgang wird dadurch nicht beeintraechtigt.

  • Grub Passwort setzen
grub2-setpassword 
cat /etc/grub.d/01_users 
cat /boot/grub2/user.cfg
  • Rebooten und Testen (Waehle e im Grub Kernel Menue)
reboot

10.3.2 Partitionen separieren

Unabhaengig von der Funktion des Servers bringt eine Aufteilung folgender Partitionen einen Gewinn in Sachen Sicherheit
Dadurch wird ein Ueberfuellen der root oder log Partition erschwert.

Folgende Paritionen sind ein guter Anfang:

  • /(root)
  • /boot
  • /home
  • /tmp
  • /var

10.3.3 Mount Optionen

Pro Partition können Mount Optionen gesetzt werden welche eine massiv erhöhte Sicherheit bringen.
Folgende Optionen koennen fuer die Parition:

  • /tmp
  • /home
  • /var

gesetzt werden:

  • nosuid
  • nodev
  • noexec

Dies indem man in der Datei /etc/fstab die entsprechenden Partitionen mit den Optionen erweitert werden:
Zum Beispiel von:

UUID=0a1ff99a-b8b2-4b48-a941-7067d3cbb2ff /var        xfs     defaults        0 0

nach:

UUID=0a1ff99a-b8b2-4b48-a941-7067d3cbb2ff /var        xfs     defaults,nosuid,nodev,noexec        0 0

geändert wird, die Änderung wird nach einem Reboot oder Remount aktiv.

Mit dem Befehl mount koennen die Optionen der aktuellen Partitionen angezeigt werden.

10.3.4 Partitionen verschlüsseln

Vor allem bei mobilen Systemen bringt die Verschlüsselung von Partitionen eine erhöhte Sicherheit.
Die Verschluesselung von Partitionen kann waehrend der Installation eines Systems konfiguriert werden.
Das nachträgliche Verschlüsseln von neuen Partitionen ist ebenfalls moeglich, bedingt aber einiges an Erfahrung.

10.3.5 CTRL + ALT + DELETE deaktivieren

Dies ermöglicht das neu-starten eines Systems mit Hilfe der Console, was wiederum einen möglichen Einstiegspunkt ins System bringt.
Diese Option wird wie folgt deaktiviert:

systemctl mask ctrl-alt-del.target 

10.3.6 Nicht benoetigte Software

Wird am besten gar nicht gestartet und wenn moeglich vom System entfernt.

  • Installierte Software anzeigen
dnf list installed
  • Listen Ports anzeigen
ss -tulpn

Es ist zu beachten, das die Prozess Namen der Listen Ports rechts aussen ersichtlich sind

  • Anbei ein Beispiel fuer die deinistallation eines nicht benoetigten Dienstes
which snmpd
rpm -qf /usr/sbin/snmpd
dnf remove net-snmp

10.3.7 Software aktualisierung

Eine regelmaessige aktualisierung ist generell empfehlenswert.
Im Enterprise Bereich ist es empfehlenswert diese Updates (zeitlich & Umfang) von einer Zentralen Stelle zu koordinieren.
Der Red Hat Satellite (Spacewalk) oder Ansible Tower (AWX) sind zwei weit verbreitete Systeme um diese Aufgaben zu koordinieren.
Die Funktionsweise von DNF wurde im Kapitel YUM/DNF Paket Manager besprochen.

10.3.8 Firewalling

Ist empfehlenswert, um Dienste zusätzlich ab zu sichern und wurde im Kapitel Firewalling behandelt.

10.3.9 SELinux

Ist empfehlenswert, um Dienste zusätzlich ab zu sichern und wurde im Kapitel SELinux

10.3.10 Audit Software

Lynis ist ein guter Start um Moeglichkeiten fuer eine Sicherheits Optimierung heraus zu finden.
Dies liefert einen kompletten Report welcher in Handfeste Vorschlaege zur Verbesserung anbietet.

dnf install epel-release
dnf install lynis
lynis audit system

11 CFG Management/Automation

11.1 Ansible

Ansible Architektur

Ansible ist ein Beschreibendes Konfigurations-Management welches aktuell grosse Verbreitung unter Linux bietet.
Es ermöglicht eine vom System abstrahierte, gut lesbare Beschreibung des Ziel Zustandes welche gleichzeitig als Dokumentation dient.

Hier ein Beispiel der uniQconsulting Lösung Graylog:

  • Wir werden nach und nach ein onliner Setup für all unsere Lösungen zur Verfügung stellen:
min. 4 GB Memory
min. 4 CPU
min. 40 GB Disk
curl https://raw.githubusercontent.com/uniQconsulting-ag/ansible.graylog/master/setup.sh | sh

11.2 git

Vereinfachte Git Architektur

Git bezeichnet sich als "Source Code Management System", meist spricht man von Versionsverwaltung, und in der Praxis macht Git vor allem eines: Änderungen an Dateien so zu speichern und aufzuzeichnen, dass sie jederzeit nachvollziehbar sind. Sie fügen Dateien hinzu, machen Änderungen, speichern diese und sichern sie optional auf einem entfernten Server. Für jeden Speichervorgang wird ein Marker gesetzt, der später erneut aufgerufen werden kann.

Ein erster wichtiger Punkt für das Verständnis: Git speichert im Gegensatz zu Backup-Programmen oder den meisten sonstigen Versionsverwaltungen keine neuen Dateien. Weder Kopien veränderter Dateien, noch Dateien, die nur die Änderungen enthalten. Wenn Sie auf Dateisystemebene in Ihren Git-Ordner schauen, finden Sie dort immer nur die jeweils aktuellen Versionen der Dateien, die Sie selbst hinzugefügt haben.

Git sieht sich eher als Dateisystem und Speicherpunkte als Snapshots: Sobald Sie Änderungen an Dateien speichern, wird Git-intern ein Schnappschuss des aktuellen Status des Dateisystems/aller Dateien abgelegt. Und das gilt auch für das Löschen von Inhalten oder Dateien – Git fügt immer nur hinzu! Inhalte oder Dateien tatsächlich zu verlieren, ist bei Git eigentlich nur mutwillig zu schaffen.

Der zweite Punkt: Bei Git passiert alles lokal. Weder für Tools noch die historischen Daten benötigen Sie eine Verbindung zu einem Server. Wenn Sie im Team arbeiten, werden Sie lediglich Ihre Bearbeitungen hoch- und die der anderen Teammitglieder herunterladen.

Ebenfalls wichtig: Ein Git-Repository ist nur und ausschliesslich der eine Ordner, den Sie bei einem neuen Projekt festlegen. Darin befinden sich zum einen all Ihre Dateien und Ordner und zum anderen ein versteckter Ordner „.git”, der sämtliche Verwaltungsdaten und Snapshots enthält. Und somit ist Ihre komplette Git-Arbeitsumgebung portabel, den Ordner können Sie zum Beispiel auf einem USB-Datenträger immer dabeihaben.

12 Fehler Analyse

Im Fehlerfall ist nicht bekannt nach was gesucht wird, also ist der Vergleich das wichtigste. Dies kann Erfahrung sein, muss aber nicht. Ein Referenz System welches die selbe Arbeit fehlerfrei verrichtet tut es auch. Wichtig ist sich in der Fehlersuche nicht in Vermutungen zu verheddern sondern stumpf Fakten zu sammeln.

Ist dann bekannt was das Problem ist, gilt es dies nachhaltig zu lösen:
Wenn der Log Level eines Dienstes auf DEBUGGING gesetzt ist, so läuft die Disk alle par Wochen voll, Logs zu reduzieren ist hier vielleicht nicht der beste Ansatz Auch ist es meiner Meinung nach unsinnig über ein kleines Problem das zwar interessant ist aber nicht nachvollziehbar ist stunden zu verbringen.

Folgende Fragen können bei der Analyse helfen:

  • Verstehe ich was das Problem ist?
  • Verstehe ich was das Problem verursacht hat?
  • Kann ich die Fehlerquelle lokalisieren, reparieren und danach das Sytem bereinigen?
  • NEIN: Schreibe ein genaues Trouble Ticket das den Fehler nachvollziehbar und mit allen Fakten beschreibt
Suche Dir Hilfe eines erfahrenen Kollegen oder Support Teams
  • Könnten weitere Systeme davon betroffen sein?
  • JA: Dann plane diese Systeme ebenfalls ein
  • Ist es wünschenswert diesen Fehler automatisch zu erkennen
  • JA: Wenn immer möglich, verwende ein zentrales Monitoring
An sonsten reichen ein par Zeilen Shell Skript via CronJob oft auch aus

12.1 Dienste

SystemD Dienste können recht komfortabel verwaltet werden.
Anbei ein paar nützliche Beispiele:

  • Welche Objekte sind vorhanden
systemctl list-unit-files
  • Welche Dienste sind vorhanden
systemctl --type service list-unit-files
  • Welche Dienste melden einen Fehler
systemctl --all --state=failed
  • Zeige Status Details zu einem Dienst
systemctl status sshd

12.2 Ereignisse

12.2.1 LogFiles Auswerten

Einige Dienste pflegen ihre eigenen LogFiles, so etwa: apache, nginx, tomcat, jboss, ...
Diese Files sind als Text Dateien gehalten, müssen aber zuerst einmal gefunden werden.

12.2.1.1 LogFiles: Übung

Anbei eine Herleitung wie Text Logfiles gefunden und ausgewertet werden können.

  • Software installieren
which lsof || dnf -y install lsof
  • alle offenen Dateien finden
man lsof
lsof
  • die Liste offener Dateien Filtern und deduplizieren
lsof -F 
lsof -F | sed '/^n\//!d'
lsof -F | sed '/^n\//!d;s/^n//'
lsof -F | sed '/^n\//!d;s/^n//;s/ .*//'
lsof -F | sed '/^n\//!d;s/^n//;s/ .*//' | sort -u
  • wir suchen nur Text Dateien (log files)
lsof -F | sed '/^n\//!d;s/^n//;s/ .*//' | sort -u | xargs file
lsof -F | sed '/^n\//!d;s/^n//;s/ .*//' | sort -u | xargs file | grep ' text$' 
  • diese Text Dateien würden wir aber gerne in echtzeit anschauen
lsof -F | sed '/^n\//!d;s/^n//;s/ .*//' | sort -u | xargs file | grep ' text$' | cut -d: -f1
lsof -F | sed '/^n\//!d;s/^n//;s/ .*//' | sort -u | xargs file | grep ' text$' | cut -d: -f1 | xargs tail -fn0




12.2.2 Syslog Auswerten

  • Syslog Status prüfen
systemctl status rsyslog
  • Loggt ebenfalls in Text Files welche üblicherweise unterhalb von /var/log abgelegt werden.
  • Diese können mit den Befehlen des vorangehenden Kapitels ausgewertet werden.




12.2.3 journalctl Logs auswerten

  • alle boot Vorgänge des Journals anzeigen
journalctl --list-boots
  • alle Fehlermeldung der Klasse error oder höher in Echtzeit anzeigen
journalctl --priority err --catalog --follow
  • Alle Logs eines bestimmten Dienstes anzeigen
  • Dienst finden
systemctl list-unit-files
  • Meldungen des Dienstes anzeigen
journalctl -u dnf-makecache.timer
journalctl -u sshd.service




12.2.4 dmesg

dmesg
dmesg -Tx
dmesg -Txw

dmesg steht für display message und ist ein Programm, welches die Kernel-Meldungen (genau: die Meldungen des Kernel-Ringpuffers) ausgeben kann.

Das Programm wird im "normalen" Betrieb von Linux eher selten verwendet, ist aber immer dann nützlich, wenn Fehler im System gesucht werden, z.B. warum (neue) Hardware nicht korrekt erkannt oder eingebunden wird.

12.3 SOS Report

Der SOS-Report ist ein Diagnose Werkzeug welches hilft den aktuellen Zustand eines Systems für den Supportfall zu beschreiben.
Im Fehlerfall oder beim Auftreten eines Problems ist ein sosreport immer das erste was wir ausführen.

12.3.1 Übung: sosreport

  • sosreport installieren
dnf -y install sos vim tar
  • einen Report erstellen
sosreport
  • den sosreport sicherstellen
cp -av /var/tmp/sosreport* /root/
  • den sosreport manuell auswerten
vim /root/sosreport*.xz
  • sosreport kurz auswertung
curl https://raw.githubusercontent.com/ryran/xsos/master/xsos > /usr/local/sbin/xsos
chmod 700 /usr/local/sbin/xsos
tar vxf /root/sosreport*.xz
xsos -a sosreport-vmname-date-pattern
rm -rf sosreport-vmname-date-pattern




12.3.2 Datei Systeme

12.3.2.1 Format

(echo -DEVICE- -MOUNT- -FILESYSTEM- ; cat /proc/mounts )| awk '{print $1" -> "$2" -> "$3}' | column -t
  • Jedes Block Dateisystem muss vor der Verwendung Formatiert werden
  • Die Block Grösse kann beim erstellen des Dateisystems angegeben werden
  • Ein Dateisystem besteht aus
    • Verzeichnis Einträgen, Inoden genannt
      • Die Inoden Zahl von EXT4 sind statisch und bei einem erstellten Dateisystem nicht erweiterbar
      • Die Inoden Zahl von XFS ist dynamisch erweiterbar
    • Daten blöcken FS Blocks genannt
  • ReiserFS, BTTRFS, Minix, vFAT, NTFS ... Linux kann nahezu jedes bekannte Dateisystem einbinden

12.4 Disk

Rund um Dateisysteme gibt es unendlich viele Tuning und Performance Optionen, wir schauen uns hier die Grundlagen an.

12.4.1 Block-Device

Besteht aus einer Disk oder einer Partition.

  • Die Filesystem Tabelle des Systems anzeigen
cat /etc/fstab
  • prüfen welche Dateisysteme gemountet sind
df -hP
  • Eine übersicht über die verbauten Disk Systeme und deren Partitionen
lsblk
  • IDs und Labels aller Dateisysteme anzeigen
blkid

12.4.2 Inode

Inodes sind Einträge welche pro Datei oder Verzeichniss erstellt werden.
Der Füllgrad darf 100% nicht überschreiten.

df -iP

12.4.3 File

Der verbrauchte Platz eines Dateisystems kann wie folgt geprüft werden.

df -hP

12.4.3.1 Übung: Auswertung des Speicher Verbrauchs

dnf -y install epel-release
dnf config-manager --enable epel
dnf -y install ncdu
ncdu -x /

12.4.3.2 Übung: Auswertung des Speicher Verbrauchs (mit Boardmitteln)

  • Alternativ dazu kann auch mit Boardmitteln nach grossen Dateien gesucht werden
cd /
du -mcs * | sort -n

Danach in das grösste (verdächtige) Verzeichnis wechseln und du nochmals starten:

cd /var
du -mcs * | sort -n

Diesen Schritt wiederholen bis der "Platz Verbraucher" gefunden wurde.

12.5 CPU

12.6 Prozesse

  • Jeder Prozess besteht aus
    • System Ressourcen
      • CPU Zeit, Disk, Sockets, ...
    • Memory
    • Security attributen
      • Owner, Group
      • Selinux Context
      • Control Group (Docker, LXC, SystemD, LibVirt, ...)
  • Eigentümer und Berechtigunden lassen sich direkt vom User ableiten der den Prozess gestartet hat
    • Kann ein Benutzer ein File lesen, kann auch der von ihm gestartete Prozess dieses File lesen
    • Security Attribute können diese Rechte zusätzlich limitieren, nicht aber erweitern

12.6.1 ps

  • Prozessbaum im Überblick
ps -f fax
  • Prozess Details (Ressourcen, Argumente)
ps -eo ruser,pid,rss,vsz,pcpu,tty,args
  • Prozesse pro User zählen
ps hax -o user | sort | uniq -c

12.6.2 load mit w

Load ist eine einfache Form von System Auslastung. Ein Anstieg der Load bedeutet das das System länger benötigt um die gestellten Anfragen zu verarbeiten.
Ein System mit 4 CPUs und einer Load von 4 besagt das es zu 100% Ausgelastet ist.
Ein Anstieg der Load hat aber nicht zwingend zu bedeuten das mehr Rechenlast vorhanden ist.
Zu wenig Bandbreite ist eine treffendere Bezeichnung und dies kann CPU, Disk IO, Netzwerk IO, BUS IO, ... sein.

Das Kommando w' gibt eine schnelle Übersicht über den Load Zustand des Systems:

[root@vm15 ~]# w
13:13:36 up 3 days, 21:39,  1 user,  load average: 0.41, 0.30, 0.12
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.100.5    12:38    0.00s  0.11s  0.00s w

Die Load wird in 3 varianten angezeigt:

  • Mittel über die letzte Minute
  • Mittel über die letzten 5 Minuten
  • Mittel über die letzten 15 Minuten


12.6.2.1 übung: Load Analyse

dd if=/dev/urandom of=/dev/null bs=1G count=1024 iflag=fullblock &
for i in {1..3} ; do w ;echo; sleep 10 ; done
kill -9 %1

12.6.3 Prozess Ressourcen mit top

Top ist ein einfaches Kommandozeilen Werkzeug um Prozesse nach deren Ressourcen Verbrauch zu beurteilen.
Mit den Tasten M und P kann die Tabelle nach Memory oder CPU Verbrauch sortiert werden.

  • Bitte starte top auf der Konsole und versuche die Prozesse nach Memory und CPU zu sortieren.

12.7 Bandbreite

Die Bandbreite von Verbindungen kann ebenfalls in der Konsole ausgewertet werden.

dnf -y install epel-release
dnf config-manager --enable epel
dnf -y install iftop
iftop




12.8 Connectivity

12.8.1 ping

Ping kennt wohl jeder, anbei ein paar nützliche Beispiele

  • kann der default gateway gepingt werden
ping -c3 $(ip r | grep ^default | cut -d' ' -f3 )
  • kann ins internet gepingt werden
ping -c3 8.8.8.8
  • Sind JumboFrames auf eine Bestimmte IP zugelassen?
ping -c3 -M do -s 9000 127.0.0.1




12.8.2 curl

Ist ein web client, dieser kann für viele Aufgaben eingesetzt werden.
Anbei ein paar gebräuchliche Beispiele:

  • kann via https auf das internet zugegriffen werden
curl https://kernel.org
  • Zertifikats Details für einen Zugriff
 curl -vk https://kernel.org
  • Curl verwenden um zu prüfen ob ein TCP Port erreichbar ist
curl -v https://localhost:22 2>&1 | grep -i connected




12.8.3 telnet

Das wohl bekannteste tool um einen offenen Port zu überprüfen

telnet 1.2.3.4 8080

12.8.4 tcpdump

Tcpdump dient zur Analyse von Netzwerk Verkehr.
Mehr Details findest Du in der Tcpdump Reference Card

Anbei ein paar gebräuchliche Beispiele:

  • Paket Austausch mit einem bestimmten Host anzeigen
 tcpdump host 192.168.1.1
  • Alle Pakete ausser SSH anzeigen
tcpdump not port 22




12.8.5 nmap

Nmap ist eher ein Hacking als ein Analyse Tool. Genau wie ein Messer macht der Verwendungszweck aus ob es eine Tatwaffe oder ein Werkzeug ist.
Achtung: Die Verwendung von Nmap kann von einem IDS des Kunden als Angriff ausgewertet werden.

Anbei ein par nützliche Anwendungen:

  • portscan
nmap 192.168.100.1
  • bestimmte offene ports eines gesammten netzwerks prüfen
nmap -p22,80,443 -T5 -P0 -oG - 192.168.100.* | grep '/open/'
  • Versuche das Betriebssystem zu erraten
nmap -O 192.168.100.5
  • prüfe welche hosts in einem Netzwerk pingbar sind
nmap -sP -oG - 192.168.100.*




12.8.6 Listen Ports

Applikationen stellen Ihre Dienste übers Netzwerk mit Hilfe von offenen Ports "Listen Ports" zur Verfügung.
Hier gitbt es so einige Anwendungen die dies prüfen können.

lsof -i -P -n | grep LISTEN
ss -taupen | grep LISTEN
netstat -taupen | grep LISTEN


12.9 Bonus Material

12.9.1 curl Nextcloud Upload

Um eine sichere "DropInBox" unter Nextcloud zu erstellen braucht es gar nicht viel.

  • Folder in Nextcloud erstellen und Freigeben
  • (o) Dateien Ablegen (Nur Hochladen)
  • Passwort Schutz aktivieren und Passwort kopieren
  • Ablauf Datum deaktivieren oder anpassen
  • Share Link Kopieren
  • Alles Zusammenfügen (Beispiel)
curl -u AAAj7Ags2AzeAAA:BBB0mBBB -H "X-Requested-With: XMLHttpRequest" "https://fileshare.uniqconsulting.ch/public.php/webdav/" -T sosreport.tar.xz
  • Testen:
  • Software installieren
dnf -y install sos curl
  • SOS Report erstellen
sosreport # heiter weiter mit ENTER
  • SOS Report hochladen
curl -u AAAj7Ags2AzeAAA:BBB0mBBB -H "X-Requested-With: XMLHttpRequest" "https://fileshare.uniqconsulting.ch/public.php/webdav/" -T /var/tmp/sosreport*.tar.xz
  • In Nextcloud prüfen ob der Report hochgeladen wurde

12.9.2 Curl Nextcloud Upload (Advanced)

  • Grosses File erzeugen
dd if=/dev/urandom of=1G.img bs=1M count=1024 iflag=fullblock
ls -lah
  • Grosses File Uploaden (vorarbeiten, siehe vorangehende übungen)
 curl --verbose --progress-bar -u AAAj7Ags2AzeAAA:BBB0mBBB -H "X-Requested-With: XMLHttpRequest" "https://fileshare.uniqconsulting.ch/public.php/webdav/" -T 1G.img >/dev/null

13 Exam

Installiere folgenden Skript um die Uebungen zu loesen, diese passen auf ein CentOS 8

curl -L -k https://github.com/joe-speedboat/shell.scripts/raw/master/exam > /usr/local/sbin/exam
chmod 700 /usr/local/sbin/exam
exam