Content from Vorbesprechung
Last updated on 2025-01-21 | Edit this page
Overview
Questions
- Was ist Datenmanagement?
- Was ist digitale Selbstbestimmtheit?
- Warum ist eine selbst gehostete Datenmanagementlösung gut?
Objectives
- 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
Lesen Sie den folgenden Artikel: SPIEGEL: Autoupload in die Google-Cloud
Welche grundlegenden Probleme führten zu Marks Situation?
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:
E. Snowden, Permanent Record - Meine Geschichte, (Berlin 2019)
J. Caspar, Wir Datensklaven - Wege aus der digitalen Ausbeutung, (Berlin 2023)
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.
- 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.
- 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.
- 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.
- 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.
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
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
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.
Key Points
- 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
L. Simon, Digitale Mündigkeit - Wie wir mit einer neuen Haltung die Welt retten können, (Bielefeld 2024)↩︎
Content from Hardware und Betriebssystem
Last updated on 2025-01-21 | Edit this page
Overview
Questions
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?
Objectives
- 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:
- Client
Klassisches Endgerät wie PC, Notebook oder Smartphone. Hat keine zentralen Aufgaben. Ist ein Client-Gerät ausgefallen, ist das Netzwerk nicht betroffen.
- 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:
Raspberry Pi 4 mit 8GB RAM für ca. 100€ und einer externen 2 TB USB-HDD-Festplatte
Raspberry Pi 5 mit 8GB RAM für ca. 110€ und einer 2 TB SSD-Festplatte
Odroid H4 Ultra mit einer 2 TB SSD-Festplatte
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:
- Betriebssystem auswählen: Rapsberry Pi OS 64 Bit
Speicher auswählen: die SD-Karte muss im PC eingesteckt sein und nun ausgewählt werden.
Über das Zahnradsymbol die erweiterten Einstellungen öffnen
-
Folgende Optionen einstellen:
Hostname: ein Name für deinen Raspberry Pi (keine Sonderzeichen, keine Leerzeichen)
SSH aktivieren auswählen
Benutzername und Passwort festlegen (und merken!)
WLAN-Zugang konfigurieren
Spracheinstellungen festlegen: Europe/Berlin und de
Telemetrie deaktivieren
Inhalte mit dem Schreiben Button auf die SD-Karte schreiben
Hardware zusammen bauen
Gehäuse öffnen (Pfeile am Deckel beachten)
Raspberry Pi Board auf die Zapfen des Gehäuses setzen
Wenn noch nicht geschehen: Kühlkörper aufkleben
Gehäuse schließen und falls vorhanden zuvor den Lüfter einsetzen
Netzkabel und HDMI-Kabel anschließen (noch nicht mit dem Stromnetz verbinden)
SD-Karte einsetzen
Monitor verbinden
Maus und Tastatur anschließen
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:
Im Hauptmenü (oben links) unter Einstellungen auf Raspberry Pi Konfiguration gehen
Autologin deaktivieren
Interfaces: SSH aktivieren (wenn noch nicht passiert)
Performance: ggf. Raspberry Pi Lüfter konfigurieren
Localisation: ggf. Sprache einstellen
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
Empfehlung: Grundlagen mit der Linux-Kommandozeile aneignen
Key Points
- 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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
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?
Objectives
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.
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 Ubuntuusers 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 ist kompatibel mit dem Betriebssystem und, je nach konkretem “Unterkatalog”, auch getestet. Allerdings handelt es sich nicht immer um die neueste Version eines Programms. Denn neue Versionen werden aufgrund der Tests und Abhängigkeiten zu anderer Software erst zeitverzögert in die Kataloge aufgenommen.
Bevor Software Software installiert werden kann, muss das
Betriebssystem 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 erfolgt mit
sudo apt-get install <Paketname>
.
Der Vorteil der zentralen Paketverwaltung ist, dass in den
Repositorien stets festgehalten ist, welche Version eines Programms die
aktuelle ist. Durch den Abgleich der Versionen aller installierter
Programme mit dem Repositorium kann die Paketverwaltung schnell
ermitteln, für welche Programme es Aktualisierungen gibt. Um diese zu
installieren, muss der Befehl sudo apt-get upgrade
ausgeführt werden.
Fremdquellen
Ist in 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 Software 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
Weitere 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 aktualisierbare Programme ansudo apt-get remove <Paketname>
: entfernt ein Paket, nicht jedoch dessen Konfigurationsdateiensudo 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 weitere Abhängigkeiten haben können) oder der Downgrade auf eine kompatible Version.
Paketname: häufig sind die Paketnamen für ein 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 betreiben. 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
.
Anschließend wird das System auf den aktuellen Stand gebracht:
sudo apt-get upgrade
.
Nun 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 Position im Dateisystem anzeigen:
pwd
Verzeichnisinhalt anzeigen lassen:
ls
oder mit mehr Informationenls -l
Dateioperationen:
Datei erstellen:
touch <Dateipfad>/<Dateiname>
Verzeichnis anlegen:
mkdir <Dateipfad>/<Neuer-Ordner>
Inhalt einer Textdatei ausgeben:
cat <Datename>
Oberste oder letzte 10 Zeilen einer Datei anzeigen lassen:
head <Dateiname>
undtail <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
Key Points
Raspberry Pi OS ist das Linux-Betriebssystem unserer Wahl
Das Dateisystem unter Linux besteht aus einem einzigen Verzeichnisbaum. “/” ist dabei die oberste 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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
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?
Objectives
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?
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.
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).
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.
Firewall: eine etwaige Firewall am Server muss die SSH-Verbindung zulassen
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.
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 zuPort <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
undClientAliveCountMax 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>
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Wer darf was auf meinem System?
Welche Benutzer gibt es unter Linux?
Was sind Dateirechte?
Objectives
Grundlagen der Benutzerverwaltung unter Linux
Dateirechte verstehen und anpassen
Befehle
chmod
,chown
,adduser
,deluser
undusermod
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:
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.
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 demsudo
-Befehl die eigenen Rechte eskaliert werden, d.h. Befehle mit administrativen Rechten ausgeführt werden.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?
sudo adduser linus
undsudo visudo /etc/sudoers.d/010_pi-nopasswd
adduser linus
undusermod -aG linus sudo
sudo adduser linus
undsudo usermod -aG sudo linus
sudo visudo linus
undsudo 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:
-
Angabe für wen etwas geändert wird (Gruppe oder Account)
u
= userg
= groupo
other (=alle anderen)
-
Angabe, ob ein Recht erteilt oder entzogen werden soll
+
= Recht erteilen-
= Recht entziehen
-
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 2 ist korrekt. Die drei
chmod
-Befehle könnten noch durchsudo chmod 750
zusammengefasst werden, siehe dazu den Ubuntuusers-Artikel zu Dateirechten
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
Key Points
der root-Account ist der Adminstrator des Systems
Mitglieder der sudo-Gruppe haben administrative Rechte, welche sie mit dem
sudo
-Kommando nutzen könnenDateien 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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Wie kommunizieren Computer im Netzwerk?
Wie schütze ich meinen Server im Netzwerk?
Objectives
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:
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>
odersudo 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.
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Wie kann ich Datenverlust vermeiden?
Wie kann ich meinen Speicherplatz erweitern?
Wie beginne ich die Installation von Nextcloud?
Objectives
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/
erscheinenPartition 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, mitn
eine neue Partition und mitw
werden die Änderungen auf den Datenträger geschriebenAuf 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.
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 |
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
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?
Objectives
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:
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?
Unter 192.168.178.25
Unter 93.236.170.179
Er ist gar nicht erreichbar
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.
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
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?
Unter 192.168.178.25
Unter 93.236.170.179
Er ist nach wie vor nicht erreichbar
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:
- 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.
- Stufe: Erreichbarkeit vom Raspberry Pi selbst testen: in der
Kommandozeile mit
- 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).
- 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.
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Welche weiteren Vorbereitungen sind nötig?
Wie installiere und konfiguriere ich einen Datenbankserver?
Wie konfiguriere ich einen Webserver?
Objectives
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>
).
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.
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Ist die aktuelle Verbindung zu meiner Cloud sicher?
Wie kann ich Apache sicherer konfigurieren?
Objectives
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).
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).
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 --apache -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>
Challenge
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.
SSL-Modul in Apache aktivieren:
sudo a2enmod ssl
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/
inspizierenWurde 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
undsudo 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.
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Wie installiere ich Nextcloud?
Wie kann ich die Installation anpassen?
Wie kann die Leistung optimiert werden?
Objectives
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.
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.
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:
sudo systemctl restart apache2 && sudo systemctl restart redis-server
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Was ist beim Thema Backup zu beachten?
Muss ich meinen Nextcloud-Server sichern?
Wie kann ich eine Backupstrategie aufsetzen?
Objectives
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.
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.
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.
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.
Key Points
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
Last updated on 2025-01-21 | Edit this page
Overview
Questions
Wie kann ich meinen Nextcloud-Server aktualisieren?
Was kann ich noch für bessere Performance tun?
Kann ich die Funktionalität erweitern?
Objectives
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:
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.
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.
Key Points
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