Content from Vorbesprechung


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Was ist Datenmanagement?
  • Was ist digitale Selbstbestimmtheit?
  • Warum ist eine selbst gehostete Datenmanagementlösung gut?

Ziele

  • Thematische Einleitung
  • Vorstellung der Ziele und Inhalte des Kurses
  • Voraussetzungen, die Sie mitbringen sollten
  • Informationen zum Ablauf des Kurses

Thematische Einleitung


Datenmanagement im wissenschaftlichen Kontext

Der Begriff des Forschungsdatenmanagements (FDM) umschreibt den Umgang mit Forschungsdaten (z.B. Messdaten, Bilder, Artikel, Interviewdaten u.v.m.) innerhalb von Forschungsprojekten. Dabei beginnt FDM bei der Planung von Projekten, legt Standards für das Erstellen, Analysieren und Publizieren fest und sorgt durch strukturierte Archivierung für eine nachhaltige Speicherung und die Möglichkeit der Nachnutzung der Forschungsdaten.

Mehr zum Thema FDM finden Sie z.B. hier, hier oder im Kurs FDM Basics

Um während der aktiven Forschungsarbeit seine Daten strukturiert und zugänglich speichern zu können und mit anderen Projektteilnehmenden kollaborieren zu können, sind online Dateispeicherung und online Dateibearbeitung essentiell.

Häufig werden hierfür die Angebote großer Tech-Konzerne aus dem Ausland genutzt. Es gibt aber auch die Möglichkeit solche Lösungen selbst zu betreiben. Dadurch ist der Datenschutz gewährleistet, da keine Daten außerhalb der EU gespeichert werden. Außerdem ist man unabhängig von den vermeintlich günstigen Angeboten der Tech-Konzerne.

Die Probleme, die eine solche Abhängigkeit auch im privaten Alltag herbeiführen, erfahren Sie in der folgenden Aufgabe.

Aufgabe 1: Mark und sein Sohn

In diesem Fall ist einiges schief gelaufen. Wir werden darüber in der ersten Präsenzsitzung diskutieren.

Auf jeden Fall hat Mark jedoch seine informationelle Selbstbestimmung aufgegeben.

Informationelle Selbstbestimmtheit

Unter dem Begriff informationelle Selbstbestimmtheit wird verstanden, dass Personen selbst über ihre Daten bestimmen können. Das Bundesverfassungsgericht hat dazu bereits 1983 geurteilt:

“Das Grundrecht gewährleistet insoweit die Befugnis des Einzelnen, grundsätzlich selbst über die Preisgabe und Verwendung seiner persönlichen Daten zu bestimmen.”

Aber wie können wir selbst über die Preisgabe unserer Daten bestimmen?

Digitale Mündigkeit

Um selbst über seine Daten zu bestimmen, sollte man die Daten und deren Zustandenkommen verstehen. D.h. angewendete Technik sollte verstanden und hinterfragt werden. Stimmt etwas nicht, sollte Kritik geübt werden oder ggf. nach Alternativen gesucht werden. Fragen Sie sich beim Einsatz digitaler Tools immer:

  • Welche Daten gibt es?

  • Wann entstehen welche Daten?

  • Wer hat Zugriff auf diese Daten?

  • Welche Daten möchte ich wem preis geben und welche behalte ich für mich?

Wie digital mündig sind Sie?

Lesen Sie den folgenden Artikel von Digitalcourage

Welche der im Artikel genannten Punkte setzen Sie bereits um? In welchen Bereichen können Sie noch “mündiger” werden?

Nutzen Sie ein kostenloses E-Mailpostfach? Speichern Sie Daten in verdächtig günstigen Onlinespeichern? Wie abhängig sind Sie von Big Tech (Apple, Google, Amazon, Microsoft)?

Mehr zum Thema digitale Mündigkeit findet sich auch bei Simon 2024 1

Digitale Selbstbestimmtheit

Zu einem selbstbestimmten Leben gehört auch eine digitale Selbstbestimmtheit.

Deshalb:

  • eingesetzte Technik verstehen

  • Open-Source statt Closed Source

  • Community statt Großkonzern

Noch mehr zu digitaler Selbstbestimmtheit und Selbstverteidigung

Noch mehr Informationen zum Thema finden Sie bei Interesse unter anderem bei den folgenden Quellen:

Ziele und Inhalte des Kurses


Allgemeine Ziele

  • Einstieg die Linux-(Server)-Welt

  • Weniger Angst vor Technik (und Fehlern)

  • Einstieg in die Systemadministration

  • Einrichten einer selbst betriebenen Cloudanwendung zur Dateiverwaltung mit dem Raspberry Pi

Inhaltliche Schwerpunkte

  • Betriebssystem: Installation und grundlegende Verwaltung:

Wir beginnen ganz am Anfang mit der Installation dem Kennenlernen des Linux-Betriebssystems. Wir nutzen dazu das Betriebssystem Raspberry Pi OS, welches wiederum auf dem Debian-Betriebssystem aufbaut. Mehr dazu in der zweiten Woche.

Screenshot auf welchem das Programm Raspberry Pi Imager mit Funktionen zur Auswahl eines Betriebssystems zu sehen ist.
Raspberry Pi Imager: Tool zur Installation des Raspberry Pi OS
  • Sicherheit: Backup, Firewall, Fern-Zugriff:

Vor der Installation der eigentlichen Cloud-Software muss der Server eingerichtet werden. Dazu zählen z.B. Funktionen zum Fernzugriff (SSH), verschiedene Techniken zum Absichern des Servers (Firewall, Benutzer und Zugriffsrechte) aber auch das Thema Backup.

Drei Screenshot von Kommandozeilen. Der erste zeigt einen Befehl zum herstellen einer SSH-Verbindung, der zweite den rsync-Befehl zum erstellen von Backups und der dritte den Befehl zur erlauben von SSH-Verbindungen in der Firewall.
Wir werden die meiste Zeit mit der Kommandozeile arbeiten (hier am Beispiel von SSH (Fernzugriff), Rsync (Dateisynchronisation) und ufw (Firewall)
  • Netzwerktechnik: Router, Portweiterleitungen, DDNS:

Wir werden uns damit beschäftigen, wie der Server, der Zuhause im Wohnzimmer steht, weltweit im Internet erreichbar gemacht werden kann. Dafür müssen wir uns mit Begriffen Dynamic Domain Name System (DDNS), Portweiterleitung, Firewall, NAT, IPv4, IPv6 und weiteren auseinandersetzen.

Screenshot, der dieAdministrationsoberfläche eines Fritzbox-Routers zeigt. Konkret sind Funktionen zum einrichten von Portweiterleitungen zu sehen.
Administrationsoberfläche eines FritzBox-Routers. Zu sehen sind Optionen zum erstellen von Portfreigaben
  • Webserver und Cloudserver

Sobald der Server grundlegend eingerichtet ist und die sichere Erreichbarkeit im Internet gewährleistet ist, werden wir uns an die Installation und Konfiguration des Webservers (Apache2) und des Cloudservers (Nextcloud) machen. Der Webserver kann gewissermaßen als Kommunikationszentrale zwischen Cloudserver und Internet betrachtet werden. Beim Cloudserver handelt es sich um die Software, die für die Dateiverwaltung zuständig ist und mit welcher wir am Ende unsere Dateien betrachten, synchronisieren, freigeben und bearbeiten wollen.

Zu sehen sind zwei Screenshots. Links ein Screenshot einer Konfigrationsdatei einer Website für den Apache2-Webserver und rechts die Browser-Administrationsoberschläche des Cloudservers Nextcloud.
Konfigrationsdatei einer Website mit dem Apache2-Webserver (links) und die Administrationsoberschläche des Cloudservers Nextcloud (rechts)
  • Ausblick

Sofern am Ende des Kurses noch Zeit verfügbar ist, schauen wir uns noch ein paar andere Projekte an, die ebenfalls auf einem Raspberry Pi betrieben werden können. Denn es gibt sehr viele Dinge, die man selbst betreiben kann (auf einem Rasperry Pi oder ggf. größerer Hardware). Auf Github gibt es eine große Liste mit Projekten.

Zu sehen sind vier Bilder. Von links nach rechts: Logo des Radicale-Projekts in Form eines Radieschens, Logo de Pi-hole-Projekts in Form einer abstrahierten Himbeere, Logo des KODI-Projekts als auf der Spitze stehendes balues Quadrat und zuletzt ein Screenshot aus dem Programm MotionEye, welcher verschiede Einstellungsparameter fpr eien Kamera zeigt sowie eine Momentaufnahme der Kamera, die ein Fenster von außen überwacht.
Andere Self-Hosted-Projekte für den Raspberrry Pi: Radicale als Kalenderserver, Pi-hole als zentraler Werbeblocker, Kodi als Media-Streaming-Dienst und MotionEye zur Verwaltung von (Überwachungs-)Kameras

Voraussetzungen


Allgemeine Voraussetzungen

  • Sie sollten sicher mit Ihrem PC (Windows oder Linux) oder Ihrem Mac umgehen können

  • Sie sollten keine Angst vor Technik und der Kommandozeile haben

  • Sie sollten ein Notebook mit administrativen Rechten haben.

Technische Voraussetzungen

Für die Teilnahme am Kurs wird ein Raspberry Pi Set benötigt. Entweder Sie nutzen dafür Ihre eigene Hardware oder Sie leihen eines von max. 15 Sets aus.

Das Raspberry Pi Set besteht mindestens aus den folgenden Komponenten:

  • Raspberry Pi 4 oder 5 mit min. 4 GB RAM (besser 8 GB)

  • USB-C-Netzteil

  • SDHC-Karte (ca. 16 GB)

  • Adapterkabel Micro-HDMI auf HDMI

  • Kühlkörper ggf. mit Lüfter (v.a. beim Raspberry Pi 5 sind aktive Lüfter empfehlenswert)

  • Tastatur und Maus

Hardware-Beispiel: Raspberry Pi Kit mit Raspberry Pi 4, Gehäuse, Netzteil und Adapterkabel

Zusätzlich zum Raspberry Pi Set ist folgendes nötig:

  • 1 Patch-Kabel (LAN-Kabel) zum Anschluss des Raspberry Pi am Router

  • Zugriff auf die Administrationsoberfläche Ihres Routers

  • Freie Netzwerkbuchse am Router bzw. Switch (notfalls auch WLAN)

  • einen Monitor/Fernseher mit HDMI-Eingang

  • Aufstellplatz mit Strom- und Netzwerkversorgung

  • Leerer USB-Stick oder leere externe Festplatte mit eigener Stromversorgung

Organisatorisches


Wöchentlicher Ablauf:

Die Wochen laufen i.d.R. wie folgt ab:

  1. Sie arbeiten das Lernmaterial auf Github durch

  2. Sie absolvieren auf ILIAS den Test zum Selbstlernmaterial

  3. Sie setzen die Arbeitsschritte selbstständig mit Ihrem Raspberry Pi um. Dazu können Sie (online oder in Präsenz) zum Übungstermin kommen.

Gruppenarbeit

Um die prkatische Umsetzung des Projekts zu erleichtern, werden im Kurs Gruppen gebildet. Nutzen Sie diese Gruppen, um Fragen zu klären, das praktische Vorgehen gemeinsam zu planen und bei Problemen gemeinsam nach Lösungen zu suchen.

Leistungsnachweis

  • Bei erbrachter Leistung erhalten Sie für diesen Kurs 3 ECTS-Punkte zunächst ohne Note oder auf expliziten Wunsch mit Note.

  • Der Kurs ist anrechenbar für das Zertifikat Data Literacy im Wahlbereich praktische Anwendungen

  • Die erforderliche Leistungen sind:

    • wöchentliche Bearbeitung der Lernmaterialien
    • Abgabe von fünf Protokollen im Laufe des Vorlesungszeit

    • selbstständige Konfiguration eines Cloud-Servers

    • Verfassen eines Abschlussberichts (ca. 3-4 Seiten)

  • Der Workload beträgt entsprechend 3 ECTS ca. 90 Stunden im Semester. Davon entfallen ca. 21 Stunden auf die Präsenzsitzungen, 9 Stunden auf den Abschlussbericht und 60 Stunden auf die Vor- und Nachbereitung der Sitzungen inkl. den Protokollen. D.h. pro Woche müssen Sie während der Vorlesungszeit durchschnittlich ca. 4,3 Stunden Arbeitszeit zusätzlich zu den Präsenzsitzungen einplanen.

Mehr Informationen folgen in der ersten Präsenzsitzung.

Hauptpunkte

  • Die eigene Cloud schützt die Privatsphäre und reduziert die Abhängigkeit von großen Monopolisten
  • Der Kurs begleitet Sie vom Hardwaresetup und dem Linux Betriebssystem über die Grundkonfiguration des Servers bis hin zur Installation und Konfiguration des eigenen Cloudservers
  • Sie müssen jede Woche Selbstlernmaterial durcharbeiten, auf ILIAS einen Test durchführen und die praktischen Aufgaben absolvieren
  • Am Ende des Kurses müssen Sie noch einen Abschlussbericht verfassen
  • Für den Kurs erhalten Sie 3 ECTS-Punkte

  1. L. Simon, Digitale Mündigkeit - Wie wir mit einer neuen Haltung die Welt retten können, (Bielefeld 2024)↩︎

Content from Hardware und Betriebssystem


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Was steht am Anfang eines jeden IT-Projekts?

  • Was ist ein Server, was ein Client?

  • Welche Betriebssystem-Optionen gibt es für den Raspberry Pi?

Ziele

  • Begriffsklärung
  • Betriebssystem installieren
  • Raspberry Pi zusammenbauen und erstmalig starten
  • Erste administrative Schritte mit dem Raspberry Pi

Die Hard- und Software

Hardware

Zu Beginn der meisten IT-Projekte steht die Frage, wo diese Projekte umgesetzt werden sollen. Dabei gibt es heutzutage unterschiedliche Möglichkeiten. Abgesehen von Tests auf lokalen Endgeräten wie PC oder Notebook, werden für viele Projekte spezialisierte Geräte genutzt. Vor allem für Firmen, Rechenzentren und andere Hochleistungsszenarien werden Computer mit spezialisierter Hardware wie Prozessoren, Festplatten oder Arbeitsspeichern eingesetzt, die für diese anspruchsvollen Aufgaben geeignet sind und häufig nicht mit Hardware vergleichbar ist, die in PCs verbaut wird.

Neben eigener Hardware besteht heute auch die Möglichkeit, seine Projekte auf fremder Hardware umzusetzen. Diese fremde Hardware befindet sich in einem entfernten Rechenzentrum (“der Cloud”) und ist über das Internet erreich- und steuerbar. Häufig wird die Hardware dabei virtualisiert, d.h. das z.B. die Leistung eines echten Prozessors mithilfe von Software für mehrere virtuelle Computer zur Verfügung gestellt wird.

Für dezentrale Projekte können sogenannte Embedded Devices genutzt werden. Hierbei handelt es sich häufig um Spezialanfertigungen für genau einen Einsatzzweck, z.B. als Kassensystem oder Waage im Supermarkt oder als Informationsdisplay im öffentlichen Raum. Für diese Geräte werden auch spezielle Betriebssysteme und Software eingesetzt.

Für kleinere Projekte wie Heimanwender können normale PCs genutzt werden. Passender für Projekte mit wenig Leistungsanspruch (und im Heimanwenderbereich ist das i.d.R. der Fall) sind Mini-PCs, bei denen sämtliche oder die meisten Bauteile (Prozessor, Arbeitsspeicher, Datenspeicher und externe Schnittstellen wie Netzwerk und USB) auf einer Platine verbaut sind. Diese sogenannten Systems-on-a-Chip (SoC) haben den Vorteil, dass sie besonders energiesparsam sind, wenig Platz benötigen, keinen oder kaum Lärm verursachen und im Vergleich mit herkömmlichen PCs oder gar professionellen Servern deutlich günstiger sind.

Server vs. Client

Bezogen auf ihre Funktion innerhalb eines Computernetzwerks werden Geräte unterschiedlich bezeichnet:

  1. Client

Klassisches Endgerät wie PC, Notebook oder Smartphone. Hat keine zentralen Aufgaben. Ist ein Client-Gerät ausgefallen, ist das Netzwerk nicht betroffen.

  1. Server

Übernimmt als Kommunikationsknotenpunkt zentrale Aufgaben im Netzwerk. Je nach Leistungsbedarf wird spezialisierte Hochleistungshardware, normale PCs oder SoCs genutzt. Fällt ein Server aus, fehlt damit i.d.R. eine zentrale Funktion im Netzwerk. Je nachdem welche Aufgaben der Server hat, kann dies zum vollständigen versagen des Netzwerks führen oder nur zur nicht Erreichbarkeit eines Dienstes (z.B. einer Website).

Software

Unter Software kann all das verstanden werden, was nicht angefasst werden kann. Also sämtlicher Programmcode, der auf einem Computer installiert ist. Dazu gehört sowohl das Betriebssystem, die Boot-Umgebung (welche das Betriebssystem lädt) aber auch alle anderen Programme wie Treiber, eine Firewall, ein Office-Programm oder ein Webserver-Programm.

Möchte man ein bestimmtes IT-Projekt umsetzen und hat die Hardware besorgt, gilt es auch die richtige Software auszuwählen. Hierbei ist zu beachten, dass Hard- und Software miteinander kompatibel sein müssen. Z.B. unterstützt nicht jedes Betriebssystem jede Art von Prozessor (siehe auch diesen Wikipedia-Artikel.

Abhängig von den Programmen, die man nutzen möchte, kann das passende Betriebssystem gewählt werden. Für viele Serveranwendungen, wie die in diesem Kurs genutzte Software Nextcloud, werden Linux-Betriebssysteme empfohlen. In vielen Fällen werden für die Funktion des Hauptprogramms (in unserem Fall Nextcloud) weitere Programme benötigt. Das sind häufig ein Datenbankmanagementsystem wie Mysql oder MariaDB, die Skriptsprache PHP, und ein Webserver wie Apache2. In dieser Kombination spricht man auch von einem LAMP-Stack (Linux, Apache, Mysql/MariaDB und PHP).

Die genauen Anforderungen an die Hard- und Software sind häufig den Handbüchern der Programme zu entnehmen. Allerdings hängt die richtige Wahl auch von der Intensivität der Nutzung, persönlichen Vorlieben oder Vorgaben innerhalb einer Organisation ab.

System requirements

Szenario: Sie wollen für eine kleine Forschungsgruppe (ca. 10 Personen) eine Datenmanagement-Lösung betreiben und als Serversoftware Nextcloud installieren.

Welche Hardware wählen Sie dafür? Schauen Sie sich dafür die System requirements von Nextcloud an und wählen Sie aus einer der folgenden Hardware-Optionen:

  1. Raspberry Pi 4 mit 8GB RAM für ca. 100€ und einer externen 2 TB USB-HDD-Festplatte

  2. Raspberry Pi 5 mit 8GB RAM für ca. 110€ und einer 2 TB SSD-Festplatte

  3. Odroid H4 Ultra mit einer 2 TB SSD-Festplatte

  4. Einen Tower Server SR10766 der Intel Xeon E-2400 Serie

Die genauen Hardwareanforderungen sind (v.a. am Anfang des Projekts und ohne Vorkenntnisse) schwer abzuschätzen. Geeignete Lösungen können aber die Nummern 2. und 3. sein. Die Nummer 4 wäre überdimensioniert und mit der Nummer 1. kommt das System an seine Grenzen. Auch der Raspberry Pi 5 ist für 10 Personen vermutlich zu schwach. Das hängt aber stark von der Art und Intensivität der Nutzung ab.

Praktische Umsetzung

Im Folgenden werden die Schritte zur praktischen Umsetzung erklärt. Diese können gemeinsam während der Präsenzsitzungen oder selbstständig durchgeführt werden.

Installation des Betriebssystems

Für unser Projekt nutzen wir als Hardware den Raspberry Pi 4 oder 5. Als Betriebssystem installieren wir das offizielle Betriebssystem des Herstellers: Raspberry Pi OS 64-Bit. Dabei handelt es sich um ein Linux-Betriebssystem aus der Reihe der Debian-Linux-Systeme. Damit ist unser System sehr ähnlich zu den Linux-Betriebssystemen Debian, Ubuntu oder Linux Mint.

Grundlegend können auf einem Raspberry Pi unterschiedliche Betriebssystem installiert werden. Sie müssen jedoch mit dem ARM-Prozessor kompatibel sein. Möglich sind z.B. Ubuntu, Windows, viele Linux-Distribution oder Spezialanwendungen wie LibreElec als Medienstreaming-Server.

Für die Installation des Betriebssystems wird vom Hersteller der Hardware das Programm Raspberry Pi Imager zur Verfügung gestellt. Dieses wird auf dem eigenen (Windows, Linux)-PC oder Mac installiert. Anschließend kann damit das Betriebssystem auf die SD-Karte oder Festplatte des Raspberry Pi geschrieben werden.

Vorgehen:

  1. Betriebssystem auswählen: Rapsberry Pi OS 64 Bit
Startbildschirm des Raspberry Pi Imager. Es ist zu sehen, dass als Betriebssystem das Raspberry Pi OS 32 Bit ausgewählt ist
Raspberry Pi Imager mit ausgewähltem Betriebssystem (hier in der 32 Bit-Variante).
  1. Speicher auswählen: die SD-Karte muss im PC eingesteckt sein und nun ausgewählt werden.

  2. Über das Zahnradsymbol die erweiterten Einstellungen öffnen

Startbildschirm des Raspberry Pi Imager. Es ist zu sehen, dass als Betriebssystem das Raspberry Pi OS 32 Bit ausgewählt ist
Erweiterte Einstellungen des Raspberry Pi Imager
  1. Folgende Optionen einstellen:

    1. Hostname: ein Name für deinen Raspberry Pi (keine Sonderzeichen, keine Leerzeichen)

    2. SSH aktivieren auswählen

    3. Benutzername und Passwort festlegen (und merken!)

    4. WLAN-Zugang konfigurieren

    5. Spracheinstellungen festlegen: Europe/Berlin und de

    6. Telemetrie deaktivieren

  2. Inhalte mit dem Schreiben Button auf die SD-Karte schreiben

Hardware zusammen bauen

  1. Gehäuse öffnen (Pfeile am Deckel beachten)

  2. Raspberry Pi Board auf die Zapfen des Gehäuses setzen

  3. Wenn noch nicht geschehen: Kühlkörper aufkleben

  4. Gehäuse schließen und falls vorhanden zuvor den Lüfter einsetzen

  5. Netzkabel und HDMI-Kabel anschließen (noch nicht mit dem Stromnetz verbinden)

  6. SD-Karte einsetzen

  7. Monitor verbinden

  8. Maus und Tastatur anschließen

  9. Netzteil in die Steckdose stecken

Erster Start

Der erste Start ist i.d.R. etwas langsam, da im Hintergrund noch ein paar einmalige Prozesse ablaufen. Diesen Startvorgang einfach abwarten, bis der Desktop des Raspberry Pi OS erscheint.

Nun können erste Grundeinstellungen vorgenommen werden:

  1. Im Hauptmenü (oben links) unter Einstellungen auf Raspberry Pi Konfiguration gehen

  2. Autologin deaktivieren

  3. Interfaces: SSH aktivieren (wenn noch nicht passiert)

  4. Performance: ggf. Raspberry Pi Lüfter konfigurieren

  5. Localisation: ggf. Sprache einstellen

  6. Bluethooth ausschalten (Symbol oben rechts)

Der Raspberry Pi ist nun grundlegend eingerichtet und einsatzbereit. Die Nutzung unterscheidet sich hierbei zunächst nicht von einem herkömmlichen PC. In den folgenden Lektionen wird der Mini-Computer jedoch in seiner Funktionalität erweitert, um als Server genutzt werden zu können.

Weitere Quellen

Hauptpunkte

  • Für viele Heimanwender und Kleinprojekte reichen Mini-PCs (SoC) aus.
  • Für große Projekte wird spezialisierte Serverhardware benötigt
  • In diesem Kurs wird auf einem Raspberry Pi mit Linux-Betriebssystem die Cloud-Software Nextcloud installiert.
  • Die Installation des Betriebssystems erfolgt mit dem Raspberry Pi Imager
  • Der Raspberry Pi mit dem Raspberry Pi OS kann sowohl wie ein herkömmlicher PC, als auch wie ein Server genutzt werden

Content from Linux Schnellstart


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Was sind markante Unterschiede zwischen Linux und Windows/Mac

  • Wie ist das Dateisystem von Linux aufgebaut?

  • Wie kann ich unter Linux Software verwalten?

  • Wie bediene ich die Kommandozeile?

Ziele

  • Essentielle Verzeichnisse kennenlernen

  • Software installieren und verwalten

  • Erste Schritte mit der Linux-Kommandozeile

Status Quo:


  • Das Betriebssystem wurde installiert

  • Der erste Start wurde durchgeführt

  • Der Raspberry Pi ist mit dem Netzwerk verbunden und der SSH-Dienst ist aktiviert

Raspberry Pi OS


Beim Raspberry Pi OS handelt es sich um eine Linux-Distribution. Da das Kernstück eines jeden Linux-Systems, der Linux-Kernel, unter einer offenen Lizenz steht, kann und wird dieses Kernstück von vielen Organisationen und Personen genutzt. Erst durch die Kombination mit weiterer Software wie Treibern, Dienstprogrammen und ggf. einer graphischen Oberfläche wird ein vollwertiges Betriebssystem daraus. Die vielen unterschiedlichen Zusammenstellungen mit dem Linux-Kernel als Kernstück werden als Distribution bezeichnet.

Einen Eindruck über die Fülle an unterschiedlichen Distributionen gibt die Linux Distribution Timeline auf Wikipedia.

Das Raspberry Pi OS wird von der Raspberry Pi Ltd. entwickelt. Es ist speziell auf die Hardware des Raspberry Pis angepasst, ressourcensparend und basiert auf der Debian-Distribution. Deshalb sind Anleitungen für Debian-Linux-Systeme häufig auch für das Raspberry Pi OS passend.

Linux Schnellstart:


Dateisystem

Das Linux-Dateisystem ist für alles Linux-Distributionen weitestgehend einheitlich. Die oberste Hierarchie-Ebene ist dabei immer das Verzeichnis / (Slash). Dieses ist vergleichbar mit dem “C:”-Laufwerk unter Windows.

Weitere wichtige Verzeichnisse sind:

  • die Benutzerverzeichnisse unter /home/<username>/, z.B. /home/david/

Hier liegen die Dateien, Dokumente und Konfigurationen der User. Schreib- und Leserechte haben nur die jeweiligen Benutzer und die Administratoren. Die Verzeichnisse sind mit dem Pfad C:\Users\<username>\ unter Windows vergleichbar.

  • Die Systemverzeichnisse (z.B. /etc/, /var/, /mnt/, /lib/, /bin/, /sys/)

Diese Verzeichnisse beinhalten Systemdaten, z.B. Programme, Programmbibliotheken, temporäre Dateien, Log-Dateien oder systemweite Konfigurationen. Deshalb haben in diesen Verzeichnissen i.d.R. nur Administratoren Schreibrechte.

Im Vergleich mit dem Dateisystem von Windows fällt auf, dass es unter Linux nur einen Verzeichnisbaum für alle Dateien, Festplatten und Laufwerke gibt. Auch zusätzliche Festplatten oder externe Datenträger werden in Linux-Systemen zunächst durch eine Gerätedatei im Verzeichnis /dev/ identifiziert und können dann über sogenannte Einhängepunkte oder Mountpoints an einer beliebigen Stelle des Verzeichnisbaumes verfügbar gemacht werden (“eingehängt” oder “gemountet” werden). Unter Windows haben zusätzliche Datenträger und Laufwerke stets ihre eigene unabhängige Verzeichnishierarchie, was die Verwaltung von Festplatten weniger flexibel macht.

Die Abbildung zeigt nebeneinander drei Verzeichnisbäume. Je einen für die Betriebssystem Linux, Mac und Windows. Dabei wird insbesondere die unterschiedliche Art der Einhängung von zusätzlichen Datenträgern wie Festplatten oder USB-Sticks hervorgehoben.
Vergleich der Dateisysteme von Linux, Mac und Windows

Systemweite Konfigurationen in /etc/

Das Verzeichnis /etc/ enthält zahlreiche Konfigurationsdateien für die systemweite Verwaltung von Programmen. Viele Programme haben hier eigene Unterordner (z.B. /etc/apache2 für die Konfiguration des Apache-Webservers). Möchte man die Konfiguration eines Programms systemweit ändern, ist das /etc/ Verzeichnis i.d.R. ein guter Startpunkt. Schreibrechte haben hier nur Administratoren.

Programmverzeichnnisse: /bin/, /sbin/, /usr/bin/ /usr/sbin/

  • /bin/: Essentielle Systemprogramme (Start, Restore, Basisprogramm des Betriebssystems)

  • /usr/bin/: ergänzende Systemprogramme

  • /sbin/ und /usr/sbin/: nur für Administratoren nutzbare Programme

Dynamische Programmdateien: /var/

Das Betriebssystem erzeugt ständig neue Dateien, z.B. werden in den Log-Dateien Systemereignisse protokolliert. Solche dynamischen Inhalte werden i.d.R. im /var/-Verzeichnis gespeichert.

Einhängepunkte /mnt/ und /media/

Externe Laufwerke und Wechselmedien werden standardmäßig in den Verzeichnisse /mnt/ und /media/ eingebunden. Dies ist allerdings kein zwingende Vorgabe und häufig gibt es gute Gründe eine Festplatte an einer anderen Stelle des Verzeichnisbaumes einzuhängen, z.B. im Home-Verzeichnis eines Users.

Weitere Quellen

Mehr zur Verzeichnisstruktur von Linux findet sich z.B. bei Ubuntusers oder bei der Tuxacademy im Handbuch zur Linux-Essentials-Zertifizierung auf den Seiten 146-154.

Paketverwaltung


Programme (oder auch Pakete, Packages, Software oder Apps) werden in Linux i.d.R. durch eine zentrale Paketverwaltung ähnlich einem App-Store auf dem Smartphone installiert. Da auch Android auf dem Linux-Kernel aufbaut, sind die Prozesse zur Softwareverwaltung im Raspberry Pi OS vergleichbar mit den Prozessen, die im Hintergrund ablaufen, wenn man auf dem Smartphone eine App installiert und aktualisiert.

Paketquellen

Zur Installation verfügbare Software wird unter Linux in Paketrepositorien (oder auch Paketkatalogen oder Paketquellen) aufgelistet und verfügbar gemacht. Ein Repositorium wird i.d.R. vom Hersteller des Betriebssystems zur Verfügung gestellt und ähnelt in der Funktion dem Google-Play-Store auf einem Android-Smartphone.

Die in den Repositorien des OS-Herstellers beinhaltete Software sind in kompatibel mit dem Betriebssystem und je nach konkretem “Unterkatalog” auch getetest. Allerdings handelt es sich nicht immer um die neueste Version, da neue Versionen aufgrund der Tests und Abhängigkeiten zu anderer Software erst zeitverzögert in die Kataloge aufgenommen wird.

Bevor Software Software installiert werden kann, muss das Betriebssytem die aktuelle Version des Katalogs herunterladen. Dies erfolgt auf der Kommandozeile mit dem Befehl sudo apt-get update oder sudo apt update. Möchte man anschließend ein Programm installieren, muss der Name des entsprechenden Pakets bekannt sein. Die Installation erfoglt dann mit sudo apt-get install <Paketname>.

Der Vorteil der zentralen Paketverwaltung ist, dass in den Repositorien stetst festgehalten ist, welche Version eines Programms die aktuelle ist. Druch den Abgleich der Versionen aller installierter Programme mit dem Repositorium kann die Paketverwaltung so schnell ermitteln, für welche Programme es Aktualisierungen gibt. Um diese dann zu installieren, muss der Befehl sudo apt-get upgrade ausgeführt werden.

Fremdquellen

Ist den Paketquellen des OS-Herstellers nicht die nötige Software enthalten, können auch Fremdquellen zum System hinzugefügt werden. Hierbei handelt es sich um Paketkataloge, die nicht vom OS-Hersteller (oder der Community) überprüft wurden. Deshalb besteht hier stets die Gefahr, dass die enthaltende Softwar das System beschädigt oder es sich um Malware handelt. Es gibt jedoch immer wieder Fälle, bei welchen solche Fremdquellen nötig sind. Wie diese dem System hinzugefügt werden können, ist z.B. hier für die Ubuntu-Distribution geschildert und kann so auch für das Raspberry Pi OS übernommen werden.

Weitere Befehle

Weiter wichtige Befehle für die Paketverwaltung sind z.B.

  • sudo apt-get autoremove <Paketname>: entfernt Abhängigkeiten von Programmen, die selbst nicht mehr installiert sind. Dadurch wird das System aufgeräumt.

  • sudo apt list --upgradeable: zeigt aktualsierbare Programm an

  • sudo apt-get remove <Paketname>: entfernt ein Paket, nicht jedoch dessen Konfigurationsdateien

  • sudo apt-get purge <Paketname>: entfernt ein Paket inkl. dessen Konfigurationsdateien

Stolpersteine bei der Paketverwaltung

  • Abhängigkeitsprobleme: v.a. bei der manuellen Installation von Paketen oder der Nutzung von Fremdquellen besteht die Möglichkeit, dass ein Programm ein anderes Programm als Abhängigkeit benötigt. Diese Abhängigkeit ist aber nicht in den Paketquellen enthalten. Dadurch kommt es zu einem nicht automatisch auflösbaren Abhängigkeitsproblem. Mögliche Maßnahmen sind die manuelle Installation der Abhängigkeiten (die aber weiter Abhängigkeiten haben können) oder der Downgrade auf eine kompatible Version.

  • Paketname: häufig sind die Paketnamen für eine Programm nicht eindeutig. Um den genauen Namen für die Installation zu finden, können die Programmkataloge durchsucht werden: sudo apt-cache search <Suchbegriff>. Alternativ kann natürlich auch im Internet nach dem genauen Namen eines Pakets gesucht werden.

Webserver

Sie möchten auf Ihrem Linux-Server eine Website hosten. Dazu wollen Sie den Webserver Apache installieren. Wie gehen Sie vor?

Der erste Schritt bei der Softwareverwaltung sollte immer die Aktualisierung der Paketquellen sein: sudo apt-get update.

Auch kann es nicht schaden, das System auf den aktuellen Stand zu bringen, bevor neue Software installiert wird: sudo apt-get upgrade.

Dann müssen Sie herausfinden, wie das Paket, das den Apache-Webserver für das Raspberry Pi OS liefert, heißt. Das können Sie mit einer Internetrecherche oder dem Befehl sudo apt-cache search apache tun.

Wenn Sie wissen, wie das Paket lautet, können Sie dieses mit dem Befehl sudo apt-get install <Paketname> installieren.

Kommandozeile


Grundlegende Bedienung

  • Pfeiltasten hoch/runter: durch bisherige Befehle blättern und diese wieder aufrufen

  • Tab-Taste: Autovervollständigung von Pfaden und Befehlen. Erste Buchstaben eines Pfades tippen, dann TAB-Taste für die Autovervollständigung oder anzeigen von Optionen.

  • STRG + C: bricht den laufenden Befehl ab

  • Kopieren: mit dem Cursor Text auswählen, dann STRG + Umschalt + C

  • Einfügen: STRG + Umschalt + V

  • Cursor-Position: mit Pfeiltasten ändern, geht nicht per Mausklick

Mit der Kommandozeile im Dateisystem navigieren

  • Verzeichnis wechseln: cd <Pfadangabe>, z.B. cd /home/david/Dokumente

-in das eigene Home-Verzeichnis wechseln: cd

  • Eine Ebene nach oben gehen: cd ..

  • Zwei Ebenen nach oben gehen: cd ../..

  • Aktuelle Positin im Dateisystem anzeigen: pwd

  • Verzeichnisinhalt anzeigen lassen: ls oder mit mehr Informationen ls -l

Dateioperationen:

  • Datei erstellen: touch <Dateipfad>/<Dateiname>

  • Verzeichnis anlegen: mkdir <Dateipfad>/<Neuer-Ordner>

  • Inhalt einer Textdatei ausgeben: cat <Datename>

  • Oberste oder letze 10 Zeilen einer Datei anzeigen lassen: head <Dateiname> und tail <Dateiname>

  • Datei kopieren/verschieben/löschen:

    • Copy: cp <Quelldatei> <Zieldatei>

    • Move: mv <Quelldatei> <Zeildatei>

    • remove: rm <Dateiname> oder remove recursive: `rm -r

Textdateien bearbeiten: Nano-Editor

Es gibt viele Texteditoren für Linux. Weit verbreitet sind z.B. nano und vim, wobei nano der einsteigerfreundlichere Editor ist. Deshalb arbeiten wir im Kurs mit dem nano-Editor.

  • Datei im Nano-Editor öffnen: nano <Dateipfad>/<Dateiname>

  • Navigation erfolgt ohne Maus, nur mit den Pfeiltasten navigieren!

  • Datei schließen und speichern: STRG + X, dann J, dann ENTER

  • Schließen ohne zu speichern: STRG + X, dann N

  • Komplette Zeile löschen: STRG + K

  • Kopieren und einfügen wie auf dem Terminal

  • Text suchen: STRG + W, dann Suchbegriff eingeben oder für weitere Treffer direkt mit ENTER bestätigen

  • Zu bestimmter Zeile springen: STRG + /, dann Zeilennummer eingeben

Hauptpunkte

  • Raspberry Pi OS ist das Linux-Betriebssystem unserer Wahl

  • Das Dateisystem unter Linux besteht aus einem einzigen Verzeichnisbaum. “/” ist dabei die obersterte Ebene

  • Software wird unter Linux zentral verwaltet. Die Verwaltung erfolgt bei der Debian-Familie mit den Programmen apt-get oder apt

  • Ein Linux-Server wird i.d.R. über die Kommandozeile gesteuert. Dabei erfolgt die Arbeit ohne Maus. Programmsteuerung, Dateioperationen und die Dateierstellung werden per Tastatur erledigt.

Content from Remote Access: das SSH-Protokoll


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Wie kann ein Computer (ggf. aus der Ferne) verwaltet werden, auch wenn er keinen Bildschirm hat?

  • Wie kann eine SSH-Verbindung sicher über unsichere Netzwerke hergestellt werden?

Ziele

  • Grundlagen des SSH-Protokolls verstehen

  • SSH-Server sicher konfigurieren

  • Sichere SSH-Verbindungen mit Schlüssel-Authentifikation aufbauen

  • den Raspberry Pi im Headless-Setup aus der Ferne steuern

Das SSH-Protokoll


Server stehen häufig an unzugänglichen Orten (Keller, gekühlte Serverräume, weit entfernte Rechenzentren o.Ä.). Dennoch müssen sie verwaltet werden. Dies wird heutzutage mittels des SSH-Protokolls gemacht (früher wurde das inzwischen veraltete Telnet-Protokoll genutzt).

Das SSH-Protokoll baut eine sichere Verbindung zwischen einem Clientgerät (z.B. Ihrem Notebook) und einem Server (z.B. Ihrem Raspberry Pi) über ein (ggf. auch unsicheres) Netzwerk auf. Über diese Verbindung besteht in der Regel Zugriff auf die Kommandozeile des entfernten Geräts, womit dieses verwaltet werden kann.

Die Verbindung kann aber auch zum Übertragen anderer Daten genutzt werden. So können Dateien übertragen werden (mit dem scp-Befehl), entfernte Dateisysteme lokal genutzt werden (per SSHFS, siehe Wikipedia) oder die graphische Ausgabe eines entfernten Programms lokal dargestellt werden (siehe diesen Heise-Artikel).

Protokoll

Bei einem Protokoll handelt es sich um eine Sammlung genau festgelegter technischer Parameter für den Kommunikationsaustausch zwischen Computern. Ähnlich der Sprache und ihrer Grammatik, auf die sich zwei Menschen zum Kommunizieren einigen. Ein Protokoll hat einen genauen Einsatzzweck und eine klar definierte Funktionsweise. z.B. ist das HTTPS-Protokoll dafür gemacht, Daten zwischen einem Browser und einem Webserver verschlüsselt mittels der TLS-Verschlüsselung zu übertragen. Mehr zum Thema findet sich bei StudySmarter

Das SSH-Protkoll nutzt verschiedene Technologien zur Gewährleistung der sicheren Übertragung. Ähnlich einer HTTPS-Verbindung werden beim Verbindungsaufbau zunächst die Kommunikationsstandards zwischen Client und Server ausgehandelt, dann werden sog. Session-Keys ausgetauscht, welche nur für die aktuelle Verbindung Gültigkeit haben. Mit diesen Session-Keys wird die eigentliche Verbindung in Form einer symmetrischen Verschlüsselung aufgebaut (welche deutliche schneller ist, als die zuvor stattfindende asymetrische Verschlüsselung, siehe dazu auch die Ressourcen von Studyflix zur symetrischen und asymmetrischen Verschlüsselung).

Voraussetzung für die SSH-Verbindung

Sie haben wie in Sitzung 2 besprochen auf Ihrem Raspberry Pi das Raspberry Pi OS installiert. Nun wollen Sie eine SSH-Verbindung von Ihrem Notebook mit Ihrem Raspberry Pi herstellen. Was sind die Bedingungen für eine erfolgreiche SSH-Verbindung?

  1. Netzwerkverbindung: der Server muss im Netzwerk erreichbar sein. Dazu müssen entweder Server und Client im selben Netzwerk (z.B. demselben Heimnetzwerk) sein oder der Server muss im Internet erreichbar sein.

  2. Software: Auf dem Raspberry Pi muss die SSH-Server-Software installiert sein (das Paket openssh-server) und auf dem Client ein SSH-Client-Programm (das OpenSSH-Client-Programm für die Kommandozeile ist i.d.R. auf allen PCs installiert. Für Windows kann auch das graphische Programm Putty installiert werden).

  3. Berechtigungen: die Anmeldung am entfernten Server ist nur möglich, wenn Sie die Berechtigungen haben. Sie benötigen also einen Account auf dem Raspberry Pi OS und dessen Passwort.

  4. Firewall: eine etwaige Firewall am Server muss die SSH-Verbindung zulassen

  5. Identifizierung: der Server muss für eine ordentliche Verbindung eindeutig identifizierbar sein. Dies geschieht durch sogenannte Host-Keys, die bei der erstmaligen Verbindung vom Server zum Client übertragen werden und manuell akzeptiert werden müssen. Ändert sich der Host-Key (z.B. nach einer Neuinstallation oder weil ein bösartiger Akteur sich als Ihren Raspberry Pi ausgibt) und passt nicht mehr zum ursprünglich übertragenen Key, schlägt die Verbindung fehl. Erst wenn der neue Key akzeptiert wird ist eine Verbindung wieder möglich (gespeicherte Keys finden Sie in der Datei know_hosts.conf im Verzeichis .ssh in Ihrem persönlichen Ordner).

Grundlegender Verbindungsaufbau

Wenn die Voraussetzungen stimmen (siehe Vorraussetzungen für die SSH-Verbindung), kann eine einfache SSH-Verbindung mit folgendem Befehl aufgebaut werden: ssh <user>@<server> Dabei ist <user> der Username am entferten Gerät und <server> ist die Adresse des Servers. Die Adresse kann entweder in Form einer IP-Adresse (z.B. 192.168.178.10) oder als Hostname (z.B. mein-cloudserver) angegeben werden. Die Variante mit dem Hostnamen funktioniert jedoch nur, wenn dieser im lokalen Netzwerk bekannt ist (z.B. in einem Heimnetzwerk im Router eingezeigt wird).

SSH-Verbindung

  • So bauen Sie eine einfache SSH-Verbindung auf: ssh <user>@<server>

Schlüssel-Authtenfikation


Die einfache SSH-Verbindung genügt zwar schon, um das entfernte System zu verwalten. Allerdings kann eine angreifende Person versuchen, den Usernamen und das Passwort zu erraten und damit Zugriff auf den Server erlangen (leider sind Passwörter häufig nicht allzu kreativ erdacht). Um dies zu verhindern, kann die Verbindung zusätzlich gesichert werden:

  • am Client, indem statt Passwörtern kaum zu erratende Schlüssel zur Anmeldung genutzt werden

  • am Server, indem zu häufige Fehlanmeldungen zu einem Blockieren führen

Die Anmeldung per Schlüssel erfolgt mit einem Schlüsselpaar. Ein solches Schlüsselpaar besteht aus einem privaten und einem öffentlichen Schlüssel. Während der öffentliche Schlüsse herausgegeben werden kann, muss der private Schlüssel privat bleiben und sollte das eigene Gerät niemals verlassen. Vereinfacht kann man sich das Konzept wie ein Vorhängeschloss und den dazugehörigen Schlüssel vorstellen. Das Schloss ist in dieser Analogie der öffentliche Schlüssel und wird in geöffnetem Zustand an den Server übergeben. Dieser “verschließt” damit die Tür zum SSH-Server. Zwar können alle sehen, dass Ihr (öffentliches) Schloss an der Tür hängt, aber nur Sie können mit Ihrem privaten Schlüssel die Tür wieder öffnen.

Aufgrund der komplexen krytpographischen Struktur der Schlüssel sind diese deutlich schwerer bis gar nicht zu erraten. Zusätzlich empfiehlt es sich, den privaten Schlüssel mit einer Passphrase vor unbfugtem Zugriff zu schützen. Dann muss jedes mal, wenn der private Schlüssel genutzt wird, ein zusätzliches Passwort eingegeben werden.

Schlüsselauthentifikation

Für eine sichere SSH-Verbindung empfiehlt es sich, auf Passwörter zu verzichten und sich stattdessen mit einem Schlüsselpaar zu authentifizieren.

Ist ein Schlüsselpaar erzeugt, erfolgt die Verbindung wie folgt: ssh <user>@<server> -i <Pfad-zum-privaten-schlüssel>. Mit dem Befehlsparameter -i wird der Pfad zum privaten Schlüssel am Client angegeben.

Schlüsselpaar erstellen

Die Erstellung eines Schlüsselpaars erfolgt am Client. Dazu wird auf der Kommandozeile (“Eingabeaufforderung” unter Windows) folgender Befehl abgesetzt: ssh-keygen -t <Schlüsseltyp> -b <Schlüssellänge> Es müssen Angaben zum Speicherort und der Passphrase gemacht werden. Wird kein Speicherort angegeben, wird das Schlüsselpaar im Ordner .ssh des Benutzerverzeichnisses gespeichert.

Es stehen unterschiedliche Schlüsseltypen- und -längen zur Verfügung:

  • RSA: weit verbreitet, kann mit sehr viel Rechenaufwand evtl. geknackt werden (siehe letzter Absatz dieses Artikels). Als Schlüssellänge sollte 4096 bit gewählt werden.

  • ecdsa: ist ein neueres Verfahren, das aber kurze Schlüssel nutzt.

  • ed25519: ist ein neues Verfahren, das auf sog. elliptische Kurven setzt und als am sichersten gilt. Dieses Verfahren empfehle ich zu nutzen.

Zur Wahl des Schlüsseltyps gibt es bei goteleport.com eine informative Vergleichstabelle.

WICHITG

Das Schlüsselpaar muss am Client erstellt werden. Sonst ist der private Schlüssel bereits mit der Erstellung auf einem fremden Gerät und damit kompromittiert.

Schlüssel übertragen

Ist das Schlüsselpaar erzeugt, muss der öffentliche (und nur der öffentliche!) Schlüssel zum Server übertragen werden (nur zur Erinnerung: nur der öffentliche Schlüssel wird übertragen). Dies kann je nach Betriebssystem des Clients unterschiedlich bewerkstelligt werden.

Konfiguration des SSH-Servers


Um die Sicherheit des SSH-Servers weiter zu erhöhen, sollten einige Einstellungen am Server vorgenommen werden. Dies kann nach erfolgreicher SSH-Verbindung getan werden. Die Konfigurationsdatei für den SSH-Server findet sich unter /etc/ssh/sshd_config und kann mit dem nano-Editor bearbeitet werden.

Folgende Änderungen sollten an der Konfigurationsdatei vorgenommen werden:

  • Nur spezifischen Usern eine SSH-Verbindung erlauben (neue Zeile ergänzen): AllowUsers <username>

  • Anmeldung mit Passwort verbieten und nur per Schlüssel erlauben (vorhande Zeilen ändern):

PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
UsePAM no
  • Standardport ändern: #Port 22 ändern zu Port <eine Nummer größer 1024>

  • Root-User-Anmeldungen verbieten: PermitRootLogin no

  • Zeit für erfolgreiche Anmeldeversuche auf 30 Sekunden limitieren: LoginGraceTime 30

  • Leere Passwörter verbieten: PermitEmptyPasswords no

  • Abmeldung bei Inaktivität: ClientAliveInterval 300 und ClientAliveCountMax 0

Nach Änderungen an der Konfiguration eines Programms muss dieses in der Regel neu gestartet werden, um die neue Konfiguration zu übernehmen. Dies geschieht für den SSH-Server mit dem Befehl sudo systemctl restart sshd.service (siehe dazu auch das Callout zu systemd)

Weitere Anpassungen des SSH-Servers sind je nach eigenem Sicherheitsbedürfnis möglich. Z.B. finden sich bei cyberciti.biz einige weitere Möglichkeiten.

Möchte man sich nun per SSH anmelden, müssen die vorgenommenen Änderungen berücksichtigt werden. V.a. muss die geänderte Portnummer angegeben werden: ssh -p <Portnummer> -i <Pfad-zum-privaten-Schlüssel> <user>@<server>

Programme mit systemd Steuern

Programme können unter Debian-basierten Systemen mit dem Systemd-Dienst gesteuert werden. Voraussetzung dafür ist, dass eine sog. Unit-Datei vorhanden ist (i.d.R. unter /etc/systemd/system zu finden). Die Dienste können v.a. gestartet, gestoppt, neugestartet und geprüft werden. Der Systemd-Dienst wird mit dem Befehl systemctl (kurz für systemcontrol) bedient:

  • Programm starten: sudo systemctl start <Servicename>

  • Programm stoppen: sudo systemctl stop <Servicename>

  • Programm neustarten sudo systemctl restart <Servicename>

  • Status überprüfen: sudo systemctl status <Servicename>

  • Ein Programm zum Autostart hinzufügen: sudo systemctl daemon-reload && sudo systemctl enable <Servicename>

Hauptpunkte

  • das SSH-Protokoll erlaubt den Zugriff auf die Kommandozeile entfernter Computer

  • zur Erhöhung der Sicherheit empfiehlt sich die Nutzung eines Schlüsselpaares anstatt eines Passworts

  • zur Reduzierung der Angriffsfläche sollte die Konfiguration des SSH-Servers angepasst werden

  • ein privater (SSH-)Schlüssel darf niemals das eigene Gerät verlassen

  • der Aufbau der SSH-Verbindung geschieht wie folgt: ssh -p <Portnummer> -i <Pfad-zum-privaten-Schlüssel> <user>@<server>

Content from Sicherheit: Benutzer und Dateirechte


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Wer darf was auf meinem System?

  • Welche Benutzer gibt es unter Linux?

  • Was sind Dateirechte?

Ziele

  • Grundlagen der Benutzerverwaltung unter Linux

  • Dateirechte verstehen und anpassen

  • Befehle chmod, chown, adduser, deluser und usermod kennen lernen

Benutzerverwaltung


Benutzerkategorien

Jeder User-Account in Linux besteht aus einem Loginnamen, einer User-ID, ggf. einem beschreibendem Namen und weiteren Metainformationen (z.B. Adresse, Telefonnummer etc). Auf einem üblichen Linux-System gibt es drei Typen von Benutzerkonten:

  1. root: der Root-Account ist der Systemadministrator und hat damit die meisten Rechte im System. Er ist vergleichbar mit dem “Administrator”-Konto in Windows. Die User-ID des root-Accounts ist immer die 1.

  2. Standardaccount: bei der Installation des Raspberry Pi OS wurde bereits ein erster Standardaccount erstellt. Standardaccounts sind i.d.R. mit echten Personen in Verbindung zu bringen, haben ein Benutzerverzeichnis unter /home/ und können sich mit einem Passwort am System anmelden. Der erste Standardbenutzer erhält die User-ID 1000. Für alle weiteren wird die ID jeweils um 1 erhöht. Ein Standardaccount kann administrative Rechte erhalten. Wurden ihm diese erteilt, können mit dem sudo-Befehl die eigenen Rechte eskaliert werden, d.h. Befehle mit administrativen Rechten ausgeführt werden.

  3. Systemaccount: Auf einem frisch installierten Linuxsystem gibt es bereits zahlreiche Systemaccounts. Sie haben i.d.R. User-IDs < 1000. Systemuser sind nicht mit echten Personen zu verbinden und können sich nicht interaktiv am System anmelden. Ein Systemaccount ist im Normalfall für eine explizite Aufgabe vorhanden. Z.B. ist der Account www-data für die Steuerung eines Webservers gedacht.

Sämtliche Benutzeraccounts des Systems können der Datei /etc/passwd entnommen werden (z.B. öffnen mit less /etc/passwd).

Möchte man einen neuen Account erstellen, nutzt man den Befehl adduser. Um z.B. den Account “Linus” hinzuzufügen lautet der Befehl wie folgt: sudo adduser linus Anschließend kann das Passwort sowie weitere Metainformationen des Accounts gesetzt werden. Es wird automatisch ein Homeverzeichnis für den User erstellt. Möchte man dies nicht, kann der Parameter --no-create-home dem Befehl angehängt werden.

Gruppen

Neben einzelnen Accounts gibt es auch Gruppen, um mehrere Accounts zusammen zu fassen. Standardmäßig ist jeder Account (System- und Standardaccounts) auch Mitglied in seiner eigenen Gruppe. So ist z.B. der Systemaccount www-data auch Mitglied in der Gruppe www-data. Ein Account hat dabei immer die Rechte, die ihm selbst erteilt wurden plus die Rechte, die den Gruppen erteilt wurden, in welchen er Mitglied ist. Wird ein Recht an einer Stelle verweigert, so hat dies Vorrang vor einer Erlaubnis an anderer Stelle.

Um zu sehen in welchen Gruppen man Mitglied ist, kann der Befehl id genutzt werden. Der erste Standardbenutzer auf dem Raspberry Pi OS ist in mehreren Gruppen Mitglied. Um alle Gruppen und deren Mitglieder zu sehen kann die Datei /etc/groups geöffnet werden.

Möchte man einen Account einer Account-Gruppe hinzufügen, nutzt man den usermod-Befehl (kurz für user modification): sudo usermod -aG <Gruppenname> <Username> Möchte man einem Account administrative Rechte erteilen, muss dieser der sudo-Gruppe hinzugefügt werden: sudo usermod -aG sudo <Username>

sudo

Mit dem sudo-Befehl können die eigenen Benutzerrechte eskaliert werden. Das heißt, Befehle mit erhöhten, also administrativen, Rechten ausgeführt werden. Dazu muss lediglich das sudo-Kommando vor den Befehl gestellt werden. Um z.B. einen neuen Account zu erstellen, muss vor den entsprechenden Befehl das sudo gestellt werden: sudo adduser <username>

Der sudo-Befehl

Um Befehle mit erhöhten Rechten auszuführen muss das sudo-Kommando vor den Befehl gestellt werden, z.B. sudo adduser <username>

Der sudo-Befehl wird auch genutzt, um zwischen Accounts zu wechseln oder Befehle mit den Rechten eines anderen Accounts auszuführen. Um z.B. in den Root-Account zu wechseln genügt das Kommando sudo -i. Anschließend befindet man sich auf der Kommandozeile des Root-Accounts und alle Befehle werden mit Root-Rechten ausgeführt. Dementsprechend sollte man hier Vorsicht walten lassen. Um wieder zur vorhergehenden Kommandozeile des Standardaccounts zu kommen wird die Root-Befehlszeile mit dem Befehl exit verlassen.

Möchte man einen Befehl mit den Rechten eines anderen Accounts ausführen geschieht dies wie folgt: sudo -u <username> <Befehl> Um z.B. mit den Rechten des Accounts www-data die Datei startpage.html zu öffnen lautet der Befehl sudo -u www-data nano startpage.html

Passwortabfrage bei sudo-Befehl

Um zu verhindern, dass der sudo-Befehl ohne die Kenntnis des Passworts ausgeführt wird (z.B. wenn ein Angreifer einen Weg ins System gefunden hat und nun Zugriff auf den Account hat), sollte das System so konfiguriert werden, dass für den sudo-Befehl immer ein Passwort verlangt wird. Dieses wird nach erstmaliger Eingabe für die aktuelle Sitzung zwischengespeichert. Dazu muss die Datei /etc/sudoers.d/010_<username>-nopasswd mit dem visudo-Programm geöffnet werden: sudo visudo /etc/sudoers.d/010_<username>-nopasswd und wie folgt angepasst werden:

aus

<username> ALL=(ALL) NOPASSWD: ALL

wird

<username> ALL=(ALL) PASSWD: ALL

Dabei muss <username> durch den eigenen Usernamen ersetzt werden. Siehe dazu auch die offizielle Raspberry-Pi-Dokumentation.

Benutzerverwaltung

Sie sind mit Ihrem Standardaccount am System angemeldet, dieser hat bereits administrative Rechte. Nun wollen Sie Ihrem System den neuen Account Linus hinzufügen. Dieser Account soll ebenfalls administrative Rechte erhalten. Wie lauten die korrekten Befehle?

  1. sudo adduser linus und sudo visudo /etc/sudoers.d/010_pi-nopasswd

  2. adduser linus und usermod -aG linus sudo

  3. sudo adduser linus und sudo usermod -aG sudo linus

  4. sudo visudo linus und sudo usermod -aG www-data linus

  • Antwort 3 ist die richtige Lösung.

Antwort 1 fügt zwar den User korrekt hinzu, aber der zweite Teil ändert allenfalls Eintellungen für den Account Pi.

Bei Antwort 2 fehlt das sudo-Kommando vor den eigentlichen Befehlen und beim usermod-Befehl sind user und Gruppe vertauscht.

Bei Antwort 4 macht der erste Teil gar keinen Sinn und der zweite ist zwar technisch korrekt, führt aber nicht zum gewollten Ziel.

Dateirechte


Jede Datei des Systems ist einem Besitzer und einer Gruppe zugeordnet. Darüber kann gesteuert werden, wer auf welche Dateien mit welchen Rechten zugreifen darf. Die genauen Rechte werden über den sogenannten mode gesteuert. Der mode gibt für jede Datei an, welche Rechte der Besitzer, die besitzende Gruppe und “andere Accounts” haben. Andere Accounts sind dabei alle anderen Accounts des Systems, auch Gastaccounts oder Systemaccounts.

Mit dem Befehl ls -l <Dateipfad> können die Inhalte eines Verzeichnisses und deren Berechtigungen angezeigt werden. Ohne Pfadangabe wird das aktuelle Verzeichnis gewählt. Die Ausgabe des Befehls ls -l /home/linus könnte z.B. wie folgt aussehen:

BASH

total 4
drwxrwxr-x 2 linus linus 4096 Aug 21 15:35 Ordner1
-rw-rw-r-- 1 linus linus   15 Aug 21 15:34 testdatei.txt

Dies ist wie folgt zu verstehen:

  • drwxrwxr-x = es handelt sich um ein Verzeichnis (d für directory, l für Link, - für Datei)

  • drwxrwxr-x = der Besitzer hat Lese- Schreib -und Ausführberechtigungen

  • drwxrwxr-x = die besitzende Gruppe hat Lese- Schreib -und Ausführberechtigungen

  • drwxrwxr-x = alle anderen haben nur Lese- und Ausführberechtigungen

  • linus linus = die Datei/das Verzeichnis gehört dem User linus

  • linus linus = die Datei/das Verzeichnis gehört der Gruppe linus

  • 4096 = Dateigröße in Bytes

  • Aug 21 15:35 = Änderungszeit

  • Ordner1 = Verzeichnis-/Dateiname

Der ls-Befehl ist bei Ubuntuusers auch ausführlich erklärt.

Möchte man den Eigentümer einer Datei oder eines Verzeichnisses ändern, wird der Befehl chown genutzt (kurz für change ownership): chown <neuer besitzer>:<neue Grupppe> <Datei/Verzeichnisname>. Um z.B. die Datei test.txt dem User und der Gruppe linus zu übertragen lautet der Befehl wie folgt: sudo chown linus:linus test.txt. Soll ein gesamtes Verzeichnis übertragen werden, wird der Parameter -R (rekursiv) genutzt: sudo chown -R linus:linus Ordner1

Möchte man den mode ändern (also die Rechte für Besitzer und Gruppe), nutzt man den Befehl chmod (kurz für change mode): sudo chmod <Modus> <Datei/Verzeichnis> Der Modus setzt sich dabei stets aus drei Angaben zusammen:

  1. Angabe für wen etwas geändert wird (Gruppe oder Account)

    • u = user

    • g = group

    • o other (=alle anderen)

  2. Angabe, ob ein Recht erteilt oder entzogen werden soll

    • + = Recht erteilen

    • - = Recht entziehen

  3. Angabe zum betroffene Recht.

    • r = read (Leseberechtigung)

    • w = write (Schreibbrechtigung)

    • e = execute (Ausführen von Dateien oder Verzeichnisinhalt von Ordnern anzeigen lassen)

Eine ausführliche Erklärung zu Dateirechten findet sich wieder bei Ubuntuusers

Beispiel

Die Datei test.txt gehört dem User linus und der Gruppe www-data. Um nun dem User Lese- Schreib- und Ausführberechtigung zu erteilen, der Gruppe aber nur Leserechte, lauten die Befehle wie folgt: sudo chmod u+rwx testdatei.txt für die Userberechtigung und sudo chmod g+r testdatei.txt für die Gruppenberechtigung. Möchte man der Gruppe www-data wieder das Leserecht entziehen, lautet der Befehl wie folgt: sudo chmod g-r testdatei.txt

Dateiberechtigungen

Sie wollen mit Ihrem Standardaccount (dieser ist Mitglied der sudo-Gruppe) im Verzeichnis /opt/ den neuen Ordner webservice erstellen. Der Ordner soll dem User linus und der Gruppe www-data gehören. Der User soll volle Rechte haben, die Gruppe soll lesen und ausführen dürfen, alle anderen sollen keine Rechte erhalten. Wie lauten die korrekten Befehle?

    • mkdir /opt/webservice

    • chown linus:www-data /opt/webservice

    • chmod 750

    • sudo mkdir /opt/webservice

    • sudo chown linus:www-data /opt/webservice

    • sudo chmod u+rwx

    • sudo chmod g+r

    • sudo chmod o-rwx

    • sudo touch /opt/webservice

    • sudo chmod linus:www-data /opt/webservice

    • sudo chown u+rwx

    • sudo chown g+r

    • sudo chown o-rwx

    • sudo mkdir /opt/webservice

    • sudo chown linus:www-data /opt/webservice

    • chmod linus:+rwx

    • chmod www-data:+r

    • chmod others:-rwx

Antwort 1 schlägt fehl, da keine administrativen Rechte genutzt werden

Antwort 3 erstellt eine Datei anstatt eines Verzeichnisses. Außerdem sind die Befehle chmod und chown vertauscht.

In Antwort 4 ist der chmod-Befehl fehlerhaft

Hauptpunkte

  • der root-Account ist der Adminstrator des Systems

  • Mitglieder der sudo-Gruppe haben administrative Rechte, welche sie mit dem sudo-Kommando nutzen können

  • Dateien und Ordner sind immer einem Benutzer und einer Gruppe zugeordnet. Die Besitzverhältnisse können mit chown geändert werden.

  • Dateien und Ordner haben einen mode, welcher die Rechte von Besitzer und besitzender Gruppe steuert, er kann mit chmod geändert werden

Content from Sicherheit: Firewall und Fail2Ban


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Wie kommunizieren Computer im Netzwerk?

  • Wie schütze ich meinen Server im Netzwerk?

Ziele

  • Grundlagen der Netzwerkkommunikation verstehen

  • Eine einfache Firewall einrichten

  • Fehlerhafte Logins mit Fail2Ban überwachen

Netzwerkkommunikation


OSI-Referenz-Modell

Um allgemeine Leitlinien für Hersteller von Hard- und Software zu etablieren, wurde das OSI-Referenz-Modell entwickelt, welches die Kommunikationsabläufe in Computernetzwerken definiert. Gemäß dem Modell läuft ein Datenpaket beim Sender durch sieben Kommunikationsschichten und beim Empfänger wieder durch die selben Schichten, allerdings in umgekehrter Reihenfolge. Jede dieser Schichten hat klar definierte Aufgaben und spezifische Protokolle. Ein Datenpaket wird dabei in einer Schicht verarbeitet, z.B. in der obersten Schicht (Anwendungsschicht) per HTTP abgerufen und dann an die nächste Schicht übergeben. Dort werden weitere Schritte unternommen. Z.B. könnte das jetzt fertig geschnürte HTTP-Paket zu einem HTTPS-Paket verschlüsselt werden. Am untersten Ende (auf der Bitübertragungsschicht) wird schließlich nur noch festgelegt, wie der Strom über die Leitung fließt.

Da auf jeder Schicht beim Sender weitere Informationen zum Datenpaket hinzugefügt werden (z.B. eine Veschlüsselung oder die IP-Adresse des Empfängers) wird das Datenpaket immer größer (sog. Overhead). Beim Empfänger wird das Paket wieder Schritt für Schritt “ausgepackt”.

Eine ausführliche Erklärung zum OSI-Modell inkl. Video findet sich bei Studyflix.

IP-basierte Netzwerke

Um Kommunikationspartner im Netzwerk zu identifizieren, besitzt jedes Netzwerkfähige Gerät (genauer gesagt: jedes Netzwerinterface) eine Hardwareadresse: die MAC-Adresse. Die MAC-Adresse ist auf Schicht 2 des OSI-Modells definiert. Um nun zu definieren, wo sich diese MAC-Adresse im Netzwerk befindet, werden in Schicht 3 des OSI-Modells IP-Adressen eingeführt. Mit IP-Adressen werden zunächst logische Netzwerksegmente definiert. Dabei wird jedes Netzwerk mit einer IP-Adresse beschrieben. Diese Netzwerkadresse ist der Startpunkt des Netzwerkes (z.B. 192.168.178.0). Mit der Subnetzmaske wird die Anzahl an möglichen Adressen innerhalb des Netzwerks festlegt (z.B. 255.255.255.0 oder in Kurzform /24 für ein Netzwerk mit max. 254 Geräten). Innerhalb eines Netzwerks werden einzelne Geräte durch eine IP-Adresse definiert (z.B. 192.168.178.25). Wandert das Gerät in ein anderes Netzwerksegment erhält es eine andere IP-Adresse.

Um eine Kommunikation zwischen verschiedenen Netzwerken (z.B. einem Heimnetzwerk mit der Adresse 192.168.178.0 und der Subnetzmaske 255.255.255.0 und dem Internet) zu ermöglichen, wird ein Standardgateway benötigt. Dies ist i.d.R. die IP-Adresse des Routers. An diesen werden alle Pakete geschickt, die keine Adresse im lokalen Netzwerk haben, und werden dann z.B. ins Internet weiter geleitet.

Es werden unterschiedliche Typen von Netzwerken unterschieden: Private Netzwerke und öffentliche Netzwerke. Private Netzwerke sind nicht öffentlich erreichbar und sind durch Router und Firewalls von öffentlichen Netzwerken getrennt. Dadurch können private Netzwerke mit derselben IP-Adresskonfiguration mehrfach existieren, da sie sich gegenseitig nicht “sehen”.

Folgende Adressbereiche für private Netzwerke gibt es:

Private Adressbereiche und spezielle Netzwerke
Netzadressbereich Subnetzmaske Max. Anzahl Geräte Bedeutung
10.0.0.0 bis 10.255.255.0 255.0.0.0 16777216 Privates Netzwerk
172.16.0.0 bis 172.31.255.255 255.240.0.0 1048576 Privates Netzwerk
192.168.0.0 bis 192.168.255.255 255.255.0.0 256 Privates Netzwerk
169.254.0.0 bis 169.254.255.255 255.255.0.0 65536 Link Local/APIPA = Standardbereich, wenn automatische Adresszuweisung fehlschlägt
127.0.0.1 bis 127.255.255.254 255.0.0.0 16777216 Loopback-Adresse für Kommunikation innerhalb eines Geräts

IP-Adressen

Werden zentrale Dienste betrieben oder genutzt, muss man sich auch mit dem zugrunde liegenden Netzwerk befassen. Informieren Sie sich deshalb über Ihr Netzwerk:

  • Welche IP-Adresse hat Ihr Computer?

  • Wie lautet die Subnetzmaske?

  • Welche IP-Adressen können Geräte in Ihrem Netzwerk erhalten?

  • Welche IP-Adressen hat Ihr Router?

Typische Adressen könnten wie folgt lauten:

  • IP-Adresse: 192.168.178.25

  • Subnetzmaske: 255.255.255.0

  • Daraus folgt der Adressbereich 192.168.178.1 bis 192.168.178.254 (die erste Adresse ist als Netzwerkadresse und die letzte als sogenannte Broadcastadresse reserviert und nicht für Geräte verfügbar).

  • Router geben sich meistens selbst die erste Adresse im Netzwerk, in diesem Beispiel also 192.168.178.1. Zusätzlich erhält der Router auch eine IP-Adresse im Netzwerk des Internetanbieters. Erst dadurch, dass der Router in beiden Netzwerken eine Adresse hat, kann er auch Datenpakete zwischen den Netzwerken verteilen.

Ports

Ist ein Datenpaket innerhalb eines IP-Netzwerks an einem Host (also einem Gerät) angekommen, muss noch geklärt werden, wohin das Paket innerhalb des Geräts gehört. Da auf einem Computer viele Programme gleichzeitig aktiv sind, muss entschieden werden, für welches der Programme ein Paket gedacht ist. Dazu werden Ports genutzt. Ein Programm, welches Daten aus dem Netzwerk empfangen soll, nutzt dabei einen bestimmten Port. Kommt am Gerät ein Datenpaket an, das mit dem Port des Programms adressiert ist, wird das Paket an das entsprechende Programm geleitet und von diesem verarbeitet. Zum Beispiel “lauscht” der SSH-Server standardmäßig auf Port 22 für eingehenden Datenverkehr. Wir haben diesen Port in Lektion 4 manuell abgeändert.

Einige Ports sind fest für bestimmte Programme definiert und sollten nicht von anderen Programmen oder manuell belegt werden. Andere Ports können jedoch von Systemadministratoren frei genutzt werden. Die Portnummern reichen von 0 bis 65.535. Eine Auflistung aller Ports findet sich bei Wikipedia.

Ein Port kann auf einem Gerät offen oder geschlossen sein, z.B. kann eine Firewall die Kommunikation über einen Port blockieren. Außerdem muss ein Prozess hinter einem Port “hören”, damit eine Kommunikation aufgebaut werden kann.

Um zu sehen, welche Prozesse auf welchen Ports hören, kann der Befehl netstat -tulp ausgeführt werden. Vorher muss dafür das Paket net-tools installiert werden.

Firewall


Um Kommunikation in einem Netzwerk zu kontrollieren, werden Firewalls eingesetzt. Zu unterscheiden ist hierbei zwischen Hardware- und Desktopfirewalls. Eine Hardware- oder auch externe Firewall ist in der Regel ein dediziertes Gerät, welches primär unterschiedliche Netzwerke trennt. In einfacher Form kommt ein Heimrouter wie eine Fritz.Box dieser Aufgabe nach. Denn der Router trennt mit seiner Firewall das Internet vom Heimnetz und verhindert dadurch, dass aus dem Internet auf Geräte im Heimnetzwerk zugegriffen werden kann. In komplexeren Netzwerken (z.B. in Unternehmen) werden professionellere Geräte eingesetzt, welche mehr Funktionalität bieten.

Eine Desktop- oder auch personal firewall dagegen ist meistens in Form von Software auf einem Gerät installiert. Unter Microsoft Windows wäre dies die Windows Defender Firewall, die den PC vor Zugriffen aus einem angeschlossenen Netzwerk schützt. Unter Linux kann dafür die uncomplicated firewall (kurz: UFW) genutzt werden.

Funktionsweise

Vereinfacht kann die Funktionsweise einer Firewall in mehrere Bereiche unterteilt werden. Dabei unterstützt nicht jede Firewall alle dieser Funktionen.

  • Paketfilter: filtert nach Adressen der Datenpakete (IP-Adressen, MAC-Adressen, Ports, URLs) -> Wer darf wohin?

  • Content/Proxy/Deep Packet-Filter: filtert nach dem Inhalt und kann so spezifische Inhalte blockieren. Z.B. kann Malware erkannt werden -> Was darf unterwegs sein?

  • Kombinierte Filter: durch die Kombination verschiedener Kriterien wie Uhrzeit, Herkunft der Anfrage, Ziel der Anfrage oder die Häufigkeit der Anfrage kann Datenverkehr blockiert oder erlaubt werden -> wie darf etwas unterwegs sein?

  • Geoblocking: häufig bieten Firewalls auch die Möglichkeit, Anfragen aus bestimmten Ländern zu blockieren. Allerdings können Angreifer solche Blockaden umgehen, indem sie Ihre Anfragen über Server in nicht blockierten Ländern leiten. Dennoch kann ein Geoblocking bisweilen massenhafte und wenig zielgerichtete Angriffsversuche unterbinden. -> Woher darf etwas kommen?

Ist ein Filterkriterium erfüllt, wird eine Aktion ausgeführt. Wird ein Paket verworfen (drop oder deny), wird es schlicht nicht weitergeleitet. Der Absender erhält darüber keine Auskunft. Wird ein Paket zurückgewiesen (deny oder reject) wird das Paket ebenfalls nicht weitergeleitet, der Absender wird allerdings direkt über den Kommunikationsabbruch informiert. Wird das Paket aktezptiert wird es an die Zieladresse weitergeleitet.

Allgemeine Tips zur Firewall

  • die Firewall sollte immer aktiv sein

  • standardmäßig sollten eingehende Verbindungen blockiert werden

  • eingehende Verbindungen sollten nur für einzelne Ports und Anwendungen geöffnet werden

  • Sicherheit durch alternative Ports (wie beim SSH-Server) bringt nur ein wenig (siehe dazu den Wikipedia-Artikel zu Security through obscurity)

  • ein im Netzwerk exponiertes Programm (inkl. dem Betriebssystem) muss immer aktuell gehalten werden

  • die Kommunikation sollte über verschlüsselte Protokolle stattfinden (TLS, SSH, HTTPS…)

  • für noch mehr Sicherheit kann gesorgt werden, wenn auch der ausgehende Datenverkehr gefiltert wird und nur explizit notwendige Anfragen, z.B. für Softwareupdates, zugelassen werden aber Anfragen ins lokale Netzwerk unterbunden werden. Siehe dazu ein Beispiel mit der IP-Tables-Firewall

  • Für Fortgeschrittene: mittels Port-knocking kann die Firewall nur kurzzeitig und explizit geöffnet werden und nach dem Ende der Kommunikation wieder geschlossen werden. Siehe dazu z.B. dieses Tutorial im Netz.

Umsetzung am Raspberry Pi

  • Installation: sudo apt-get install ufw

  • Regel hinzufügen: sudo ufw allow <Portnummer> oder sudo ufw deny <Portnummer>

  • Standardregel für eingehenden Verkehr: sudo ufw default deny incoming

  • Standardregel für ausgehenden Verkehr: sudo ufw default allow outgoing

  • Zugriff auf SSH-Port nur aus dem lokalen Netzwerk zulassen (Netzwerkadresse anpassen!): sudo ufw allow from 192.168.178.0/25 to any port 22

  • aktivieren: sudo ufw enable

  • Status anzeigen lassen: sudo ufw status

  • Status mit Nummer anzeigen lassen: sudo ufw status numbered

  • Regel löschen: sudo ufw delete <Nummer-der-Regel>

Im Netz finden sich zahlreiche Anleitungen für die UFW. Empfehlenswert finde ich die Anleitungen von DigitalOcean und PiMyLifeUp

Fail2Ban


Nachdem in der (uncomplicated) Firewall ein Port geöffnet wurde, wird die Kommunikation mit dem hinter dem Port wartenden Dienst aufgebaut. Jedoch ist es empfehlenswert diese Kommunikation weiterhin im Blick zu behalten.

Für einfache Szenarien kann das Programm Fail2Ban genutzt werden, um unerwünschte Eindringversuche zu erkennen und zu blockieren. Ein typischer Angriffsversuch, welcher mit Fail2Ban abgefangen werden kann, ist eine Brute-Force-Attacke, bei welcher durch massenhafte Anfragen versucht wird, Benutzername und Passwort zu erraten. Die dabei unweigerlich zahlreich auftretenden Fehlversuche werden in einer Protokolldatei im System notiert. Durch die Überwachung dieser Protokolldatei (auch als Logdatei bezeichnet) kann Fail2Ban die Absenderadresse der massenhaften Loginversuche erkennen und blockieren, indem die Adresse der Firewall als zu blockierende Adresse mitgeteilt wird.

Zu Fail2Ban gibt es im Netz verschiedne Anleitungen. Z.B. im offiziellen Raspberry Pi Handbuch oder wieder bei PiMyLifeUp.

Umsetzung am Raspberry Pi:

  • Installation: sudo apt-get install fail2ban

  • Aktivierung: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

  • Beispielkonfiguration der Standardparameter mittels sudo nano /etc/fail2ban/jail.local

    • Standard Sperrzeit: bantime = 20m

    • Standardanzahl möglicher Fehlversuche: maxretry = 3

    • Standardzeit für “maxretry”: findtime = 10m

  • Zu überwachende Services/Ports werden am Ende der Datei /etc/fail2ban/jail.local mit [<Name>] definiert und mit Detaileinstellungen konfiguriert:

    • Aktivierung: enabled = true

    • Angabe des Ports: port = <Portnummer des Services

    • Angabe der zu überwachenden Logdatei: logpath = <Pfad zur Logdatei>

    • Angabe des Filters, mit dem die Logdatei geprüft wird: filter = <Name der Datei im Verzeichnis /etc/fail2ban/filter.d/>

  • Beispiel für den SSH-Server:

BASH

#Standardeinstellungen vornehmen
bantime = 60m 
findtime = 15m
maxretry = 3 
# Im Bereich [sshd]
[sshd]
enabeld = true
port = <ssh-port>
logpath = %(sshd_log)s
backend = systemd

Netzwerksicherheit

Sie sollen für Ihre Arbeitsgruppe einen kleinen Server mit diversen Diensten betreiben (z.B. einen Cloudserver). Wie gewährleisten Sie die Netzwerksicherheit, um unbefugten Zugriff auf den Server zu verhindern?

Einige wichtige und grundlegende Maßnahmen können sein:

  • Firewall auf dem Server aktivieren

  • Eingehende Verbindungen blockieren

  • nur einzelne Ports für die notwendigen Dienste und nur innerhalb des lokalen Netzwerkes freigeben

  • Mit Fail2Ban oder vergleichbaren Tools fehlerhafte Loginversuche überwachen

  • Regelmäßige Wartung: Sowohl der Server als auch alle anderen Netzwerkkomponenten (Router, Switche etc) müssen stets mit aktueller Soft- und oder Firmware ausgestattet werden.

  • der SSH-Serverdienst sollte entsprechend Kapitel 4 konfiguriert werden

  • Noch mehr Sicherheit erhalten Sie durch eine Netzwerksegmentierung: sie trennen das Netzwerk in mehrere logische Bereiche auf, zwischen denen ein Router mit Firewall vermittelt.

Hauptpunkte

  • Computer kommunizieren im Netzwerk nach Standards, das OSI-Schichten-Modell stellt einen Leitrahmen für diese Standards dar

  • Versendete Daten im Netzwerk haben immer einen Absender- und einen Empfänger (in Form von MAC-Adresse, Netzwerk-ID, IP-Adresse und Port)

  • Mit einer Firewall können Ports geöffnet und geschlossen werden

  • Mit Fail2Ban können fehlerhafte Loginversuche festgestellt und blockiert werden

Content from Installationsvorbereitung 1


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Wie kann ich Datenverlust vermeiden?

  • Wie kann ich meinen Speicherplatz erweitern?

  • Wie beginne ich die Installation von Nextcloud?

Ziele

  • Backups des gesamten Betriebssystems erstellen

  • Dateisysteme erstellen und einbinden

  • Programmkomponenten von Nextcloud verstehen

Systembackup


Nachdem der Raspberry Pi in den bisherigen Lektionen grundlegend eingerichtet wurde, empfiehlt es sich nun den aktuellen Stand zu sichern. Dadurch besteht später die Möglichkeit diese Sicherung wieder herzustellen für den Fall, dass bei der weiteren Arbeit etwas schief geht.

Um das gesamte System zu sichern, muss die SD-Karte (bzw. der Datenträger auf welchem das System installiert ist) geklont werden. Dabei wird ein Image aller Partitionen erstellt. Dieses kann später wie das Image eines Betriebssystems neu auf die SD-Karte installiert werden. Um alle Daten sauber kopieren zu können, muss der Raspberry Pi heruntergefahren werden und anschließend wird SD-Karte mit Hilfe eines anderen Computers kopiert. Je nach Betriebssystem dieses anderen Computers bestehen unterschiedliche Möglichkeiten. Nachfolgend werden für jedes Betriebsystem eine Möglichkeit vorgestellt.

Externer Speicher


Aktuell verfügt der Raspberry Pi nur über den Speicherplatz auf der SD-Karte. Dieser Speicherplatz kann schnell ausgehen, wenn größere Datenmengen im Cloudserver gespeichert werden sollen. Außerdem ist eine SD-Karte kein verlässliches Speichermedium. Deshalb kann es empfehlenswert sein, mit Hilfe zusätzlicher Speichermedien den Speicherplatz zu erweitern.

An den USB-Ports können externe Datenträger angeschlossen werden. Dies können USB-Sticks, HDD-Festplatten (mit eigener Stromversorgung) oder USB-SSD-Festplatten sein. Der Raspberry Pi 5 bietet außerdem über die PCIe 2.0-Schnittstelle die Möglichkeit mit Hilfe eines M.2-Zusatzmoduls eine NVMe-SSD anzuschließen (Details dazu siehe Raspberrypi.com).

Festplatten einbinden (mounten):

Damit der externer Datenträger vom Betriebssystem verwendet werden kann, muss dieser an einer zu definierenden Stelle des Verzeichnissbaums eingebunden werden. Dieser Vorgang wird als mounten oder einhängen bezeichnet. Dies erfolgt zunächst einmalig und nachdem ein Dateisystem auf dem Datenträgererstellt wurde dauerhaft:

  • Aktuelle Laufwerke identifizieren: lsblk

  • Externen Datenträger verbinden

  • erneut Laufwerke identifizieren: lsblk Der neue Datenträger sollte auftauchen und mit einem Pfad ähnlich /dev/sda oder /dev/nvme/ erscheinen

  • Partition erstellen: sudo fdisk /dev/sda (dabei muss /dev/sda an den eigenen Datenträger angepasst werden)

  • Im folgenden interaktiven Dialog von fdisk wird mit g eine GPT-Partitionstabelle erstellt, mit n eine neue Partition und mit w werden die Änderungen auf den Datenträger geschrieben

  • Auf der neuen Partition ein (linuxkompatibles ext4-)Dateisystem erstellen: sudo mkfs.ext4 /dev/sda (Pfade wieder anpassen)

  • Mountpoint (Einhängepunkt für den Datenträger) erstellen: sudo mkdir /mnt/data (Pfad ggf. nach eigenen Wünschen anpassen)

  • Datenträger mounten: sudo mount /dev/sda1 /mnt/data

Zu diesem Vorgang finden sich im Netz auch diverse Anleitungen, z.B. bei basic-tutorials.de

Beim Elektronikkompendium findet sich noch mehr zum Thema Festplatten, Partitionen und Mounting.

Nachdem das Dateisystem erstellt und einmalig gemountet ist, muss dies noch dauerhaft gemacht werden. Denn das mounten über mount /dev/sdx geht bei einem Neustart des Gerätes verloren und Referenzen, z.B. aus dem Cloudserver, auf den externen Datenträger wären ungültig. Um Datenträger dauerhaft unter dem gleichen Dateipfad verfügbar zu machen, müssen diese Datenträger mit ihrem unversal unique identifier, oder kurz UUID in der Datei /etc/fstab eingetragen werden:

  • UUID herausfinden und notieren oder in die Zwischenablage kopieren: sudo blkid

  • In der Datei /etc/fstab eine neue Zeile ergänzen:

UUID=<kopierte UUID> /<Pfad>/<zum>/<Mountpoint>   ext4    auto,nofail,noatime,users,rw    0   0

Dadurch wird der Datenträger bei jedem Neustart und beim ausführen des Befehls sudo mount -av im angegeben Pfad eingehängt. Es wird außerdem das Dateisystem genannt (ext4) und einige Optionen mitgegeben. z.B. bedeutet die Option nofail, dass das Betriebssystem auch dann startet, wenn der externe Datenträger nicht angeschlossen ist.

  • Nachdem der Eintrag in der fstab-Datei erstellt ist, wird das mounten getestet: sudo mount -av

  • Nach einem Neustart kann mit sudo df -h überprüft werden, ob der externe Datenträger richtig eingebunden wurde.

Weitere Anleitungen zum dauerhaften einbindinden von Datenträgern finden sich z.B. beim Elektronikkompendium oder bei PiMyLifeUp.

Grundlagen der Installation


Vor jeder (größeren) Installation, sollte das Handbuch der Software studiert werden. Da in diesem Kurs die Software Nextcloud als Dateispeicher- und Kollaborationsdienst installiert werden soll, sollte das Nextcloud Administration Manual studiert werden.

Installationsvarianten

Informieren Sie sich über die Installationsvarianten von Nextcloud. Ein Einstiegspunkt ist das Kapitel Installation on Linux. Empfehlenswert ist auch das Lesen des Kapitels Example installation on Ubuntu 22.04 LTS.

Welche der im Handbuch erwähnten Installationsvarianten erscheint Ihnen für das Raspberry Pi Projekt am sinnvollsten?

Für den Raspberry Pi gibt es ein von der Community betriebens Projekt: NextcloudPi. Damit kann sehr schnell auf einem Raspberry Pi (oder vergleichbaren Systemen) ein Nextcloud-Server installiert werden. Der Nachteil ist jedoch eine etwas eingeschränkte Konfigurierbarkeit, da hier alles sozusagen “auf einen Klick” gemacht wird. Dadurch ist auch der Lernerffekt deutlich verringert.

Grundlegend sind auch die Optionen mit Docker eine gute Option. Hier steht ein offizielles Image zur Verfügung (Nextcloud AIO), das allerdings auch wieder vorgefertigt und daher weniger Anpassbar ist. Da Docker jedoch noch einmal eine weitere Komplexitätsschicht hinzufügt und v.a. dann interessant ist, wenn auf einem Computer mehrere Dienste betrieben werden, wird diese Variante hier nicht weiter verfolgt.

Als empfehlenswerte Variante für diesen Kurs wird die manuelle Installation gewählt. Dies hat den Vorteil, dass damit das gesamte System nach den eigenen Wünschen angepasst werden kann und dadurch auch ein hoher Lerneffekt zustande kommt.

Komponenten

Der Nextcloud-Server besteht aus mehreren Komponenten. Nextcloud selbst ist dabei nur ein Teil. Für die Funktionalität werden jedoch noch eine Datenbank, ein Webserver und ein Datenverzeichnis benötigt. Außerdem kann später mithilfe von Apps die Funktionalität erweitert werden.

Nextcloud-Komponenten
Komponente Funktion Hinweis
Nextcloud-Server die Hauptsoftware Kernprogramm zur Datenverwaltung und Steuerung
Datenbank Speichert Benutzer, History, Metadaten u.v.m. SQLite für Testzwecke, MariaDB oder PostgreSQL für produktiven Einsatz
Webserver Koordiniert Kommunikation z.B. Apache oder NGINX; steuert Anfragen und Antworten, verschlüsselt die Kommunikation
Datenverzeichnis Speicherort der Clouddaten Es sind verschiedene Verzeichnisse und Speichertechnologien möglich
Apps Funktionserweiterung Zahlreiche Möglichkeiten im Nextcloud App store

Hauptpunkte

  • Zur Sicherung des gesamten Systems kann die SD-Karte an einem zweiten PC geklont werden

  • Datenträger können unter Linux an einer beliebigen Stelle des Verzeichnisses Baumes eingehängt werden

  • Einmaliges mounten erfolgt mit dem mount-Befehl, dauerhaftes mounten durch Eintragung in der Datei /etc/fstab

  • Nextcloud bietet unterschiedliche Installationsvarianten- und Komponenten. In diesem Kurs wird die manuelle Installation mit MariaDB und Apache gewählt.

Content from Installationsvorbereitung 2


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Wie kann ich meinen Raspberry Pi im Internet erreichen?

  • Wie erhalte ich einen Domainnamen/eine URL für meinen Server?

  • Wie ermögliche ich Zugriff vom Internet in mein Heimnetzwerk?

Ziele

  • Portweiterleitungen am Router einrichten

  • DDNS: eigene URL trotz dynamischer IP-Adressen

  • Webserver im Heimnetzwerk betreiben

Externe Erreichbarkeit


Aktuell befindet sich der Raspberry Pi in einem Heimnetzwerk. Dort ist er mit einem Router verbunden. Dieser Router ist mit dem Netzwerk des Internetanbieters verbunden, welches wiederum eine Verbindung “ins Internet” hat. Das folgende Schaubild zeigt den aktuellen Aufbau:

Diese Abbilung zeigt den Aufbau eines Heimnetzwerks. Zu sehen sind ein Computer mit der IP-Adresse 192.168.178.26. Dieser ist mit einem Router mit der IP-Adresse 192.168.178.1 verbunden. Am Router ist ein Raspberry Pi angeschlossen, dieser hat die IP-Adresse 192.168.178.25. Der Router ist mit dem Internet verbunden und hat die externe IP-Adresse 93.236.170.179
Netzwerksetup im Heimnetzwerk

Externe Erreichbarkeit

Sie kennen nun das aktuelle Netzwerksetup. Ihr Raspberry Pi hat auch eine Internetverbindung und mit Ihrem PC können Sie per SSH auf Ihren Raspberry Pi zugreifen. Aber wie ist der Raspberry Pi aus dem Internet erreichbar?

  1. Unter 192.168.178.25

  2. Unter 93.236.170.179

  3. Er ist gar nicht erreichbar

  4. Unter 192.168.178.1

  • Antwort 3 ist die richtige

Da der Router aktuell keine Anfragen von außen nach innen durchlässt, ist das Heimnetzwerk nicht aus dem Internet erreichbar. Würde der Router Anfragen durchlassen, wären sämtlich Geräte im Heimnetzwerk im Internet exponiert und gefährdet. Der Router selbst ist dagegen unter der Adresse 93.236.170.179 erreichbar, wird aber aus Sicherheitsgründen nicht auf Anfragen antworten.

Portweiterleitung

Damit der Router bestimmte Anfragen aus dem Internet annimmt und an ein bestimmtes Gerät im Heimnetzwerk weiterleitet, muss dem Router mitgeteilt werden, welche Art von Anfragen (auf welchem Port) er annehmen soll und an welches Gerät (welche MAC-Adresse) diese weitergeleitet werden sollen. Die entsprechenden Einstellungen variieren von Gerät zu Gerät. Häufig heißen die entsprechenden Funktionen Portforwarding, Portweiterleitungen oder Freigaben. Nicht jeder Router unterstützt diese Funktionalität. Insbesondere die günstigen Heimrouter, die Internetprovider kostenlos zur Verfügung stellen sind hier häufig in Ihrer Funktionalität eingeschränkt.

Portweiterleitung unter Fritz.OS auf einem Fritz.Box-Router der Firma AVM einrichten

Zu beachten ist auch, dass manche Internetanbieter das DS-Lite-Verfahren (Dual Stack Lite) nutzen. Dabei teilt sich der eigene Router ein Netzwerk (und damit eine öffentliche IP-Adresse) mit anderen Kunden des Internetanbieters. Das macht es (nahezu) unmöglich, den Router aus dem Internet zu erreichen. Eine Abbhilfe kann hier das IPv6-Protokoll sein, da hier nicht der Router die öffentliche IP-Adresse erhält, sondern jedes einzelne Gerät eine weltweit einzigartige IPv6-Adresse hat und somit direkt im Internet erreichbar sein kann.

DDNS: Dynamic domain name system

Der Router nimmt nun anfragen aus dem Internet an und leitet diese an den Raspberry Pi weiter. Der Router (und damit der Raspberry Pi) ist aber bislang nur unter seiner IP-Adresse erreichbar. Diese ist jedoch schwer zu merken und ändert sich für Privatkunden in Deutschland in der Regel einmal täglich aufgrund einer nächtlichen Zwangstrennung durch den Internetanbieter. Wer einen Dienst (hier ein Nextcloud-Server) stets unter derselben Adresse und einer URL erreichen will, kann dazu auf das dynamic domain name system (kurz: DDNS) zurück greifen.

DDNS funktioniert unter Zuhilfenahme eines externen Dienstleisters. Bei diesem wird eine (Sub)Domain beantragt, z.B. server.dns-anbieter.de. Auf dem Raspberry Pi kann das Programm DDClient installiert werden. Dieses kontaktiert regelmäßig eine Internetseite und erhält von dieser die eigene öffentliche IP-Adresse als Echo zurück. Dadurch erfährt DDClient, unter welcher IP-Adresse der Raspberry Pi erreichbar ist und ob diese sich geändert hat. Diese IP-Adresse schickt DDClient an den DDNS-Anbieter, bei welchem die eigene Domain beantragt wurde. Dieser Anbieter wiederum trägt die IP-Adresse in seinem DNS ein.

DNS

DNS kann als Telefonbuch des Internets verstanden werden, in welchem IP-Adressen in Domainnamen übersetzt werden, z.B. wird die IP-Adresse 49.13.55.174. in wikipedia.de übersetzt. Mehr zum Thema DNS findet sich z.B. beim Elektronikkompendium.

Ruft ein Computer die Adresse server.dns-anbieter.de auf, wird im DNS des DDNS-Anbieters die tagesaktuelle öffentliche IP-Adresse des Heimnetzwerks ausgelesen und übermittelt. Dadurch wird die Anfrage an die richtige IP-Adresse geschickt.

Es gibt verschiedene Anbieter für DDNS-Dienste. Gut geeignet sind z.B. No-IP oder DDNSS. Auch viele Heimrouter bieten über den Hersteller eine Möglichkeit für DDNS an (z.B. AVM mit Fritz.Box-Routern).

Umsetzung DDNS am Raspberry Pi

Für die Implementierung des DDNS-Verfahrens am Raspberry Pi wird wie folgt vorgegangen:

  • Account bei einem DDNS-Anbieter registrieren

  • Im Falle von No-IP muss im Webportal des Anbieters ein Benutzername festgelegt werden

  • Beim gewählten Anbieter muss ein Domainname reserviert werden (A-Record für IPv4 oder AAAA-Record für IPv6)

  • ddclient auf dem Raspberry Pi installieren und konfigurieren: sudo apt-get install ddclient

    • Im Anschließenden Dialog wird im Falle von No-IP no-ip gewählt, ansonsten anderer

    • als Benutzername und Passwort werden die Zugangsdaten des DDNS-Anbieters eingetragen

    • als IP-Adressen-Ermittlungsmethode wird Web-basierter IP-Ermittlungsdienst gewählt

    • der zu aktualisierende Rechner ist der beim DDNS-Anbieter reservierte Domainnamen

Konfigurationsdialog von DDClient. Es stehen mehrere DDNS-Anbieter zur Auswahl. Hervorgehoben ist no-ip.com
DDClient konfigurieren 1: Anbieter auswählen
Konfigurationsdialog von DDClient: festlegen der IP-Ermittlungsmethode, hervorgehoben ist die Option web-basierter IP-Ermittlungsdienst
DDClient konfigurieren 2: Ermittlungsmehode
Konfigurationsdialog von DDClient: eingabe des Domainnamens, als Platzhalter ist server.ddns-anbieter.de zu sehen
DDClient konfigurieren 3: Domainname

Nach der Installation sollte die Konfigurationsdatei überprüft und ggf. angepasst werden: sudo nano /etc/ddclient.conf. Je nach DDNS-Anbieter sieht die Konfigurationsdatei unterschiedlich aus.

  • DDNSS.de:

BASH

#für ddnss.de
protocol=dyndns2
use=web, web=https://api.ipify.org/ 
server=ddnss.de
login=<DDNSSLoginName>
password='<Passwort>'
<domainname>.ddnss.de
  • NO-IP:

BASH

#NO-IP.com
protocol=noip
use=web, web=http://ip1.dynupdate.no-ip.com/
login=<noip-username>
password=<noip-passwort>
<noip-Domainname>

Externe Erreichbarkeit

Sie haben die Portweiterleitung am Router und die DDNS-Konfiguration am Raspberry Pi abgeschlossen. Wie ist der Raspberry Pi nun aus dem Internet erreichbar?

  1. Unter 192.168.178.25

  2. Unter 93.236.170.179

  3. Er ist nach wie vor nicht erreichbar

  4. Unter server.ddns-anbieter.de

  • Antwort 3 ist die richtige

Zwar ist das Heimnetzwerk nun unter der DDNS-Domain (im Beispiel server.ddns-anbieter.de) erreichbar, der Router lässt Anfragen von Außen nach Innen durch und leitet sie auch an den Raspberry Pi weiter. Dessen Firewall blockiert aber aktuell noch alle Verbindungen außer der SSH-Verbindung, weshalb die Anfrage wieder nicht ans Ziel gelangt.

Firewall anpassen

Um Zugriffe auf Ressourcen des Raspberry Pi zu erlauben (z.B. HTTP und HTTPS-Verkehr für einen Webserver), muss dessen Firewall angepasst werden. Um zu testen, ob die Kommunikation grundlegend funktioniert, wird zunächst der Port 80 für unverschlüsselten HTTP-Datenverkehr geöffnet, sowohl als Portweiterleitung am Router, als auch in der Firewall des Raspberry Pi. Am Raspberry Pi wird dazu der UFW-Befehl genutzt: sudo ufw allow 80

Apache Webserver installieren


Noch wird am Raspberry Pi kein Dienst auf Anfragen mit Port 80 reagieren. Um die Kommunikation zu testen wird der Webserver Apache2 installiert, der auch im weiteren Projektverlauf genutzt wird: sudo apt-get install apache2

Installation und Verzeichnisse

Nach der Installation sind bereits einige Konfigurationsverzeichnisse vorhanden:

  • Virtual-Host-Konfiguration: für jede Internetseite, die der Apache-Webserver ausliefern soll, wird eine Konfigurationsdatei unter /etc/apache2/sites-available erstellt. Zu Beginn befindet sich dort bereits die Apache-Standard-Konfigurationsdatei, welche zum testen genügt.

  • Website-Daten: die Dateien (z.B. die HTML-Dokumente) der Website selbst liegen im sogenannten Document-Root, welches Standardmäßig unter /var/www/html/zu finden ist, aber für jede Internetseite individuell angepasst werden kann (in der Virtual-Host-Konfigurationsdatei).

  • Log-Dateien: Log-Dateien des Apache-Webservers finden sich meistens unter /var/log/apache2/. Der Pfad kann aber in der Virtual-Host-Datei angepasst werden.

Test der externen Erreichbarkeit

Da der Apache-Webserver nach der Installation bereits eine Standardwebsite zu Verfügung stellt, kann die Erreichbarkeit des Webserver direkt getestet werden. Dabei empfiehlt es sich, den Test Stück um Stück zu eskalieren:

    1. Stufe: Erreichbarkeit vom Raspberry Pi selbst testen: in der Kommandozeile mit curl localhost (als Antwort wird ein HTML-Dokument auf der Kommandozeile ausgegeben) oder mit verbundenem Bildschirm im Browser durch Eingabe von localhost in der Adresszeile. Funktioniert Stufe 1, ist gewährleistet, dass der Apache-Webserver funktionert.
    1. Stufe: Erreichbarkeit im Heimnetzwerk: Lokale IP-Adresse des Raspberry Pi (im Beispiel die 192.168.178.25) in der Adresszeile des Browsers am PC/Notebook eingeben. Es sollte die Apache Standardseite zurück geliefert werden. Funktioniert Stufe 2, ist gewährleistet, dass der Zugriff auf den Webserver nicht von der Raspberry Pi Firewall blockiert wird (zunmindest nicht aus dem Heimnetzwerk heraus).
    1. Stufe: Erreichbarkeit im Internet: gewählte DDNS-Domain (im Beispiel server.ddns-anbieter.de) am Smartphone ohne WLAN-Verbindung aufrufen. Es solte dasselbe Ergebnis wie in Stufe 2 erreicht werden. Funktioniert auch Stufe 3, ist gewährleistet, dass sowohl die DDNS-Konfiguration funktioniert, als auch die Portweiterleitung.

Schlägt eine der Stufen fehl, muss zuerst nach dem Fehler gesucht werden. Vermutlich liegt es an einer Fehlerhaften Konfiguration der Firewall, der Portweiterleitung oder von DDClient.

Hauptpunkte

  • Um den Raspberry Pi aus dem Internet zu erreichen müssen mehrere Schritte unternommen werden.

  • es muss eine DDNS-Domain reserveriert werden und ein DDNS-Dienst auf dem Raspberry Pi konfiguriert werden.

  • es muss eine Portweiterleitung auf dem Router des Heimnetzwerks eingerichtet werden. Dies muss vom Internetanbieter unterstützt werden.

  • die Firewall des Raspberry Pi muss angepasst werden.

Content from Installationsvorbereitung 3


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Welche weiteren Vorbereitungen sind nötig?

  • Wie installiere und konfiguriere ich einen Datenbankserver?

  • Wie konfiguriere ich einen Webserver?

Ziele

  • Abhängigkeiten installieren: PHP, Datenbank und Webserver

  • Datenbanken mit MariaDB erstellen

  • Individuelle Website mit dem Apache-Webserver bereit stellen

Abhängigkeiten


Für das korrekte Funktionieren benötigen die meisten Programme dritte Programme, auf deren Funktionen sie zugreifen. Im Falle von Webanwendungen wie Nextcloud sind das vor allem ein Webserver (Apache2 in unserem Fall), ein Datenbankmanagementsystem (siehe Datenbank) und verschiedene Module der Skriptsprache PHP.

Dem Nextcloud-Handbuch kann entnommen werden, dass einige PHP-Module benötigt werden, einige weitere je nach Einsatzzweck empfohlen sind. Die Beispielinstallation unter Ubuntu 22.04 listet auch die genauen Installationsbefehle auf:

BASH

sudo apt update && sudo apt upgrade
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql \
php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip

Es empfiehlt sich jedoch, die genauen Anforderungen zu studieren und den obigen Befehl ggf. den eigenen und aktuellen Bedingungen anzupassen.

Datenbank


Für die Speicherung von z.B. Userinformationen, Zugangsberechtigungen, Metadaten oder Referenzen auf die im Dateisystem gespeicherten Dateien benötigt Nextcloud eine Datenbank. Um eine Datenbank zu betreiben wird ein Datenbankmanagementsystem (kurz: DBMS) benötigt. Unter Debian-Linuxvarianten empfiehlt sich entweder PostgreSQL oder MariaDB. In diesem Kurs wird MariaDB genutzt. Da MariaDB ein Open-Source-Ableger von MySQL ist, können alle für MySQL gültigen Befehle auch für MariaDB genutzt werden.

Die Installation von MariaDB ist bereits mit den Abhängigkeiten erfolgt. Falls nicht, lautet der Befehl: sudo apt-get install mariadb-server

Um sich mit dem Datenbankmanagementsystem MariaDB zu verbinden, kann entweder der Befehl mariadb oder dessen Alias mysql genutzt werden.

Authentifizierung am DBMS

Um unautorisierten Zugriff auf Datenbanken zu verhindern, stellt MariaDB unterschiedliche Möglichkeiten zur Anmeldung am DBMS bereit. Die einfachste ist dabei die Möglichkeit, einen auf dem Betriebssystem vorhandenen User zu nutzen (Unix-Socket-Plugin). Standardmäßig hat der Root-Account des Betriebssystems auch Root-Rechte in MariaDB. Daraus folgt, dass bei einer Anmeldung mit dem Linux-Root-Account auch Root-Rechte in MariaDB erhalten werden: sudo mariadb. Möchte man sich dagegen mit einem User anmelden, der im DBMS gespeichert ist (mysql_native_paassword-Plugin), muss dies explizit mit dem Parameter -u <username> angegeben werden: mysql -u <username> Hat der angegebene User nicht die nötigen Rechte im DBMS, schlägt die Anmeldung fehl.

Um einen User zum DBMS hinzuzufügen, wird wie folgt vorgegangen:

  • mit Root-Rechten anmelden: sudo mysql

  • User erstellen, welcher sich per Passwort am lokalen DBMS anmelden kann: CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';

  • Vom DBMS abmelden: quit

  • Mit dem neu erstellten User anmelden: mysql -u <username> -p

  • Passwort eingeben

Datenbank erstellen

Um eine neue Datenbank zu erstellen wird der Befehl create database innerhalb der interaktiven MariaDB-Kommandozeile genutzt. Anschließend können mit dem GRANT-Befehl einem User Schreib- und Leserechte für die Datenbank erteilt werden.

Es gilt als Best-Practice für jeden Webservice einen eigenen User zu erstellen, welcher nur diejenigen Rechte erhält, die unbedingt nötig sind, um den Service zu betreiben. Auf jeden Fall sollte kein Webservice mit Root-Rechten auf das DBMS zugreifen.

Im Falle von Nextcloud wird zunächst mit Root-Rechten ein User erstellt, eine Datenbank erstellt und dem User anschließend die notwendigen Rechte erteilt:

SQL

CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
CREATE DATABASE IF NOT EXISTS <datenbankname> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON <datenbankname>.* TO '<username>'@'localhost';
FLUSH PRIVILEGES;
quit;

<username>, <password> und <datenbankname> sind jeweils durch eigene Werte zu ersetzen.

Siehe dazu auch das Handbuch

Anschließend sollte der Login und der Zugriff auf die erstellte Datenbank getestet werden: mysql -u <username> -p <datenbankname>

Softwaredownload


Da nun alle Vorbereitungen abgeschlossen sind, kann die Software heruntergeladen und der Download mittels eines Hashwertes überprüft werden:

wget https://download.nextcloud.com/server/releases/latest.tar.bz2
wget https://download.nextcloud.com/server/releases/latest.tar.bz2.sha256
sha256sum -c latest.tar.bz2.sha256 < latest.tar.bz2

Hashwerte:

Um die Korrektheit eines Downloads zu überprüfen, kann dessen Hashwert überprüft werden. Ein Hashwert ist ein Wert, der durch einen Algorithmus aus einer Datei abgeleitet wird. Wird die Datei verändert, verändert sich auch der Hashwert. Dadurch kann überprüft werden, ob eine heruntergeladene Datei noch immer der Datei entspricht, die ursprünglich zur Verfügung gestellt wurde oder ob die Datei auf dem Weg abgefangen und verändert wurde.

Mehr zu Hashwerten findet sich z.B. in diesen beiden YouTube-Videos: 1 und 2

Nach dem Download muss die Software entpackt und in das Document-Root der Website kopiert werden (standardmäßig /var/www/<servicename>).

Dateiarbeit

Was machen die folgenden Befehle:

BASH

sudo tar -xjvf latest.tar.bz2 -C /var/www
sudo chown -R www-data:www-data /var/www/nextcloud

Der tar-Befehl entpackt das heruntergeladene und komprimierte Archiv (latest.tar.bz2) in das Verzeichnis /var/www

Der chown-Befehl überträgt das entpackte Verzeichnis dem User und der Gruppe www-data. Dies ist wichtig, damit der Webserver später auf die Dateien zugreifen kann.

Website Grundkonfiguration


Nach dem Download der Dateien müssen diese als Website durch den Webserver bereit gestellt werden. Dazu muss für Apache2 eine neue Konfigurationsdatei für die Website erstellt werden: sudo nano /etc/apache2/sites-available/nextcloud.conf

In einer ersten sehr einfachen Version kann diese wie folgt aussehen:

<VirtualHost *:80>
  DocumentRoot /var/www/nextcloud/
  ServerName  server.ddns-provider.de

  <Directory /var/www/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>
</VirtualHost>

Apache-Konfiguration

Schauen Sie sich den oben gezeigten Code der Apache-Konfigurationsdatei an. Können Sie die Einstellungen verstehen? Welche Einstellungen müssen Sie an Ihr Setup anpassen?

Webserver sind eine komplexe Angelegenheit, die sehr viele Möglichkeiten zur Konfiguration bieten. Um alle Möglichkeiten zu kennen und zu verstehen, wäre ein eigener Kurs nötig. Idealerweise stellen die Hersteller des zu installierenden Webservices eigene Informationen zur Konfiguration bereit, da je nach Service unterschiedliche Konfigurationen nötig sind. Die wichtigsten Parameter im obigem Code-Beispiel sind:

DocumentRoot: Stammverzeichnis, in welchem sich die Website-Daten befinden.

ServerName: Webadresse, unter der die Website erreichbar sein soll

Die anderen Optionen können dem Handbuch entnommen werden.

Ist die Konfigurationsdatei erstellt, muss dem Webserver mitgeteilt werden, dass diese aktiviert werden soll: sudo a2ensite nextcloud.conf Anschließend befindet sich im Verzeichnis /etc/apache2/sites-enabled/ ein Link auf die Datei /etc/apache2/sites-available/nextcloud.conf

Der Apache-Webserver kann durch Module in seiner Funktion erweitert werden. Diese müssen aktiviert werden, damit sie verfügbar sind. Für Nextcloud sollten die Module mod_rewrite, mod_headers, mod_env, mod_dir und mod_mime aktiviert werden: sudo a2enmod rewrite headers env dir mime

Anschließend muss Apache2 neugestartet werden: sudo systemctl restart apache2.service

Abschließende Schritte


Vor der Installation von Nextcloud muss eine (leere) Konfigurationsdatei für Nextcloud erstellt werden: sudo touch /var/www/nextcloud/config/config.php

Datenverzeichnis

Um die Dateien, die später in Nextcloud gespeichert werden sollen, nicht auf dem Hauptlaufwerk des Raspberry Pis (der SD-Karte) zu speichern, wird auf dem externen Speicher (siehe Episode 7: Installationsvorbereitung 1) ein Verzeichnis erstellt: sudo mkdir /mnt/data/ncdata

Zu Letzt muss sicher gestellt werden, dass der Webserver die nötigen Zugriffsrechte auf das Document-Root und das Datenverzeichnis hat:

  • sudo chown -R www-data:www-data /var/www/nextcloud

  • sudo chown -R www-data:www-data /mnt/data/ncdata

Steuert man nun seine beim DDNS-Provider gewählte Domain im Browser an, erreicht man den Nextcloud-Installationsassistenten. Bevor dieser gestartet wird, sind aber noch weitere Schritte notwendig.

Hauptpunkte

  • Nextcloud benötigt weitere Programme zur Funktion: PHP, Datenbank und Webserver

  • Mit MariaDB muss ein Datenbankuser und eine Datenbank für Nextcloud erstellt werden

  • Die heruntergeladenen Dateien müssen mittels Konfigurationsdatei durch Apache zur Verfügung gestellt werden

Content from Installationsvorbereitung 4


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Ist die aktuelle Verbindung zu meiner Cloud sicher?

  • Wie kann ich Apache sicherer konfigurieren?

Ziele

  • Grundlagen der HTTPS-Verbindung verstehen

  • TLS-Zertifikate mit Letsencrypt und Certbot

  • Sicherheitsoptimierungen für Websites mit Apache

Kommunikationsweg:


Aktuell erreichen wir den Webserver, welcher uns die Website für Nextcloud ausliefert, mit dem HTTP-Protokoll über Port 80. Diese Verbindung ist unverschlüsselt. Das bedeutet, dass sämtliche Daten (z.B. Passwörter und Dateien) die zum Server geschickt oder vom Server verschickt werden, von einem “Zuhörer” auf der Leitung mitgelesen werden können (das geht z.B. mit dem Tool Wireshark v.a. im LAN recht einfach, siehe z.B. diese Anleitung von Varonis).

Grundlagen der HTTPS-Verbindung

Um das Auslesen der Verbindung und damit das Abfangen sämtlicher Kommunikation zu unterbinden, muss die Verbindung verschlüsselt werden. Um eine HTTP-Verbindung zu verschlüsseln wird diese durch das TLS-Protokoll zu einer HTTPS-Verbindung erweitert. HTTPS ist heute glücklicherweise der Standard bei den meisten Internetseiten. Dass Sie eine HTTPS-Verbindung zu einer Seite aufgebaut haben, erkennen Sie in der Adresszeile Ihres Browsers anhand eines Schlosssymbols, bei besonders starken Zertifikaten ggf. zusätzlich auch anhand einer grünen Markierung (siehe die folgende Abbildung).

Browseradresszeile mit der Adresse https://uni-tuebingen.de. Durch ein Schlosssymbol wird die https-Verbindung dargestellt.
HTTPS-Verbindung im Browser. das Schloss zeigt eine verschlüsselte HTTPS-Verbindung an

Die Grundlage des TLS-Protokolls stellen Zertifikate dar, die die Authentizität der Website bestätigen.

Dazu ein nicht technisches Vergleichsbeispiel: Sie wollen bei einem Geschäftsvorgang die Identität des Gegenübers überprüfen. Zeigt Ihnen die Person einen selbst ausgestellten Ausweis, werden Sie diesem Personalausweis nicht vertrauen. Zeigt die Person jedoch einen Ausweis, der von einer Behörde ausgestellt wurde, welcher Sie vertrauen, können Sie auch dem vorgelegten Ausweis vertrauen.

Übertragen auf die HTTPS-Verbindung sieht es wie folgt aus: Ein Website-Betreiber kann sich selbst ein TLS-Zertifikat ausstellen (unter Linux z.B. mit dem Programm OpenSSL) und dieses einem anfragendem Webbrowser oder sonstigem Client präsentieren. Allerdings kann einem solchen selbst ausgestellten Zertifikat nicht von Dritten vertraut werden. Der Browser wird die Verbindung als unsicher ablehnen und eine Warnmeldung zeigen. Damit ein Client dem Zertifikat vertrauen kann, muss dieses genau wie beim Personalausweis von einer zentralen Stelle ausgestellt werden. Diese zentralen Stellen (als Zertifizierungsstellen oder im Englischen als Certificate Authority bezeichnet) können auf Anfrage ein Zertifikat ausstellen, sofern die Identität der anfragenden Stelle gewährleistet ist.

Gleichzeitig besitzt die Zertifizierungsstelle selbst ein Zertifikat, dass deren Identität bestätigt. Dieses Zertifizierungsstellenzertifikat wiederum ist vom Hersteller Ihres Betriebssystems auf Ihrem PC hinterlegt und als vertrauenswürdig eingestuft worden. Überprüft Ihr Browser nun das Zertifikat der Website, stellt er zunächst fest, dass das präsentierte Zertifikat von einer Zertifizierungsstelle ausgestellt wurde, welcher er vertraut. Außerdem wird überprüft, ob die aufgerufene Adresse auch der im Zertifikat hinterlegten Adresse entspricht.

Rufen Sie eine Website auf, die ein falsches Zertifikat präsentiert (z.B. für die falsche Adresse, ein abgelaufenes oder selbst ausgestelltes Zertifikat), erhalten Sie eine Warnmeldung. Diese sollten Sie ernst nehmen, da es auf einen Betrugsversuch hindeuten kann, in welchem eine angreifende Person sich für die Website ausgibt, die Sie eigentlich aufrufen wollten (z.B. die Seite Ihres Online-Bankings).

Browserfenster, dass eine unsichere https-Verbindung zeigt, welche mit einer Warnung angezeigt wird: "Warnung: Mögliches Sicherheitsrisiko erkannt"
Fehlgeschlagene HTTPS-Verbindung im Browser mit Sicherheitswarnung: die Verbindung schläg fehl, da die aufgerufne Adresse (134.2.5.1) nicht der Adresse im Zertifikat entspricht (ersichtlich nach Klick auf den Erweitert-Button)

TLS-Verschlüsselung einrichten

Um die eigene Website per HTTPS erreichen zu können, muss der Raspberry Pi ein Zertifikat von einer Zertifizierungsstelle erhalten, die von allen Computern anerkannt ist. Während dies früher nur gegen Bezahlung möglich war, existiert seit einigen Jahren mit Letsencrypt ein gemeinnütziger Anbieter, der kostenlose Zertifikate zur Verfügung stellt. Diese sind jedoch nur drei Monate gültig und müssen dann verlängert werden.

Um ein solches Zertifikat zu erhalten, muss man gegenüber Letsencrypt nachweisen, dass man die Eigentümerschaft über die Domain, für welche das Zertifikat angefragt wird, hat. Das heißt: wenn Sie für die Adresse server.ddns-provider.de ein Zertifikat erhalten wollen, müssen Sie nachweisen, dass sie den Webserver, der die Seite server.ddns-provider.de ausliefert, verwalten. Diesen Nachweis erbringen Sie nicht manuell, sondern mit Hilfe des Programms Certbot. Mit diesem Programm werden automatisiert einige Informationen zwischen Ihrem Webserver und den Servern von Letsencrypt ausgetauscht, anhand deren die Eigentümerrschaft nachgewiesen werden kann. Anschließend wird das Zertifikat ausgestellt und kann in den Einstellungen der Website integriert werden.

Zertifikat erhalten:

  • Snapd (alternative Paketverwaltung) installieren:

    • Installation: sudo apt install snapd

    • Neustart: sudo reboot

    • Kernpakete installieren: sudo snap install core; sudo snap refresh core

    • Certbot installieren: sudo snap install --classic certbot

    • Certbot-Befehle im System bekannt geben: sudo ln -s /snap/bin/certbot /usr/bin/certbot

  • Überprüfen, ob der Webserver über HTTP auf Port 80 aus dem Internet erreichbar ist (vgl. Lektion 8: Test der externen Erreichbarkeit)

  • Zertifikatsausstellung testen: sudo certbot certonly --apache -d <server.ddns-provider.de> --dry-run (Achtung: eigene Domain einsetzen)

  • Wenn der Test erfolgreich war, kann die Zertifikatsausstellung durchgeführt werden: sudo certbot --certonly -d <server.ddns-provider.de> (Achtung: eigene Domain einsetzen)

System von HTTP auf HTTPS umstellen:

  • Wurde das Zertifikat erhalten, wird im Router die Portweiterleitung für Port 80 gelöscht und stattdessen für Port 443 (Standardport für HTTPS-Verbindungen) eingerichtet. Anschließend wird auch am Raspberry Pi in der Firewall Port 80 geschlossen und Port 443 geöffnet.

  • Apache-Webserver auf HTTPS umstellen: die Konfigurationsdatei der Webiste unter /etc/apache2/sites-available/nextcloud.conf muss angepasst werden

<VirtualHost *:80>
  DocumentRoot /var/www/nextcloud/
  ServerName  server.ddns-provider.de

  RewriteEngine on
  RewriteCond %{SERVER_NAME} =server.ddns-provider.de
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>


<IfModule mod_ssl.c>
<VirtualHost *:443>
  DocumentRoot /var/www/nextcloud/
  ServerName  server.ddns-provider.de
  <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
  <Directory /var/www/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
    LimitRequestBody 2147483647
    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>

SSLCertificateFile /etc/letsencrypt/live/server.ddns-provider.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/server.ddns-provider.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Aufgabe

Schauen Sie sich auch diese Apache-Konfigurationsdatei genau an und überlegen Sie sich, was die Einstellungen bewirken und welche Optionen Sie an Ihr Setup anpassen sollten.

  • Wie nach jeder Änderung an den Konfigurationsdateien muss Apache neugestartet werden: sudo systemctl restart apache2.service

  • Steuern Sie nun Ihre Website im Browser an, erreichen Sie den Nextcloudinstallationsassistenten über eine verschlüsselte HTTPS-Verbindung, erkennbar am Schlosssymbol in der Adresszeile.

  • Überprüfen Sie die Stärke Ihrer HTTPS-Verbindung mit SSLLabs. Dort tragen Sie Ihre Adresse ein, setzen aber den Haken bei “Do not show the results on the boards”. Sie sollten ein A+-Ergebnis erhalten. Schauen Sie sich aber auch die Details des Berichts an. Evtl. sind dort noch Schwachstellen gelistet, die Sie verbessern können.

Fehlerbehebung

Sollte die HTTPS-Verbindung nicht erfolgreich sein, müssen Sie sich auf die Fehlersuche begeben. Hier einige Punkte, welche Sie überprüfen können:

  • Ist der Raspberry Pi via localhost und im Heimnetzwerk unter seiner IP-Adresse über Port 443 erreichbar?

  • Läuft der Apache-Webserver? Überprüfen Sie dessen Status mit sudo systemctl status apache2.service. Evtl. werden Ihnen hier bereits Fehlermeldungen angezeigt. Sie können außerdem die Apache-Log-Dateien unter /var/log/apache2/ inspizieren

  • Wurde das TLS-Zertifikat ordnungsgemäß ausgestellt? Überprüfen Sie, ob unter dem Pfad `/etc/letsencrypt/live/<server.ddns-provider.de>/ die Dateien fullchain.pem und privkey.pem vorhanden sind.

  • Ist die Portweiterleitung in Ihrem Router richtig eingestellt?

  • Funktioniert DDClient? (sudo systemctl status ddlcient und sudo ddclient --query)

  • Hat Ihr DDNS-Provider die richtige IP-Adresse für Ihre Domain eingetragen? Melden Sie sich dazu im Webportal Ihres DDNS-Providers an.

Hauptpunkte

  • Unverschlüsselte HTTP-Verbindungen müssen vermieden werden.

  • Für verschlüsselte HTTPS-Verbindungen wird ein TLS-Zertifikat benötigt.

  • Mit Certbot können kostenlose Zertifikate von Letsencrypt erhalten werden.

  • Für eine HTTPS-Verbindung müssen die Konfiguration des Webservers, der Firewall und des Routers angepasst werden.

Content from Installation und Konfiguration


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Wie installiere ich Nextcloud?

  • Wie kann ich die Installation anpassen?

  • Wie kann die Leistung optimiert werden?

Ziele

  • Nextcloud im Webbrowser installieren

  • Nextcloud im Browser verwalten

  • Nextcloud über die CMD verwalten

  • Caching konfigurieren

Installation


Nachdem in den vorhergehenden Lektionen die Installationsdateien heruntergeladen und jetzt durch Apache über eine HTTPS-Verbindung zur Verfügung gestellt werden, kann die eigentliche Installation beginnen. Dazu ruft man die eigene Domain im Webbrowser auf. Dort wird der Installationsassistent von Nextcloud (“Installation wizard”) erreicht.

Im Assistenten muss ein Adminstrator-Konto für Nextcloud mit Username und Passwort angelegt werden. Es müssen außerdem die Zugangsdaten für die in Lektion 9 erstellte Datenbank eingegeben werden. Da auch das Datenverzeichnis in einem angepassten Pfad auf dem externen Speicher liegen soll (z.B. /mnt/data/ncdata), muss auch der Standardpfad für das Datenverzeichnis angepasst werden.

Mehr zum Installationsassistenten findet sich im Handbuch.

Konfiguration


Nach der Installation kann und sollte die Nextcloudinstanz weiter konfiguriert werden, um das System zu optimieren und seinen Bedürfnissen anzupassen. Dafür bietet Nextcloud drei unterschiedliche Möglichkeiten an, die teilweise dieselben Konfigurationsmöglichkeiten anbieten, teilweise aber auch unterschiedliche.

  • Konfiguration über die Weboberfläche

  • Konfiguration auf der Kommandozeile mit dem OCC-Tool

  • Konfiguration in der Datei /var/www/nextcloud/config/config.php

Weboberfläche

Meldet man sich in der Weboberfläche mit dem bei der Installation erstellten Administrator-Account an, können in den Verwaltungseinstellungen (erreichbar bei Klick auf das User-Icon in der rechten oberen Ecke) verschiedene administrative Tätigkeiten vorgenommen werden, sowie Fehlermeldungen und Systemberichte eingesehen werden.

Screenshot, welcher die Weboberfläche eines Nextcloud-Servers zeigt. Zu sehen ist darauf das geöffnete Kontextmenü nach Klick auf das Usericon. Der Maus-Cursor zeigt auf den Punkt "Verwaltungseinstellungen
Verwaltungseinstellungen in der Weboberfläche öffnen

In der Übersicht der Verwaltungseinstellungen werden Warnmeldungen und Installationsprobleme angezeigt. Diese Warn- und Fehlermeldungen sollten direkt nach der Installation ausführlich untersucht und behoben werden. Dabei hilft meistens schon die Fehlermeldung als solches, das Handbuch oder eine Internetrecherche weiter.

Ebensfalls wird in der Übersicht die aktuelle Version angezeigt und auf evtl. vorhandene Aktualisierungen hingewiesen.

Screeshot der die Übersicht der Verwaltungseinstellungen zeigt. Zu sehen sind die Punkte "Sicherheits- und Einrichtungswarnungen", "Version" und "Aktualisieren"
Übersicht der Verwaltungseinstellungen mit Warnmeldungen und Aktualisierungsinformationen

Sind alle Installationsfehler behoben, kann der Reiter Grundeinstellungen betrachtet werden. Da Nextcloud im Hintergrund regelmäßig verschiedene Aufgaben durchführt (z.B. Dateiscans, Prüfung auf Aktualsierungen oder Papierkorbleerungen), muss ein Tool für das Ausführen dieser Aufgaben festgelegt werden. Hierfür wird cron empfohlen. Mit cron können auf Linuxsystemen Aufgaben (sog. Cron-Jobs) definiert und zu bestimmten Zeitpunkten ausgeführt werden. Dafür muss ein Eintrag in der Crontabelle des Users angelegt werden, welcher die Aufgabe ausführen soll. Für die Erstellung des Cronjobs für Nextcloud, wird die Crontabelle des www-data-Users mit dem Befehl sudo crontab -u www-data -e bearbeitet und folgender Eintrag ergänzt: */5 * * * * php -f /var/www/nextcloud/cron.php Siehe dazu auch das Handbuch

Als weiterer Punkt der Grundeinstellungen empfiehlt es sich, einen E-Mail-Server zu definieren, über welchen der Nextcloud-Server Benachrichtungen verschicken kann. Dazu müssen die Zugangsdaten eines Postausgangsservers (SMTP) angegeben werden. Für E-Mailadressen der Universität Tübingen lassen sich die Einstellungen im Wiki des ZDV nachlesen. Zu beachten ist, dass die Zugangsdaten im Klartext in der Nextcloud-Konfigurationsdatei (/var/www/nextcloud/config/config.php) stehen.

occ-Tool

Zwar kann in der Weboberfläche schon einiges eingestellt werden, häufig müssen Operationen aber über die Kommmandozeile erledigt werden. Dafür steht das nextcloudintegrierte Programm occ zur Verfügung. Die Nutzung des Programms ist im Handbuch ausführlich beschrieben. In unserem Setup kann es wie folgt aufgerufen werden: sudo -u www-data php /var/www/nextcloud/occ <occ-Befehl> Dabei steht eine Vielzahl an Befehlen zur Verfügung, die im Handbuch beschrieben sind. Um z.B. ein Upgrade zu starten lautet der Befehl sudo -u www-data php /var/www/nextcloud/occ upgrade (Details siehe hier). Häufig müssen nach einem Upgrade auch Einträge in der Datenbank angepasst werden: sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

Konfigurationsdatei

Eine Weitere Möglichkeit der Konfiguration stellt die Konfigurationsdatei /var/www/nextcloud/config/config.php dar. Diese kann mit dem nano-Editor direkt bearbeitet werden. Allerdings ist hierbei stets auf die korrekte PHP-Syntax zu achten. Wird das occ-Tool genutzt, kümmert sich dieses um die Änderung der Konfigurationsdatei. Allerdings sind nicht alle Konfigurationswerte durch eigene occ-Befehle implementiert, weshalb die occ-Befehle für manche Anpassungen komplex werden und das direkte Editieren der Datei einfacher erscheint.

Caching


Bei jedem Aufruf der Nextcloud-Website werden im Hintergrund Prozesse gestartet (z.B. Skripte ausgeführt) und Dateien bereitgestellt. Um das Laden der Seite zu beschleunigen, ist es empfehlenswert einen Caching-Dienst zu nutzten. Dieser speichert einmal bereitgestellte Dateien oder Skripte für einen gewissen Zeitraum zwischen, wodurch diese bei erneutem Abruf schneller zur Verfügung stehen.

Nextcloud bietet unterschiedliche Caching-Implementationen an. Je nachdem, wie groß der eigene Server ist, werden unterschiedliche Lösungen empfohlen. Im Kurs nutzen wir die Lösung für Organisationen mit einzelnem Server.

Umsetzung:

  • Caching-Dienst Redis und dessen PHP-Erweiterungen installieren: sudo apt install redis-server php-redis php-apcu

  • Nextloud-Konfigurationsdatei ergänzen: sudo nano /var/www/nextcloud/config/config.php

PHP

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
’redis’ => [
  ’host’ => ’/var/run/redis/redis-server.sock’,
  ’port’ => 0,
  ’timeout’ => 0.0,
],
  • Redis Konfigurationsdatei anpassen: sudo nano /etc/redis/redis.conf
#[...]
port 0
#[...]
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770
  • PHP anpassen: In /etc/php/8.2/cli/php.ini und /etc/php/8.2/apache2/php.ini folgende Angabe ergänzen:
apc.enable_cli=1
  • Berechtigungen für UNIX-Socket-Datei anpassen: usermod -a -G redis www-data

  • Dienste neu starten: systemctl restart apache2 && systemctl restart redis-server

Hauptpunkte

  • Die Installation von Nextcloud kann im Webbrowser erfolgen

  • Im Anschluss an die Installation muss das System auf Fehler überprüft werden

  • Die Konfiguration des Servers kann im Browser, mit dem occ-Programm oder mit der Konfigurationsdatei erfolgen

  • Für eine bessere Leistung empfiehlt sich die Implementierung eines Caching-Dienstes

Content from Backup


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Was ist beim Thema Backup zu beachten?

  • Muss ich meinen Nextcloud-Server sichern?

  • Wie kann ich eine Backupstrategie aufsetzen?

Ziele

  • Grundlagen zum Thema Backup lernen

  • Anwendung der Grundlagen auf das eigene System

  • Erstellen und ausführen von Skripten

  • Cronjobs zur automatischen Skriptausführung nutzen

Grundlagen


Bereits in Kapitel 7 wurde auf die Notwendigkeit eines Backups eingegangen und die gesamte Festplatte (bzw. SD-Karte) gesichert. Dadurch besteht eine Möglichkeit, jederzeit den Stand zum Zeitpunkt von Kapitel 7 wiederherzustellen. Auch jetzt ist es empfehlenswert, ein Backup des gesamten Systems zu erstellen.

Im laufenden Betrieb eignet sich das Sichern des gesamten Systems weniger, da einerseits ein manuelles Eingreifen nötig ist und andererseits auch große Datenmengen anfallen. Deshalb wird in diesem Kapitel ein Verfahren aufgezeigt, welches es ermöglicht, im laufenden Betrieb automatisiert Backups zu erstellen.

Was muss gesichert werden?

Welche Inhalte eines Systems gesichert werden sollen, ist von den eigenen Bedürfnissen abhängig. Es kann jedoch zwischen drei Hauptkategorien an Daten unterschieden werden:

  • Dateien (Bilder,Dokumente, Videos, Emails…)

  • Programme und Lizenzen (Installationsdateien, Konfigurationen, ganze Installationen)

  • System (Betriebssystem mit (allen?) Konfigurationen)

In vielen Fällen wird die Sicherung der Dateien ausreichen, da Programme und System mit etwas Zeitaufwand wieder neu aufgesetzt werden können. In zeitkritischen Umgebungen, wenn ein defektes System schnell wieder verfügbar sein muss, empfiehlt es sich aber, dass gesamte System zu sichern.

Wie muss gesichert werden?

Es kann zwischen drei Varianten einer Sicherung unterschieden werden:

  • Vollsicherung

  • Differentielle Sicherung

  • Inkrementelle Sicherung

Bei der Vollsicherung werden zu jeder Sicherungszeit (z.B. täglich oder wöchentlich) alle Daten gesichert. Der Vorteil dieser Variante ist, dass für eine Wiederherstellung der Daten nur die letzte Sicherungsversion benötigt wird. Der Nachteil liegt im großen Speicher- und Zeitbedarf, da bei jeder Sicherung alle Daten kopiert werden müssen, also sowohl die ursprünglichen Daten, als auch die Daten, die seit der letzten Sicherung neu hinzugekommen sind.

Diagramm, welches für jeden Wochentag einen Wert für den Speicherbedarf der Vollsicherung in TB anzeigt. Montags werden 4 TB benötigt. Mit jeder weiteren Sicherung erhöht sich der Betrag um neu hinzugekommene Daten. Am Ende der Woche werden 8,5 TB benötigt
Speicherbedarf einer täglichen Vollsicherung im Wochenverlauf mit täglich steigendem Speicherbedarf

Bei der differentiellen Sicherung wird zur ersten Sicherungszeit eine Vollsicherung durchgeführt. Anschließend wird jeden Tag eine Sicherung erstellt, welche alle seit der letzten Vollsicherung geänderten oder neu erstellten Daten enthält. Der Vorteil dieser Variante besteht darin, dass bei einer Wiederherstellung nur die letzte Vollsicherung und die letzte differentielle Sicherung benötigt werden. Der Nachteil liegt wie bei der Vollsicherung darin, dass nach wie vor ein großer Speicherplatzbedarf besteht und die Daten dupliziert vorliegen.

Diagramm, welches für jeden Wochentag einen Wert für den Speicherbedarf der differentiellen Sicherung in TB anzeigt. Montags werden 4 TB benötigt. Dienstags wird nur 1 TB für neue Daten benötigt. Jede weitere Sicherung benötigt jeweils den Bedarf des Vortags plus neu hinzugekommen Daten. Am Wochenende beträgt der Bedarf 4,7 TB
Speicherbedarf einer täglichen differentiellen Sicherung im Wochenverlauf

Bei der inkrementellen Sicherung werden jeden Tag nur diejenigen Daten gesichert, die an diesem Tag geändert bzw. neu hinzugekommen sind. Der Vorteil der inkrementellen Variante besteht darin, dass vergleichsweise wenig Zeit und Speicherplatz benötigt wird, da nur zu Beginn eine Vollsicherung erstellt wird und zu jeder weiteren Sicherungszeit nur die Änderungen gesichert werden. Der Nachteil besteht darin, dass im Falle einer Wiederherstellung die letzte Vollsicherung und alle inkrementellen Zwischensicherungen benötigt werden.

Diagramm, welches für jeden Wochentag einen Wert für den Speicherbedarf der inkrementellen Sicherung in TB anzeigt. Montags werden 4 TB benötigt. Dienstags wird nur 1 TB für neue Daten benötigt. Jede weitere Sicherung benötigt nur den Bedarf der an diesem Tag neu hinzugekommen Daten.
Speicherbedarf einer täglichen inkrementellen Sicherung im Wochenverlauf

Neben der Art der Sicherung, muss auch überlegt werden, wie die einzelnen Sicherungsversionen aufgehoben werden. Im obigen Beispiel zu einer täglichen inkrementellen Sicherung und einer wöchentlichen Vollsicherung können z.B. die Vollsicherung und die inkrementellen Zwischensicherungen nur solange aufgehoben werden, bis eine neue Vollsicherung erstellt wurde. Möchte man jedoch gewährleisten, auch auf einen Datenstand von vor 6 Monaten zurück gehen zu können, sollten die Sicherungen länger aufgehoben werden. Z.B. könnte dann eine monatliche Vollsicherung in jeweils sechs Versionen aufbewahrt werden. Wird eine siebte Version erstellt, wird die älteste gelöscht.

Ein bekanntes Schema zur Versionierung von Sicherungen ist das Generationenprinzip (auch als Großvater-Vater-Sohn-Prinzip bezeichnet). Bei diesem Prinzip werden täglich Backups erstellt. Diese werden eine Woche lang aufbewahrt. Anschließend werden die täglichen Versionen zu einem Wochenbackup zusammengefasst. Die wöchentlichen Backups werden für einen Monat aufbewahrt und nach einem Monat zu einer Monatssicherung zusammen gefasst. Diese monatlichen Sicherungen werden für 12 Monate aufbewahrt. Dadurch bestehen für die letzten sieben Tage jeweils tägliche Versionen, für den letzten Monat wöchentliche Versionen und für das letzte Jahr noch monatliche Versionen. Graphisch ist dieses Verfahren hier dargestellt.

Wo muss gesichert werden?

Ist geklärt, was und wie gesichert werden soll, muss noch geklärt werden, wo gespeichert werden soll. Grundlegend sollten Sicherungen nicht auf demselben physischen Datenträger wie die Originaldaten gespeichert werden. Die 3-2-1-Regel gilt als ein guter Richtwert: 3 Kopien auf 2 unterschiedlichen Medien, 1 Offsite-Kopie. Speichert man auf unterschiedlichen Medien, hat man mehr Felxibilität bei der Wiederherstellung. Die Offsite-Kopie an einem anderen Ort wird wichtig, wenn am ursprünglichen Serverstandort ein größerer Schaden Eintritt (z.B. Feuer, Wasser, Kurzschluss oder Einbruch).

Mehr zum Thema Datensicherung findet sich z.B. auch bei Ubuntuusers oder bei Netzwelt.

Der eigene Backupplan


Die zuvor dargestellten Methoden und Standards sind nicht immer einfach umzusetzen. Das ist mit ein Grund dafür, dass in vielen Fällen keine Sicherungen gemacht werden, da der Aufwand für die Implementierung einer Sicherungsstrategie zu groß erscheint. Deshalb ist es insbesondere für Heimanwender und kleinere Organisationen mit wenig zeitkritischen Daten oftmals besser ein mittelmäßiges Backup zu haben als gar keines und dafür nicht alle der zuvor genannten Regeln zu befolgen.

Backup für den Nextcloud-Server

Überlegen Sie sich, wie Sie Ihren Nextcloud-Server sichern können. Was (welche Daten) sollten Sie sichern? Wie sichern Sie (mit welcher Variante)? Suchen Sie im Internet nach Programmen oder Workflows, um eine Nextcloud-Instanz zu sichern. Wo speichern Sie die Sicherungen?

Das Handbuch listet die grundlegenden Schritte auf, um den Nextcloud-Server zu sichern: 1. das Konfigurationsverzeichnis unter /var/www/nextcloud/config, 2. das Datenverzeichnis, z.B. unter /mnt/data/ncdata, 3. der Theme-Folder unter /var/www/nextcloud/themes (nur wichtig wenn eigene Themes genutzt werden) und 4. die Nextcloud-Datenbank des MariaDB-Servers.

Sinnvollerweise wird man eine inkrementelle Sicherung wählen, um Zeit und Speicherplatz zu sparen. Während das Handbuch zwar die einzelnen manuellen Schritte aufzeigt (Maintanance-Modus aktivieren, Ordner mit rsync sichern, Datenbank mit mysqldump sichern) gibt es viele Tools mit denen Nextcloud gesichert werden kann. Z.B. Borg-Backup, Duplicati oder die Nextcloud-integrierte Backup-App. Eine weitere Möglichkeit besteht im schreiben eines eigenen Skripts (eines Mini-Programms), welches leicht an die eigenen Bedürfnisse angepasst werden kann.

Die Sicherungen können zunächst auf einer zweiten Festplatte, die am Raspberry Pi eingebunden ist, gespeichert werden. Mehr Unabhängigkeit vom Hauptsystem erhält man, wenn man die Sicherung über das Netzwerk auf einem zweiten Gerät speichert. Das kann z.B. per Netzlaufwerk im Heimnetz geschehen oder per SSH auf entfernte Rechner (medium.com oder bioslevel.com).

Backupscript erstellen


Eine verhältnismäßig simple Backup-Lösung für Nextcloud ist ein Bash-Skript, in welchem die Befehle aus dem Handbuch eingetragen werden und welches dann zeitgesteuert ausgeführt wird.

Bash-Skripting

Ohne den Anspruch auf Vollständigkeit zu erheben sei kurz auf die absoluten Grundlagen des Bash-Skriptings eingegangen. Beim Bash-Skripting werden die Befehle, die man normalerweise nach einander auf der Kommandozeile tippt, gesammelt in eine Textdatei geschrieben, ein sogenanntes Bash-Skript. Dieses wird immer mit der Shebang bezeichneten Syntax in der ersten Zeile eingeleitet: #!/bin/bash

Anschließend können Befehle wie auf der Kommandozeile geschrieben werden, das Skript gespeichert und mit sudo chmod ug+x ausführbar gemacht werden.

Beispiel:

BASH

#!/bin/bash
# Das ist ein Kommentar. Der wird ignoriert
# Mit echo kann Text ausgegeben werden
echo Hallo Welt
# Mit touch kann eine neue Datei text.txt erstellt werden
touch text.txt
# mit find kann nach Dateien gesucht werden
find . text.*
# mit rm können Dateien gelöscht werden
rm text.txt

Bei Ubuntuusers findet sich ein Skripting-Guide mit mehr Details

Nextcloud-Backup mit Bash-Skript

Für einen Nextcloud-Server könnte ein Skript in den Grundzügen wie folgt aussehen (keine Garantie auf Korrektheit oder Vollständigkeit):

BASH

#!/bin/bash
# Backup-Zielverzeinis als Variable definieren
backup_dir='/mnt/data/backup_nextcloud'

# Backup-Quellen als Variable definieren
data_dir='/mnt/data/nextcloud/'
themes_dir='/var/www/nextcloud/themes' 
config_dir='/var/www/nextcloud/config'

#Zeitstempel als Variable
datetime="$(date +'%Y-%m-%d_%H-%M-%S')"

#Link zum letzten Backup definieren
latest_link="${backup_dir}/latest"

# Pfade erstellen
## Backup-Verzeichnis
if [ ! -d $backup_dir ]; then
    echo "erstelle Backupverzeichnis $backup_dir"
    mkdir $backup_dir
    
elif [ -d $backup_dir ]; then
    echo "$backup_dir existiert bereits"
fi    
##Unterverzeichnisse
    if [ ! -d "$backup_dir/data" ]; then
    	echo "erstelle Unterverzeichnis "Data""
    	mkdir "$backup_dir/data"
    elif [ -d "$backup_dir/data" ]; then
	echo " Unterverzeichnis "Data" existiert bereits"
    fi 
    if [ ! -d "$backup_dir/config" ]; then
    	echo "erstelle Unterverzeichnis "config""
    	mkdir "$backup_dir/config"
    elif [ -d "$backup_dir/config" ]; then
	echo " Unterverzeichnis "config" existiert bereits"
    fi
    if [ ! -d "$backup_dir/themes" ]; then
        echo "erstelle Unterverzeichnis "themes""
        mkdir "$backup_dir/themes"
    elif [ -d "$backup_dir/themes" ]; then
        echo " Unterverzeichnis "themes" existiert bereits"
    fi
    if [ ! -d "$backup_dir/databases" ]; then
    	echo "erstelle Unterverzeichnis "databases""
    	mkdir "$backup_dir/databases"
    elif [ -d "$backup_dir/databases" ]; then
	echo " Unterverzeichnis "databases" existiert bereits"
    fi
## Latest-Verzeichnis
if [ ! -d $latest_link ]; then
    echo "erstelle Latest-verzeichnis $latest_link"
    mkdir $latest_link
elif [ -d $latest_link ]; then
    echo "$latest_link existiert bereits"
fi

#Latest-Links erstellen
ln -s "${backup_dir}/data/${datetime}" "${latest_link}/data"
ln -s "${backup_dir}/config/${datetime}" "${latest_link}/config"
ln -s "${backup_dir}/themes/${datetime}" "${latest_link}/themes"

# Nextcloud in den Maintenance mode versetzen
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

# Inkrementelles Backup der Daten erstellen:
echo "trying backup data directory"
rsync -Aax --delete  "${data_dir}" \
    --link-dest "${latest_link}/data" \
     "${backup_dir}/data/${datetime}"

# Inkrementelles Backup des Konfigurationsverzeichnisses durchführen
rsync -Aax --delete --exclude 'ccnet.sock' "${config_dir}" \
    --link-dest "${latest_link}/config" \
    "${backup_dir}/config/${datetime}"

rsync -Aax --delete "${themes_dir}" \
    --link-dest "${latest_link}/themes" \
    "${backup_dir}/themes/${datetime}"

#Latest-Verweis aktualisieren
rm "${latest_link}/data"
rm "${latest_link}/config"
rm "${latest_link}/themes"

ln -s "${backup_dir}/data/${datetime}" "${latest_link}/data"
ln -s "${backup_dir}/config/${datetime}" "${latest_link}/config"
ln -s "${backup_dir}/themes/${datetime}" "${latest_link}/themes"

# create mysql database backup:
sudo mysqldump --single-transaction --default-character-set=utf8mb4 -h localhost nextcloud > "${backup_dir}/databases/"nextcloud-sqlbkp_`date +"%Y-%m-%d-%H-%M-%S"`.bak

# Maintenance mode beenden
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

#21 Tage alte Backups suchen und loeschen
find $backup_dir/data -maxdepth 1 -mtime +21 -type d -exec rm -rf {} +
find $backup_dir/config -maxdepth 1 -mtime +21 -type d -exec rm -rf {} +
find $backup_dir/themes -maxdepth 1 -mtime +21 -type d -exec rm -rf {} +
find $backup_dir/databases -maxdepth 1 -mtime +21 -type f -exec rm {} +

Backup-Skript lesen und verstehen

Schauen Sie sich das oben gezeigte Backup-Skript genau an. Können Sie verstehen, was dieses Skript macht? Welche Parameter müssen Sie anpassen, damit dieses Skript für Ihr Setup funktioniert? Was sind die essentiellen Befehle, die ausgeführt werden?

Von oben nach unten macht das Skript folgendes:

Es werden Variablen für die Backupquelle, das Backupziel und die aktuelle Zeit definiert.

Es werden leere Verzeichnisse im Backupziel erstellt, sofern diese noch nicht vorhanden sind.

Es werden Links auf die aktuelle Backupversion erstellt.

Nextcloud wird mit dem occ-Tool in den maintanace-Modus versetzt.

Mit rsync werden die Datenverzeichnisse gesichert.

Mit mysqldump wird die Datenbank gesichert.

Mit dem occ-Tool wird der maintanance-Modus wieder verlassen.

mit dem find-Befehl werden Sicherungsversionen, die älter als 21 Tage sind, gelöscht.

Cron und Cronjobs


Hat man ein Skript erstellt, sollte dieses manuell getestet werden, indem es auf der Kommandozeile aufgerufen wird: ./skript.sh Benötigen die Befehle im Skript sudo-Rechte, muss das Skript auch mit sudo-Rechten ausegführt werden (ACHTUNG: dann werden alle Befehle mit root-Rechten ausgeführt): sudo ./skript.sh

Ist der manuelle Test erfolgreich verlaufen, kann das Skript mittels Cron automatisch zu bestimmten Zeiten ausgeführt werden. Wie im vorherigen Kapitel zur Nextcloud-Konfiguration erwähnt, ist Cron ein Programm, mit welchem Befehle zu bestimmten Zeiten automatisch ausgeführt werden. Diese Befehle werden in der Crontabelle gespeichert. Jeder User des Betriebssystems hat eine eigene Crontabelle. Soll ein Befehl mit Root-Rechten ausgeführt werden, muss der Befehl in die Crontabelle des root-Accounts eingetragen werden, Befehle die durch den www-data-User ausgeführt werden sollen, gehören in dessen Cron-Tabelle.

Die Crontabelle eines Users kann wie folgt angezeigt werden: sudo crontab -u <username> -l Um die Tabelle zu ändern lautet der Befehl wie folgt: sudo crontab -u <username> -e

Die Einträge für jeden Cron-Job (also jeden auszuführenden Befehl) sind wie folgt aufgebaut: Zeitangabe für die Ausführung und auszuführender Befehl. Die Zeitangaben erfolgt dabei in fünf einzelnen Einheiten: 1. Angabe der Minute (0-59), 2. Angabe der Stunde (0-23), 3. Angabe des Tages (1-31), 4. Angabe des Monats (1-12) und 5. Angabe des Wochentages (0-7).

Beispiel: um das Skript backup.sh im Verzeichnis /home/administrator/ jeden Montag um 14:30 auszuführen lautet der Eintrag wie folgt:

30 14 * * 1 sh /home/administrator/backup.sh

Ist der Cronjob erstellt, muss überprüft werden, ob das Skript zur eingestellten Zeit tatsächlich läuft und das gewünschte Ergebnis liefert.

Restore


Ein Backup ist nur hilfreich, wenn es auch wieder hergestellt werden kann. Deshalb sollte schon beim erstellen der Sicherung klar sein, wie die Daten im Ernstfall wieder hergestellt werden könnnen. Im Falle von Nextcloud können die Dateien im Backup-Verzeichnis gefunden werden. Von dort können die Dateien wieder an den Ursprungsort kopiert werden (z.B. mir rsync oder dem cp-Befehl). Die Datenbanksicherung kann wie folgt wieder hergestellt werden:

SQL

mysql -h localhost -u <username> -p<password> -e "DROP DATABASE nextcloud"
mysql -h localhost -u <username> -p<password> -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
mysql -h localhost -u <username> -p<password> <db_name> < nextcloud-sqlbkp_2024-10-12-14-30-44.bak

Das Handbuch schildert den Restore-Prozess ebenfalls.

Hauptpunkte

  • inkrementelle Backups sind speicherplatz- und zeitsparend

  • besser ein mittelmäßiges Backup als gar kein Backup

  • Per Bash-Skript und cron-Job kann der Nextcloud-Server automatisch gesichert werden

Content from Konfiguration 2


Zuletzt aktualisiert am 2024-10-16 | Diese Seite bearbeiten

Geschätzte Zeit: 135 Minuten

Übersicht

Fragen

  • Wie kann ich meinen Nextcloud-Server aktualisieren?

  • Was kann ich noch für bessere Performance tun?

  • Kann ich die Funktionalität erweitern?

Ziele

  • Upgrade im Browser und per CMD

  • Pretty URLs konfigurieren

  • Server Tuning: Mehr Leistung für das System

  • Server Hardening: mehr Sicherheit für das System

  • Apps und Integrationen

Nextcloud aktualisieren


Der gesamte Upgrade-Prozess ist im Handbuch ausführlich geschildert. Wie vor allen größeren Systemeingriffen, empfiehlt sich auch vor einem Upgrade ein Backup wie in Kapitel 12 geschildert.

Ob eine neue Version verfügbar ist, kann der Übersicht in den Verwaltungseinstellungen entnommen werden (vgl. Kapitel 11). Die Aktualisierung erfolgt in Abhängkeit des eigenen Systems auf unterschiedliche Weise. Im Falle der in diesem Kurs vorgenommenen manuellen Installation kann der Built-in Updater genutzt werden oder manuell durch Download der neuen Version das System aktualisiert werden. Im Folgenden wird der Built-in-Updater als empfohlene Variante genutzt.

Bei der Aktualisierung ist zwischen den unterschiedlichen Versionen zu differenzieren:

  • Major release upgrade: 28.x zu 29.x

  • Maintenance release upgrade 28.1 zu 28.2

  • Point release upgrade: 28.1.0 zu 28.1.1

Insbesondere bei einem major release upgrade sollten zuvor die Release Notes beachtet werden, um zu überprüfen, ob das Upgrade weitere Systemanpassungen erforderlich macht.

Sind die Voraussetzungen geklärt, kann der Built-in Updater entweder im Browser in der Übersicht der Verwaltungseinstellungen oder über die Kommandozeile mit dem Befehl sudo -u www-data php /var/www/nextcloud/updater/updater.phar gestartet werden. Sowohl im Browser, als auch in der Kommandozeile wird man vom Built-in Updater interaktiv durch den Upgrade-Prozess geleitet. Dabei werden die neuen Programmdateien heruntergeladen und die alten durch die neuen ersetzt. Allerdings ist anschließend noch der eigentliche Migrationsschritt auf Datenbankebene nötig. Dieser Schritt kann entweder im Browser gestartet werden, wenn am Ende des Upgrades der Maintanance-Modus deaktiviert wird, oder über die Kommandozeile mit dem Befehl sudo -u www-data php /var/www/nextcloud/occ upgrade

Im Anschluss an den Migrationsschritt können weitere Schritte nötig sein, die nur mit dem occ-Tool durchgeführt werden können. Ob und welche Schritte notwendig sind, wird in der Übersicht der Verwaltungseinstellungen angezeigt.

Server Tuning


Um die Leistung und die Benutzerfreundlichkeit des Nextcloud-Servers zu verbessern, können noch einige Einstellungen vorgenommen werden.

Pretty URLs

Um die URLs der Nextcloud-Instanz abzukürzen und dadurch verständlicher zu machen, müssen zwei Apache-Module aktiviert werden (sofern noch nicht geschehen): sudo a2enmod env && sudo a2enmod rewrite

Anschließend muss die Nextcloud-Konfigurationsdatei mit zwei Einträgen ergänzt werden:

PHP

'overwrite.cli.url' => 'https://server.ddns-provider.de',
'htaccess.RewriteBase' => '/',

Dabei muss die eigene DDNS-URL anstatt des Platzhalters eingetragen werden. Abschließend muss einmalig die .htaccess-Datei aktulisiert werden: sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess

.htaccess

.htaccess-Dateien können in beliebigen Verzeichnissesn des Apache-Document-Root liegen. Sie steuern die Zugriffsrechte auf das jeweilige Verzeichnis und dienen dadurch der Sicherheit einer Website, indem Sie z.B. verhindern, dass ein Websitebesucher auf Dokumente zugreifen kann, die andere User hochgeladen haben.

Upload großer Dateien

Möchte man größere Dateien über das Webinterface seines Nextcloud-Server hochladen, muss der Transport großer Dateien durch das System, den Webserver und PHP gewährleistet werden. Dabei ist zu beachten, dass Uploads über einen Nextcloud-Client (z.B. am Desktop-PC) nicht betroffen sind, da dieser eine große Datei in einzelnen Teilen hochlädt. Erlaubt man den Upload sehr großer Dateien kann dies die Systemleistung negativ beeinflussen; User*innen mit bösen Absichten könnten dadurch sogar den Nextcloud-Server überlasten und dadurch unbrauchbar machen.

Möchte man die Option dennoch aktivieren (um z.B. größere ZIP-Dateien, Videodateien oder Festplattenimages im Browser hochladen zu können), gibt einem das Handbuch Hilfestellung. Die wesentlichen Punkte sind:

  • Ausreichend Speicherplatz für alle parallel laufenden Uploads im Verzeichnis /tmp/

  • PHP.ini-Dateien (/etc/php/8.2/cli/php.ini und /etc/php/8.2/apache2/php.ini) bearbeiten:

PHP

php_value upload_max_filesize <Größe, z.B. 10G>
php_value post_max_size <Größe, z.B. 10G>
[...]
php_value max_input_time <Upload-Timout-Zeit in Sekunden, z.B. 3600 für eine Stunde>
php_value max_execution_time <Upload-Timout-Zeit in Sekunden, z.B. 3600 für eine Stunde>
[...]
output_buffering = 0
  • Evlt. müssen in der Apache-Konfigurationsdatei (/etc/apache2/sites-available/nextcloud.conf) einige Timeouts innerhalb des zweiten virtual-host-Bereichs durch Eintragung und Anpassung der folgenden Zeilen erhöht werden ((siehe Apache-Handbuch zu den Themen requirereadtime, TimeOut und LimitRequestBody):
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
LimitRequestBody <Größe in Bytes, z.B. 10737418240 für 10 GiB>
TimeOut <Wert in Sekunden>

Je nach System sind weitere Optimierungen möglich. Das bereits viel erwähnte Handbuch gibt Anreize. Viele der dort genannten Punkte wurden in dieser oder vorheriger Lektionen bereits umgesetzt. Empfehlenswert kann der Einsatz und die Anpassung von PHP-FPM sein. Für Nextcloud 28 und einen Raspberry Pi 4 mit 4 GB RAM ist auf intux.de eine ausführliche Schilderung zu finden.

Server Hardening


Um seinen Nextcloud-Server sicher zu betreiben können weitere Schritte unternommen werden, welche wieder dem Handbuch entnommen werden können.

Grundlegend ist es wichtig, sein gesamtes System stets aktuell zu halten, sich regelmäßig über Änderungen auf dem Laufenden zu halten und neue Sicherheitsempfehlungen umzusetzen.

Um zum Beispiel den Apache-Webserver weiter abzusichern, gibt es im Internet viele Ratschläge. z.B. bei Apache selbst, bei tecmint.com oder geekflare.com. Dabei sollte stets auf die Aktualität und Zuverlässigkeit der Tips geachtet werden. Außerdem muss die Kompatibilität mit dem Nextcloud-Server getestet werden.

Zufallszahlen mit /dev/urandom/

Unter den im Handbuch genannten Sicherheitsempfehlungen kann recht schnell der Zugriff für PHP auf /dev/random gewährleistet werden. Dadurch werden besser Zufallszahlen berechnet, z.B. für Passwörter. Dazu müssen die PHP.ini-Dateien (/etc/php/8.2/cli/php.ini und /etc/php/8.2/apache2/php.ini) bearbeitet werden und folgende Zeile ergänzt werden:

open_basedir /var/www/nextcloud/:/dev/urandom/:<Pfad-zum-Datenverzeichnis, z.B. /mnt/data/ncdata/>

Fail2Ban

Wie auch schon für den SSH-Server kann auch für Nextcloud ein Jail für Fail2Ban definiert werden, mit welchem zu viele fehlerhafte Logins detektiert und deren Verursacher geblockt werden können. Dazu muss in der Fail2Ban-Konfiguratiuonsdatei das Jail defniert werden und ein Filter erstellt. Das Handbuch zeigt die einzelnen Schritte auf.

Weitere Funktionen


Apps

Um die Funktionalität des Nextcloud-Server zu erweitern können Apps installiert werden. Da Nextcloud eine Open-Source-Software mit sehr aktiver Community ist, gibt es sehr viele Erweiterungen und Integrationen.

Um Apps zu installieren, muss man sich im Browser mit dem Adminstratoraccount anmelden. Bei Klick auf das Benutzericon in der rechten oberen Ecke gelangt man zum Menüpunkt Apps.

Dort können Apps gesucht, installiert und vorhandene aktualisiert werden. Die Verwaltung der Apps kann auch mit dem occ-Tool auf der Kommandozeile erfolgen.

Nextcloud Appverwaltung im Browser

Es gibt zu sehr vielen Themen unterschiedliche Apps. Z.B. Talk für Chat und Videokonferenzen, Memories für die Bildverwaltung, Cospend für die Abrechnung gemeinsamer Ausgaben, News um Nachrichtenfeeds in der Nextcloud-App zu erhalten, Nextcloud-Office um Dokumente, auch gemeinsam, im Browser zu bearbeiten, Kalender und Kontakte um diese Daten nicht mehr bei Dritten speichern zu müssen und vieles mehr.

User und Gruppen

Natürlich können dem Nextcloud-Server weitere User hinzugefügt werden. Auch das kann als Adminstrator im Browser getan werden. Zusätzlich können User auch in Gruppen eingeteilt werden, um so die Rechteverwaltung zu erleichtern.

Clients

Um auf die Daten und Informationen seines Nextcloud-Servers zugreifen zu können, können neben dem Webbrowser auch verschiedene Client-Programme genutzt werden. Für alle gängigen Betriebssystem gibt es den Synchronisierungsclient, für mobile Geräte darüber hinaus zahlreiche Apps für bestimmte Einsatzzwecke.

Support

Während für Privat- und Kleinanwender die große Community Hilfe bietet, besteht für größere Instanzen von Organisationen auch die Option eine kostenpflichtige Enterprise-Lizenz zu erwerben und damit Zugriff auf den Support und zusätzliche Informationen und Tools von Nextcloud zu erhalten.

Hauptpunkte

  • Die Aktualisierung kann mit dem Build-In Updater im Browser oder per CMD erfolgen

  • Nach Abschluss der Aktualisierung muss die Datenank migriert werden und ggf. weitere Schritte durchgeführt werden

  • Die Performance des Servers kann durch Konfigurationsänderungen in PHP verbessert werden

  • Die Sicherheit kann durch Änderungen an der Apache-Konfiguration, mit Fail2Ban und urandom erhöht werden