schule:raspberry_pi_als_server
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
schule:raspberry_pi_als_server [2016-09-21 20:50] – [tor hidden service] marco.bakera | schule:raspberry_pi_als_server [2024-01-25 17:38] (aktuell) – mv pintman | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Raspberry Pi als Server ====== | + | Verschoben |
- | + | ||
- | {{: | + | |
- | + | ||
- | Als Hardwaregrundlage benötigt ihr einen [[Raspberry Pi]]. Dieser wird mit einer SD-Karte für das Betriebssystem, | + | |
- | + | ||
- | **Warnung!** Ihr werdet für die nächsten Aufgaben vermutlich an vielen Stellen im Internet recherchieren. Kopiert keine Texte einfach so von einer Webseite in ein Konsolenfenster. Dadurch kann Schadcode in den Zwischenspeicher gelangen, den man so nicht sieht. Ein [[http:// | + | |
- | ===== Webserver und PHP installieren ===== | + | |
- | + | ||
- | Als Software benötigen wir einen [[wpde> | + | |
- | + | ||
- | - Installiere den Webser apache: Folge hierfür der [[https:// | + | |
- | - Der Server lässt sich mit einem Befehl neu starten. Wie lautet er? | + | |
- | - Der Server legt seine Konfiguration in ''/ | + | |
- | + | ||
- | Du kannst auch probieren, einen [[Webserver programmieren|eigenen Webserver zu programmieren]]. So schwierig ist es gar nicht. | + | |
- | + | ||
- | ==== Webserver im Netz finden ==== | + | |
- | + | ||
- | Um heraus zu finden, welche Webserver auf Port 80 im Netz 192.168.42.0/ | + | |
- | + | ||
- | nmap --open -p 80 192.168.42.0/ | + | |
- | + | ||
- | Auch mit scapy und [[Python]] können Netze auf unterschiedliche Arten untersucht werden. Der Artikel [[http:// | + | |
- | ==== nginx: ein alternativer Webserver ==== | + | |
- | + | ||
- | Neben apache gibt es noch viele weitere Webserver. [[http:// | + | |
- | ===== dokuwiki installieren ===== | + | |
- | {{ :: | + | |
- | Sobald der Webserver und PHP installiert sind, kann dokuwiki installiert werden. Hierbei handelt es sich um eine Wiki-Software. Der Prozess ist in der [[https:// | + | |
- | + | ||
- | Für den Download könnt ihr [[man> | + | |
- | + | ||
- | wget http:// | + | |
- | + | ||
- | ==== Zugriffsrechte anpassen ==== | + | |
- | + | ||
- | Damit der Webserver auf die Dateien zugreifen kann, müssen die Dateien für den Benutzer '' | + | |
- | + | ||
- | sudo chown -R pi:www-data / | + | |
- | + | ||
- | Nun erhält die Gruppe mit [[man> | + | |
- | + | ||
- | chmod -R g+w / | + | |
- | + | ||
- | ==== Installation über den Paketmanager (optional) ==== | + | |
- | + | ||
- | Dokuwiki kann auch über den Paketmanager mit '' | + | |
- | + | ||
- | Die Konfigurationsdateien landen in ''/ | + | |
- | ===== Perfomanceoptimierung (optional) ===== | + | |
- | + | ||
- | Mit dem apc-Modul ([[wpde> | + | |
- | + | ||
- | ===== Sicherheit durch TLS-Zertifikate ===== | + | |
- | + | ||
- | Damit ein verschlüsselter Zugriff auf den Pi auch über HTTPS erfolgen kann, wird ein SSL- bzw. TLS-Zertifikat benötigt, das auf dem Pi installiert werden muss -- TLS steht für [[wpde> | + | |
- | + | ||
- | Sehr einfach lässt sich die eigene Webseite mit selbst-signierten Zertifikaten absichern. In diesem Fall beschwert sich der Browser jedoch beim Aufrufen der Webseite, da er den Aussteller des Zertifikates nicht kennt. Die Verbindung ist trotzdem verschlüsselt. Das Verfahren wird in der Paketdokumentation von apache beschrieben. Sie liegt in der Datei ''/ | + | |
- | + | ||
- | Die [[http:// | + | |
- | + | ||
- | Wenn alles korrekt eingerichtet wurde, kannst du den Pi anschließend über ''< | + | |
- | + | ||
- | **Aufgaben** | + | |
- | - Wozu wird TLS/SSL benötigt? | + | |
- | - Was ist der Unterschied zwischen SSL und TLS? | + | |
- | - Was ist ein selbst-signiertes Zertifikat? | + | |
- | - Sichere deinen Server mit einem selbst-signierten Zertifikat (einfach) oder einem Zertifikat, das von StartSSL ausgestellt wurde (schwierig, du brauchst eine eigene Domain). | + | |
- | - Mit welchem Befehl lassen sich Webserver mit einer HTTPS-Unterstützung im lokalen Netz finden? | + | |
- | + | ||
- | ===== Was ist HTTP und wie funktioniert es? ===== | + | |
- | < | + | |
- | <iframe width=" | + | |
- | </ | + | |
- | + | ||
- | - Erstelle eine Präsentation zum Thema Hypertext Transfer Protocol (kurz [[wpde> | + | |
- | - Führe eine Beispielsitzung durch, z.B mit einem Browser oder einem telnet-client wie putty((Trage die IP-Adresse des Webservers ein, wähle Port 80, den " | + | |
- | - Visualisiere das Verfahren durch eine eigene Zeichnung. | + | |
- | - Nützliche Links: [[http:// | + | |
- | - Ergänze deine Präsentation um einen eigenen Linktipp. | + | |
- | + | ||
- | + | ||
- | ===== Analyse der Server-Logdateien ===== | + | |
- | + | ||
- | < | + | |
- | <iframe width=" | + | |
- | </ | + | |
- | + | ||
- | Bei Problemen hilft häufig ein Blick in die Logdateien eines Dienstes. Wir wollen für unseren Webserver exemplarisch dessen Logdateien untersuchen. Hierfür hilft das Programm '' | + | |
- | + | ||
- | - Wo legt der apache-Webserver die Logdateien ab? | + | |
- | - Welche Arten von Logdateien gibt es beim apache? | + | |
- | - Führe den Befehl '' | + | |
- | - Baue nun einen kleinen Fehler bei deinem Mitschüler ein. Öffne dazu die Datei '' | + | |
- | - Schaut euch den Inhalt der anderen Logdateien in ''/ | + | |
- | - Du kannst auch selbst in das " | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===== Einrichten einer eigenen Domain ===== | + | |
- | {{ : | + | |
- | Über den Dienst [[https:// | + | |
- | + | ||
- | - Was ist das [[wpde> | + | |
- | - Versuche, eine Anfrage an einen DNS-Server mit dem Tool '' | + | |
- | - Melde dich bei dem Dienst '' | + | |
- | - Was sind ein " | + | |
- | - Richte einen Cronjob ein, der in regelmäßigen Abständen den DNS über deine aktuelle IP-Adresse informiert.((Auf der Webseite findest du fertige '' | + | |
- | - Wird der Name korrekt zu der IP-Adresse aufgelöst -- es sollte die Adresse der Schule auftauchen? Nutze den Befehl '' | + | |
- | - (optional) Lege in deinem heimischen Router eine Portweiterleitung an, die alle Anfragen auf Port 80 (HTTP) und 443 (HTTPS) an den Pi weiterleitet. Teste im Anschluss, ob der Pi über die Webadresse erreichbar ist. | + | |
- | ==== Portweiterleitung einrichten ==== | + | |
- | + | ||
- | Nun muss der Router Anfragen an den Pi auch korrekt an diesen durchstellen. Daher muss eine [[wpde> | + | |
- | + | ||
- | ((Internet)) -- [Router] -- [Pi] | + | |
- | Portweiterleitungen: | + | |
- | 80..........80 (http) | + | |
- | 443.........443 (https) | + | |
- | + | ||
- | // | + | |
- | ==== Fernzugriff über ssh ==== | + | |
- | + | ||
- | Um über das Internet auf den Pi zugreifen zu können, muss ein Port im Router auf Port 22 des Pi weitergeleitet werden. Auf Port 22 läuft der ssh-Dienst. Um es Angreifern schwerer zu machen, kann auch ein anderer hoher Port im Router (z.B. Port 50022) auf Port 22 am Pi weitergeleitet werden. | + | |
- | + | ||
- | ((Internet)) -- [Router] -- [Pi] | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | + | ||
- | Wenn alles korrekt eingerichtet wurde, sind der Webserver und der ssh-Dienst des Pi über über die URL erreichbar. | + | |
- | + | ||
- | ==== Tor hidden service ==== | + | |
- | + | ||
- | Der Webserver kann auch als [[https:// | + | |
- | ===== Backupskript programmieren ===== | + | |
- | < | + | |
- | <iframe width=" | + | |
- | </ | + | |
- | + | ||
- | Die Daten des Servers sollen nun regelmäßig mit Hilfe eines Bash-Skriptes in einem [[wpde> | + | |
- | + | ||
- | - Lies im Skript Kap. 4.1 " | + | |
- | - Wie sieht die erste Zeile in einem bash-Skript aus? Welche Bedeutung hat der Begriff " | + | |
- | - Welche Rechte benötigt ein bash-Skript, | + | |
- | - Was ist der Unterschied zwischen einfachen ('< | + | |
- | - Was steht in der Variablen '' | + | |
- | - Welche Ein- und Ausgabekanäle gibt es und was machen sie? | + | |
- | - Wie kann die Ausgabe eines Kommandos umgelenkt werden? | + | |
- | - Was ist eine " | + | |
- | - Erstelle ein Skript '' | + | |
- | - Erstelle ein Skript '' | + | |
- | - Lies Kapitel 7.2 über Datensicherungen im Skript und beantworte die folgenden Fragen. | + | |
- | - Welche Sicherungsarten gibt es? | + | |
- | - Warum ist ein Backup sinnvoll? Wogegen schützt es? | + | |
- | - Welche Daten bzw. Verzeichnisse sollen in die Sicherung des Servers aufgenommen werden? Erstelle eine Liste. | + | |
- | - Erstelle ein Skript '' | + | |
- | - Führe das Skript aus und prüfe, ob alle wichtigen Daten in dem Archiv gelandet sind. | + | |
- | - Entpacke das Archiv wieder und prüfe stichprobenartig, | + | |
- | - Erstelle einen Cronjob, der das Skript regelmäßig ausführt. Für welchen Zeitraum hast du dich entschieden und wie hast du ihn als Cronjob umgesetzt? | + | |
- | + | ||
- | ===== Backups auf einem externen Medium sichern ===== | + | |
- | + | ||
- | Derzeit landen die Backups noch auf dem [[Raspberry Pi]]. Nun wollen wir dafür sorgen, dass sie auch auf einem externen Medium gesichert werden. Dies können eine externe Festplatte, ein USB-Stick, eine Netzwerk-Freigabe sein oder auch Cloud-Dienst sein. | + | |
- | + | ||
- | - Warum ist es sinnvoll das Backup nicht auf dem Pi zu sichern, sondern auf einem externen Medium? | + | |
- | - Lies Kap. 5.2.2 im Skript. Was macht der Befehl [[https:// | + | |
- | - Richte eine Netzwerkfreigabe unter Windows ein. Der Windows-Benutzer muss dafür durch ein Passwort gesichert sein. | + | |
- | - Teste die Freigabe von einem anderen Rechner aus, indem du im Explorer die Adresse '' | + | |
- | - Erstelle einen Mountpoint (Einhängepunkt). An dieser Stelle wird die Netzwerkfreigabe später eingehängt. Wenn dir dies nicht gelinkt kannst du ''/ | + | |
- | - Nutze den '' | + | |
- | - Trage den Mountpoint in die Datei '' | + | |
- | - Prüfe, ob die Einbindung auch nach einem Neustart des Pi funktioniert. | + | |
- | - Passe dein Backupskript so an, dass die Backups fortan auf der eingebundenen Freigabe landen. \\ \\ | + | |
- | - Eine weitere Möglichkeit besteht darin, das Backup bei einem Cloud-Dienst wie z.B. //dropbox// oder // | + | |
- | + | ||
- | Falls du irgendwo nicht weiterkommst, | + | |
- | Die folgende Sitzung geht von einem Rechner mit dem Namen '' | + | |
- | <code bash> | + | |
- | ## Freigabe manuell einbinden | + | |
- | + | ||
- | bakera@ubu: | + | |
- | Password for IEUser@// | + | |
- | + | ||
- | ## Dateien in der Freigabe anlegen | + | |
- | + | ||
- | bakera@ubu: | + | |
- | bash: / | + | |
- | bakera@ubu: | + | |
- | drwxr-xr-x 2 root root 0 Mär 6 08:52 /mnt/ | + | |
- | + | ||
- | bakera@ubu: | + | |
- | bakera@ubu: | + | |
- | root@ubu:/ | + | |
- | root@ubu:/ | + | |
- | So 6. Mär 09:03:43 CET 2016 | + | |
- | root@ubu:/ | + | |
- | + | ||
- | bakera@ubu: | + | |
- | + | ||
- | ## fstab anpassen | + | |
- | + | ||
- | bakera@ubu: | + | |
- | bakera@ubu:/ | + | |
- | bakera@ubu:/ | + | |
- | # /etc/fstab: static file system information. | + | |
- | # | + | |
- | # Use ' | + | |
- | # device; this may be used with UUID= as a more robust way to name devices | + | |
- | # that works even if disks are added and removed. See fstab(5). | + | |
- | # | + | |
- | # <file system> <mount point> | + | |
- | # / was on /dev/sda1 during installation | + | |
- | UUID=02896ffe-fb0f-4c8e-b396-beaa13bf79f5 / | + | |
- | # swap was on /dev/sda5 during installation | + | |
- | UUID=1247dedb-72a5-4053-9042-43bdb7617db5 none swap sw 0 0 | + | |
- | // | + | |
- | + | ||
- | bakera@ubu:/ | + | |
- | error 2 (No such file or directory) opening credential file / | + | |
- | + | ||
- | ## Datei mit Zugangsdaten (englisch ' | + | |
- | + | ||
- | bakera@ubu:/ | + | |
- | bakera@ubu:/ | + | |
- | username=IEUser | + | |
- | password=Passw0rd! | + | |
- | + | ||
- | bakera@ubu:/ | + | |
- | -rw-r--r-- 1 root root 36 Mär 6 09:11 win_freigabe_cred.txt | + | |
- | bakera@ubu:/ | + | |
- | bakera@ubu:/ | + | |
- | -rw------- 1 root root 36 Mär 6 09:11 win_freigabe_cred.txt | + | |
- | bakera@ubu:/ | + | |
- | bakera@ubu:/ | + | |
- | -rw------- 1 bakera bakera 36 Mär 6 09:11 win_freigabe_cred.txt | + | |
- | + | ||
- | bakera@ubu:/ | + | |
- | bakera@ubu:/ | + | |
- | insgesamt 1 | + | |
- | -rwxr-xr-x 1 bakera bakera | + | |
- | -rwxr-xr-x 1 bakera bakera 29 Mär 6 09:03 datum.txt | + | |
- | bakera@ubu:/ | + | |
- | drwxr-xr-x 2 bakera bakera 0 Mär 6 09:03 /mnt/ | + | |
- | </ | + | |
- | + | ||
- | )) | + | |
- | + | ||
- | Weitere Möglichkeiten ergeben sich durch inkrementelle und differentielle Backups. Der Parameter '' | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== Systemüberwachung (Monitoring) ===== | + | |
- | {{ : | + | |
- | Unser Server | + | |
- | + | ||
- | Für die folgenden Aufgaben benötigt ihr die [[https:// | + | |
- | + | ||
- | - Lies den verlinkten Artikel und beschreibe in eigenen Worten, was die Dienste [[http:// | + | |
- | - Bearbeitet die folgenden Aufgaben zusammen in einer Gruppe aus 3 oder 4 Personen. \\ \\ **Munin** \\ | + | |
- | - Bestimmt einen Raspberry Pi als Munin-Master und die anderen Pis als Munin-Nodes. | + | |
- | - Richtet das Monitoring mit " | + | |
- | + | ||
- | Paketquellen aktualisieren und Webserver installieren. | + | |
- | # apt-get update && apt-get install apache2 && service apache2 start | + | |
- | + | ||
- | Das munin-node-Paket installieren und den Dienst starten. | + | |
- | # apt-get install munin-node && service munin-node start | + | |
- | + | ||
- | Testen, ob der node funktioniert. | + | |
- | # apt-get install telnet | + | |
- | # telnet localhost 4949 | + | |
- | + | ||
- | Nach der Verbindung mit telnet sollte der node auf die Befehle '' | + | |
- | + | ||
- | # apt-get install munin | + | |
- | # service apache2 restart | + | |
- | + | ||
- | Zugriff von außen zulassen. Dazu ' | + | |
- | + | ||
- | # nano / | + | |
- | # service apache2 restart | + | |
- | + | ||
- | 5 Minuten auf den nächsten Lauf des Cronjobs warten oder selbst anstoßen: | + | |
- | + | ||
- | # su - munin --shell=/ | + | |
- | + | ||
- | )) \\ Bei Problemen kann die Seite [[http:// | + | |
- | - Legt ein Monitoring mit " | + | |
- | - Wählt verschiedene Webseiten (unsere Klassenseite, | + | |
- | - Mit der Android-App [[https:// | + | |
- | - [[https:// | + | |
- | + | ||
- | + |
schule/raspberry_pi_als_server.1474483858.txt.gz · Zuletzt geändert: 2017-04-19 08:39 (Externe Bearbeitung)