Difference between revisions of "Linux Basis Know How fuer System Administratoren"
Line 180: | Line 180: | ||
: 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. | : 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. | ||
− | == | + | ==Treiber sind Module== |
[[File:userspace-kernelspace.png|thumb]] | [[File:userspace-kernelspace.png|thumb]] | ||
Revision as of 13:30, 13 October 2020
Contents
1 Einleitung
- 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
- Apliances: VCSA, vRA, vRO, vROPS, LI,..., OpenFiler, GreenBone Security Manager...
- Embedded Devices: WLAN AccessPoints, Raspberry Pi, Beagle Bone, many more...
- Super Computer
- Cloud Services: Google, AWS, RackSpace, ...
- Netzwerk Services (Apache,Nginx,Tomcat,Datenbanken,...)
- Mobile Devices
- IoT
- Medizin
- Automobil Industrie
- überall eigentlich ...
4.3 OpenSource verstehen
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.
Folgendes sind die Grundsätze dieses Textes:
- Jede gute Software wird von einem Entwickler geschrieben, der ein persönliches Problem lösen will.
- Gute Programmierer wissen, was sie schreiben müssen. Brillante wissen, was sie neuschreiben müssen (und was sie wiederverwenden können).
- Plane, eine Version zu verwerfen; du wirst es sowieso tun.
- Wenn du die richtige Einstellung hast, werden dich interessante Probleme finden.
- Wenn du das Interesse an einem Programm verlierst, ist es deine Pflicht, dieses einem kompetenten Nachfolger zu übergeben.
- Wenn du deine Benutzer als Mitprogrammierer betrachtest, ist dies der einfachste Weg zu schneller Verbesserung und effizientem Debugging.
- Veröffentliche früh. Veröffentliche häufig. Und höre auf die Benutzer.
- Mit einer hinreichend großen Gruppe von Betatestern und Mitentwicklern wird fast jedes Problem schnell erkannt und die Lösung von jemandem gefunden.
- Schlaue Datenstrukturen und einfacher Code (im englischen Original: „dumb code“) funktionieren viel besser als andersherum.
- Wenn du deine Betatester wie deine wertvollste Ressource behandelst, werden sie dies auch werden.
- Fast so gut wie eigene gute Ideen zu haben, ist es, gute Ideen von den Benutzern zu erkennen. Manchmal ist letzteres besser.
- Meist entstehen die brillanten Lösungen aus der Erkenntnis, dass das Problem falsch verstanden wurde.
- Perfektion (im Design) ist nicht erreicht, wenn man nichts mehr hinzufügen kann, sondern wenn nichts mehr entfernt werden kann.
- Jedes Tool soll so funktionieren, wie erwartet. Aber ein wirklich gutes Tool ermöglicht Verwendungszwecke, an die du niemals gedacht hättest.
- Wenn du Schnittstellencode schreibst, verhindere um jeden Preis, den Datenstrom zu verändern – und verwirf nur etwas, wenn dies der Empfänger verlangt.
- Wenn deine Programmiersprache nicht ansatzweise Turing-vollständig ist, kann syntaktischer Zucker dein Freund sein.
- Ein Sicherheitssystem ist nur so sicher wie sein Geheimnis. Vermeide Pseudogeheimnisse.
- Um ein interessantes Problem zu lösen, suche eines.
- 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 guter Weg sich schnell 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 Überblick
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 Distrwatch 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.
5.1 Kernel
- 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.
5.2 Treiber sind Module
5.3 Boot Vorgang
5.4 Grund Konzepte
5.4.1 Alles ist eine Datei
5.4.2 Dateisystem Struktur
5.4.3 Journal und Syslog
5.4.4 Welche Bedeutung hat Mail?
6 Linux Devirate
6.1 Red Hat basierend
6.2 Debian basierend
6.3 Andere
6.4 Einloggen und Devirat bestimmen
7 Installation eines CentOS 8 Core als VM
7.1 Sprache
7.2 Zeit/Zone/NTP
7.3 Partitionierung
7.3.1 Classic
7.3.2 LVM
7.3.3 Filesystem Formate
7.3.4 Software
7.4 Netzwerk Konfiguration
7.5 Security Settings
7.6 Admin User Erstellung
8 Erste Schritte
8.1 Administration via SSH
8.1.1 File Transfer via SSH
8.1.2 Berechtigungen (Posix & ACL)
8.1.3 Dateien Editieren via VIM
9 Basis- Wissen und Basis- Konfiguration
9.1 Hilfe finden
9.2 Dateisystem Hirarchie
9.3 SELinux
9.4 FirewallD / IPTables
9.5 Netzwerk Konfiguration
9.6 sudo Rechte
9.7 YUM/DNF Paket Manager
9.7.1 repositories
9.7.2 add
9.7.3 remove
9.7.4 upgrade
9.8 Cron Scheduling
9.9 Cockpit Web Administration
10 Fehler Analyse
10.1 Log Files
10.1.1 LogFiles
10.1.2 Syslog
10.1.3 journalctl
10.2 SOS Report
10.3 Disk
10.3.1 Block-Device
10.3.2 Inode
10.3.3 File
10.4 CPU
10.4.1 Prozesse
10.4.2 Load