30 KiB
Table of Contents
- 1. Einleitung
- 1.1 Ausgangssituation und Motivation
- 1.2 Zielsetzung der Diplomarbeit
- 1.3 Nutzen der Website für den Absolventenverein
- 2. Projektmanagement mit Scrum
- 2.1 Grundlagen der Scrum-Methode
- 2.2 Rollenverteilung im Projektteam
- 2.3 Sprintplanung und Umsetzung
- 2.4 Vorteile von Scrum für die Webentwicklung
- 3. Individuelle Themenstellung & Zielsetzung
- 3.1 Themenstellung
- - Entwicklung von einem CMS-Moduls:
- - Erstellung einer Datenschutzerklärung
- - LinkedIn Anmeldung
- - Datenbank Backup und Restore
- 3.2 Zielsetzung
- 4. Datenschutz und rechtliche Grundlagen
- 4.1 Bedeutung der Datenschutz-Grundverordnung (DSGVO)
- 4.2 Umsetzung der Datenschutzanforderungen auf der Website
- 4.3 Schutz personenbezogener Daten der Benutzer
- 5. Automatisierung von Serverprozessen
- 5.1 Notwendigkeit von Datensicherung
- 5.2 Konzeption des Backup-Systems
- 5.3 Implementierung der Backup-Skripte
- 5.4 Wiederherstellung von Daten mittels Restore-Skripten
- 5.5 Fazit zur Datensicherung
- 6. Benutzerverwaltung und Authentifizierung per LinkedIn
- 6.1 Authentifizierung mittels OAuth 2.0
- 6.2 Technische Umsetzung der LinkedIn-Anmeldung in Oqtane
- 6.3 Ablauf des Anmeldeprozesses
- 7. Implementierung des Premium-Bereichs
- 7.1 Ziel und Zweck des Premium-Bereichs
- 7.2 Funktionalität und Features des Premium-Bereichs
- 7.3 Zugriffsbeschränkung und Benutzerrechte
- 7.4 Mehrwert für registrierte Mitglieder
- 8. Technologien
- 10. Learnigs
- 10.1 Technische und fachliche Erkenntnisse
- 10.2 Agile Projektarbeit und Teamarbeit(Zeitmanagment)
- 10.3 Persönliche Weiterentwicklung
- 11. Fazit und Ausblick
- 11.1 Zusammenfassung der Arbeit
- 11.2 Mögliche Erweiterungen der Website
- 11.3 Zukunftspotenzial für den Absolventenverein
- 12. Quellenverzeichnis
1. Einleitung
1.1 Ausgangssituation und Motivation
1.2 Zielsetzung der Diplomarbeit
1.3 Nutzen der Website für den Absolventenverein
2. Projektmanagement mit Scrum
2.1 Grundlagen der Scrum-Methode
2.2 Rollenverteilung im Projektteam
2.3 Sprintplanung und Umsetzung
2.4 Vorteile von Scrum für die Webentwicklung
3. Individuelle Themenstellung & Zielsetzung
3.1 Themenstellung
- Entwicklung von einem CMS-Moduls:
- Premiumbereich: Ein Schwerpunkt der Arbeit ist die Entwicklung eines Oqtane-Moduls, das einen Premiumbereich bereitstellt. Dieser Bereich soll ausschließlich autorisierten Benutzerinnen und Benutzern zugänglich sein und spezielle Inhalte oder Funktionen anbieten wie zum Beispiel das hochladen und ansehen von Ingeneuranträgen als Vorlage oder das finden und Kontakt aufnehmen mit anderen Benutzern. Dabei werden grundlegende Konzepte wie Benutzerrollen, Zugriffsrechte und die Integration in das bestehende CMS eingebunden.
- Erstellung einer Datenschutzerklärung
Eine weitere wichtige Aufgabe war die Erstellung einer gesetzeskonformen Datenschutzerklärung. Diese ist erforderlich, um die Nutzerinnen und Nutzer unserer Webanwendung transparent und verständlich darüber zu informieren, welche personenbezogenen Daten erhoben, verarbeitet und gespeichert werden, zu welchem Zweck dies geschieht und welche Rechte ihnen in Bezug auf ihre Daten zustehen.
- LinkedIn Anmeldung
Zur Verbesserung der Benutzerfreundlichkeit und zur vereinfachten Anmeldung wird eine Anmeldung über LinkedIn mithilfe OAuths implementiert. Diese ermöglicht es Benutzerinnen und Benutzern, sich mit einem bestehenden LinkedIn-Konto zu registrieren oder anzumelden.
- Datenbank Backup und Restore
Abschließend wurde das Thema Datensicherung umfassend behandelt, da die Sicherstellung der Datenintegrität und Systemverfügbarkeit einen zentralen Bestandteil moderner Webanwendungen darstellt. In diesem Zusammenhang wurde ein Skript zur automatisierten Erstellung von Datenbank-Backups entwickelt, das in regelmäßigen Abständen Sicherungskopien der relevanten Daten erzeugt. Zusätzlich wurde ein weiteres Skript implementiert, das im Falle eines Datenverlusts oder Systemausfalls eine strukturierte und zuverlässige Wiederherstellung der gesicherten Daten ermöglicht.
Ziel dieser Maßnahmen ist es, das Risiko von Datenverlusten zu minimieren und einen stabilen sowie sicheren Betrieb der Webanwendung zu gewährleisten. Die Backup- und Restore-Prozesse sollen automatisiert ablaufen, um menschliche Fehler zu reduzieren und eine kontinuierliche, regelmäßige Datensicherung sicherzustellen. Dadurch wird eine hohe Ausfallsicherheit sowie die langfristige Verfügbarkeit der gespeicherten Informationen gewährleistet.
3.2 Zielsetzung
- Technische Zielsetzung
- Funktionale Zielsetzung
- Gestalterische Zielsetzung
4. Datenschutz und rechtliche Grundlagen
4.1 Bedeutung der Datenschutz-Grundverordnung (DSGVO) 1
Die Datenschutz-Grundverordnung (DSGVO) ist eine rechtsverbindliche Verordnung der Europäischen Union, die seit dem 25. Mai 2018 unmittelbar in allen EU-Mitgliedstaaten gilt und den Schutz personenbezogener Daten regelt. Sie wurde erlassen, um die Rechte natürlicher Personen bei der Verarbeitung ihrer Daten zu stärken und ein einheitliches Datenschutzniveau innerhalb der EU zu gewährleisten.
Der Anwendungsbereich der DSGVO umfasst alle Verarbeitungen personenbezogener Daten, unabhängig davon, ob diese automatisiert oder in nicht-automatisierten Akten erfolgt. Personenbezogene Daten sind dabei definiert als alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen.
Die DSGVO verfolgt mehrere grundsätzliche Ziele:
Schutz der Grundrechte natürlicher Personen bei der Verarbeitung ihrer personenbezogenen Daten sowie die Gewährleistung ihrer Grundfreiheiten.
Einheitlicher Datenschutz in der EU, sodass sowohl Unternehmen innerhalb als auch außerhalb der EU, die Daten von EU-Bürgern verarbeiten, denselben Regeln unterliegen.
Schaffung klarer Pflichten für Datenverantwortliche und -verarbeiter zur rechtskonformen Datenverarbeitung.
Die DSGVO enthält dabei zentral die Grundsätze der Datenverarbeitung (§ 5 DSGVO), die sicherstellen, dass personenbezogene Daten nur rechtmäßig, zweckgebunden und in transparentem Umfang verarbeitet werden. Dazu gehören unter anderem:
Rechtmäßigkeit, Fairness und Transparenz der Verarbeitung
Zweckbindung der Datenerhebung
Datenminimierung und Speicherbegrenzung
Integrität und Vertraulichkeit der Datenverarbeitung
Die Einhaltung dieser Prinzipien ist für jede Organisation verpflichtend, die personenbezogene Daten verarbeitet – unabhängig von ihrer Größe oder Branche. Dies umfasst sowohl technische Aspekte der Datenverarbeitung als auch die Informationspflichten gegenüber Betroffenen, wie sie etwa in Datenschutzerklärungen umgesetzt werden müssen.
4.2 Umsetzung der Datenschutzanforderungen auf der Website 2
Im Rahmen der Diplomarbeit wurde eine umfassende Analyse der Datenschutzanforderungen durchgeführt und entsprechende Maßnahmen zur Umsetzung auf der Website implementiert. Dabei wurden insbesondere die Vorgaben der DSGVO berücksichtigt, um sicherzustellen, dass die Website den geltenden Datenschutzbestimmungen entspricht.
Ein zentrales Element der Umsetzung war die Erstellung einer gesetzeskonformen Datenschutzerklärung. Diese informiert die Nutzerinnen und Nutzer über: die Art der verarbeiteten personenbezogenen Daten,
den Zweck der Datenverarbeitung,
die Rechtsgrundlagen der Verarbeitung,
die Speicherdauer der Daten,
die Weitergabe von Daten an Dritte
sowie über die Rechte der Betroffenen gemäß Art. 15–22 DSGVO. Die Datenschutzerklärung wird auf der Website gut sichtbar eingebunden und ist für alle Nutzerinnen und Nutzer jederzeit zugänglich. Neben der Informationspflicht wurden auch technische und organisatorische Maßnahmen umgesetzt, um die Sicherheit der verarbeiteten Daten zu gewährleisten. Dazu gehören unter anderem:
Verschlüsselte Übertragung von Daten mittels HTTPS
Passwortgeschützter Zugriff auf sensible Daten
Regelmäßige Sicherheitsupdates der eingesetzten Software
Minimierung der Datenerhebung auf das Notwendige: Es werden nur die Daten erhoben, die für die Funktion der Website unbedingt erforderlich sind.(Grundprinzip der Datenminimierung nach Art. 5 Abs. 1 lit. c DSGVO)
4.3 Schutz personenbezogener Daten der Benutzer 3
Der Schutz personenbezogener Daten der Benutzer stellt einen zentralen Bestandteil der Website des Absolventenvereins dar. Sämtliche Datenverarbeitungen erfolgen unter Berücksichtigung der Vorgaben der Datenschutz-Grundverordnung (DSGVO) sowie des österreichischen Datenschutzgesetzes (DSG).
Gemäß Art. 5 Abs. 1 lit. c DSGVO gilt der Grundsatz der Datenminimierung, wonach nur jene personenbezogenen Daten erhoben werden dürfen, die für den jeweiligen Zweck erforderlich sind. Auf der Website werden daher ausschließlich solche Daten verarbeitet, die für die Verwaltung der Mitgliedschaft, die Organisation von Veranstaltungen sowie die Kommunikation mit Absolventinnen und Absolventen notwendig sind.
Darüber hinaus wird der Grundsatz der Zweckbindung gemäß Art. 5 Abs. 1 lit. b DSGVO eingehalten. Die erhobenen Daten werden ausschließlich für die in der Datenschutzerklärung definierten Zwecke verarbeitet, insbesondere zur Organisation der Vereinstätigkeit und zur Durchführung von Absolvententreffen.
Eine darüberhinausgehende Weitergabe an Dritte erfolgt grundsätzlich nicht, außer wenn dies zur Erfüllung der Vereinszwecke erforderlich ist oder eine gesetzliche Verpflichtung besteht.
Zur Gewährleistung der Integrität und Vertraulichkeit gemäß Art. 5 Abs. 1 lit. f DSGVO werden geeignete technische und organisatorische Maßnahmen eingesetzt. Dazu zählen insbesondere der Betrieb der Website auf einem Server innerhalb Österreichs, der Abschluss von Auftragsverarbeitungsverträgen gemäß Art. 28 DSGVO mit externen Dienstleistern sowie Maßnahmen zum Schutz vor unbefugtem Zugriff, Verlust oder Missbrauch von Daten.
Zusätzlich werden die Betroffenenrechte gemäß Art. 15–22 DSGVO ausdrücklich gewährleistet. Benutzerinnen und Benutzer haben das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung, Datenübertragbarkeit sowie Widerspruch gegen die Verarbeitung.
Darüber hinaus besteht das Recht, sich bei der österreichischen Datenschutzbehörde zu beschweren, sofern eine rechtswidrige Verarbeitung vermutet wird.
Durch die Kombination aus klar definierten Rechtsgrundlagen, transparenten Informationspflichten und technischen Schutzmaßnahmen wird ein hohes Datenschutzniveau gewährleistet und der verantwortungsvolle Umgang mit personenbezogenen Daten sichergestellt.
5. Automatisierung von Serverprozessen
5.1 Notwendigkeit von Datensicherung 4 5
Die Datensicherung ist ein wesentlicher Bestandteil der Website des Absolventenvereins. Sie dient dazu, die auf der Website gespeicherten Daten vor Verlust oder Beschädigung zu schützen.Digitale Daten bilden die Grundlage für die Funktion der Website und müssen daher regelmäßig gesichert werden. Ein Verlust oder eine Beschädigung der Daten kann zu erheblichen Problemen führen.
Mögliche Ursachen für einen Datenverlust sind unter anderem Hardwaredefekte, Softwarefehler, menschliches Versagen oder Cyberangriffe.Ohne geeignete Sicherheitsmaßnahmen besteht das Risiko, dass Daten unwiederruflich verloren gehen oder nur mit erheblichen Kosten wiederhergestellt werden können.
Neben der technischen besteht ebennfalls eine rechtliche und organisatorische Notwendigkeit der Datensicherung. Gemäß Art. 5 Abs. 1 lit. f DSGVO müssen personenbezogene Daten gesichert werden, um die Integrität und Vertraulichkeit der Daten zu gewährleisten. Dazu zählt auch der Schutz vor unbeabsichtigtem Verlust. Eine Backup-Sicherung ist daher ein notwendiger Schritt, um die Daten vor Verlust zu schützen.
5.2 Konzeption des Backup-Systems
Ziel des Backu-Systems war es im Falle eines DAtenverlustes oder eines Systemausfalls die Daten wiederherstellen zu können. Es wurde eine Startegie enwickelt die es ermöglicht sowohl die Datenbank als auch die Dateien auf dem Server zu sichern. Der Umfang des Backups besteht aus zwei zentralen Komponenten:
-
Die Postgres Datenbank
-
Der Ordner "oqtane.server" auf dem Server
Damit wird eine vollständige Sicherung der Website ermöglicht, da bei einer reinen Datenbanksicherung wichtige Anwendungsdatein fehlen würden
Alle Backups werden lokal auf dem Server gespeichert. Diese Backups sind alle zu finden unter: /var/backups Für jedes Backup wird in diesem Verzeichnis ein Unterordner erstellt,dessen Name einen UTC-Zeitstempel enthält.Das ermöglicht eine saubere Trennung der Sicherungsstände und einfache chronologische Zuordnung.
TS="$(date -u +'%Y%m%dT%H%M%SZ')" DEST_DIR="${BACKUP_ROOT}/${TS}"
date -u erzeugt einen Zeitstempel in UTC, wodurch die Bennenung unabhängig von Zeitzonen eindeutig bleibt. Der Zeitstempel wird als Ordnername verwendet, sodass jedes Backup separat abgelegt wird (z. B. 20260226T023000Z).
Die Sicherung der PostgreSQL-Datenbank erfolgt mithilfe des Programms pg_dump, welches ein vollständiges Abbild der Datenbank erzeugt:
pg_dump -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" -Fc
-f "${DEST_DIR}/db_${PGDATABASE}.dump"
Hierbei werden Host, Port, Benutzer und Datenbankname über Variablen definiert, wodurch das Skript flexibel einsetzbar bleibt. Der Parameter -Fc erstellt das Backup im sogenannten Custom-Format. Dieses Format bietet den Vorteil, dass beim Wiederherstellen einzelne Tabellen oder Datenbankobjekte selektiv importiert werden können. Zudem ist es komprimiert und effizienter als ein reines SQL-Textdump. Die Ausgabe wird direkt in eine Datei im zuvor erstellten Backup-Ordner geschrieben. Die Authentifizierung erfolgt über eine .pgpass-Datei, wodurch das Backup automatisiert und ohne manuelle Passworteingabe ausgeführt werden kann.
Neben der Datenbank wird auch der gesamte Anwendungsordner gesichert. Dies geschieht mithilfe des tar-Programms, das Dateien zu einem komprimierten Archiv zusammenfasst:
tar -cvpzf "${DEST_DIR}/oqtane_files.tar.gz"
--absolute-names "$OQTANE_DIR"
Das Programm tar steht für Tape Archive und wurde ursprünglich entwickelt, um mehrere Dateien auf Magnetbändern zu sichern. Heute wird es unter Linux und Unix-Systemen verwendet, um mehrere Dateien und Verzeichnisse zu einem einzigen Archiv zusammenzufassen. Dabei kann das Archiv optional komprimiert werden.
Der Parameter -c erstellt ein neues Archiv, -v gibt die verarbeiteten Dateien aus, -p erhält die ursprünglichen Dateiberechtigungen und -z aktiviert die gzip-Komprimierung. Die Komprimierung reduziert den Speicherbedarf der Sicherung erheblich. Besonders relevant ist die Option --absolute-names, da dadurch die vollständigen Pfadangaben im Archiv gespeichert werden. Dies erleichtert eine spätere exakte Wiederherstellung der ursprünglichen Verzeichnisstruktur. Durch die Kombination aus Datenbank-Dump und komprimiertem Dateisystem-Archiv entsteht ein vollständiges Vollbackup des Systems.
Ein Cronjob ist eine zeitgesteuerte Aufgabe unter Linux-Systemen, die automatisch zu einem festgelegten Zeitpunkt ausgeführt wird. Er basiert auf dem Hintergrunddienst cron, der regelmäßig überprüft, ob geplante Befehle gestartet werden müssen.
Im vorliegenden Projekt wird ein Cronjob verwendet, um das Backup-Skript täglich automatisiert auszuführen. Der entsprechende Eintrag lautet:
30 2 * * * /home/florian/backup-script.sh >> /home/florian/backup.log 2>&1
Die ersten fünf Felder definieren den Ausführungszeitpunkt. In diesem Fall bedeutet die Konfiguration, dass das Skript täglich um 02:30 Uhr gestartet wird. Die nächtliche Ausführung reduziert die Systembelastung während der regulären Nutzung.
Der hintere Teil des Befehls (>> /home/florian/backup.log 2>&1) sorgt dafür, dass sowohl normale Ausgaben als auch Fehlermeldungen in einer Logdatei gespeichert werden. Dadurch kann überprüft werden, ob das Backup erfolgreich durchgeführt wurde.
Durch den Einsatz eines Cronjobs wird eine regelmäßige und zuverlässige Datensicherung ohne manuelles Eingreifen gewährleistet.
Ein weiterer Bestandteil des Backup-Systems ist ein automatischer Mechanismus zur Verwaltung alter Sicherungen. Da Backups langfristig Speicherplatz beanspruchen können, wurde eine Funktion implementiert, die nur eine definierte Anzahl an Sicherungen beibehält. In der Konfiguration des Skripts wird festgelegt, dass maximal 30 Backups gespeichert werden.
RETAIN=30
Während der Ausführung überprüft das Skript, wie viele Backup-Ordner im Backup-Verzeichnis vorhanden sind. Die Ordner werden anhand ihres Zeitstempels sortiert, wodurch die chronologische Reihenfolge der Sicherungen eindeutig bestimmt werden kann. Sollte die Anzahl der vorhandenen Backups den definierten Wert überschreiten, werden automatisch die ältesten Sicherungen gelöscht.
if (( ${#backups[@]} > RETAIN )); then for old in "${backups[@]:RETAIN}"; do rm -rf -- "$old" done fi
Durch diesen Rotationsmechanismus wird verhindert, dass sich im Laufe der Zeit eine unbegrenzte Anzahl von Backups ansammelt und dadurch der verfügbare Speicherplatz auf dem Server erschöpft wird. Gleichzeitig bleibt eine ausreichende Anzahl an Sicherungsständen erhalten, um im Fehlerfall auf frühere Systemzustände zurückgreifen zu können.
Die gewählte Anzahl von 30 Sicherungen ermöglicht es, bei täglicher Ausführung des Backup-Skripts ungefähr einen Monat an Wiederherstellungspunkten vorzuhalten. Dadurch wird ein sinnvoller Kompromiss zwischen Datensicherheit und effizienter Speicherverwaltung erreicht.
5.3 Implementierung der Backup-Skripte
Die Implementierung des Backup-Systems erfolgte mittels eines Bash-Skripts, das auf dem Linux-Server ausgeführt wird. Bash eignet sich besonders für administrative Aufgaben, da sie direkten Zugriff auf Systembefehle, Dateien und Prozesse bietet. Das Skript wurde so aufgebaut, dass es robust, automatisierbar und nachvollziehbar arbeitet.
Zu Beginn des Skripts wird folgende Konfiguration gesetzt:
#!/usr/bin/env bash set -euo pipefail
Die erste Zeile definiert den Interpreter, mit dem das Skript ausgeführt wird. Dadurch wird sichergestellt, dass unabhängig von der Systemkonfiguration die korrekte Bash-Version verwendet wird.
Die Anweisung set -euo pipefail erhöht die Sicherheit und Stabilität des Skripts:
-e beendet das Skript sofort, wenn ein Befehl fehlschlägt
-u verhindert die Verwendung nicht definierter Variablen
-o pipefail sorgt dafür, dass auch Fehler innerhalb von Befehls-Pipelines erkannt werden
Diese Einstellungen verhindern, dass das Backup bei Fehlern unbemerkt unvollständig ausgeführt wird.
Im nächsten Schritt werden zentrale Konfigurationsvariablen definiert:
BACKUP_ROOT="/var/backups/fullserver" RETAIN=30
PGHOST="localhost" PGPORT="5432" PGUSER="florian" PGDATABASE="oqtane"
Durch die Verwendung von Variablen bleibt das Skript flexibel und wartbar. Änderungen, beispielsweise am Speicherort oder an der Datenbank, können an einer zentralen Stelle vorgenommen werden, ohne den restlichen Code anzupassen.
Die Sicherung der PostgreSQL-Datenbank erfolgt mittels pg_dump im Custom-Format. Dieses Format ist besonders geeignet, da es eine flexible Wiederherstellung ermöglicht. Die Ausgabe wird direkt in den jeweiligen Backup-Ordner geschrieben. Die Authentifizierung erfolgt über eine .pgpass-Datei, wodurch das Backup ohne interaktive Passworteingabe automatisiert durchgeführt werden kann.
Anschließend wird der gesamte Anwendungsordner mit tar archiviert und komprimiert. Dabei werden Dateirechte und Verzeichnisstrukturen vollständig erhalten. Dies ist insbesondere bei Webanwendungen wichtig, da falsche Berechtigungen nach einer Wiederherstellung zu Funktionsstörungen führen könnten.
Ein weiterer wichtiger Bestandteil der Implementierung ist das integrierte Rotationsprinzip. Das Skript überprüft automatisch, wie viele Backup-Ordner vorhanden sind. Falls die definierte Grenze von 30 Sicherungen überschritten wird, werden die ältesten Backups gelöscht. Dadurch wird verhindert, dass der verfügbare Speicherplatz durch alte Sicherungen dauerhaft belegt wird. Die Sortierung erfolgt anhand der Zeitstempel im Ordnernamen, wodurch die chronologische Reihenfolge eindeutig bestimmbar ist.
Zusätzlich gibt das Skript Statusmeldungen mit Zeitangaben aus:
echo "[$(date -Iseconds)] Backup-Job abgeschlossen."
Diese Meldungen werden bei automatischer Ausführung über den Cronjob in eine Logdatei geschrieben. Dadurch kann jederzeit überprüft werden, ob das Backup erfolgreich abgeschlossen wurde oder ob Fehler aufgetreten sind.
Die Implementierung zeichnet sich durch folgende Eigenschaften aus:
vollständige Sicherung von Datenbank und Anwendungsdateien
automatische tägliche Ausführung
integrierte Fehlerbehandlung
strukturierte Archivierung mit Zeitstempel
automatische Speicherverwaltung durch Rotationsmechanismus
Durch diese Umsetzung wurde ein zuverlässiges und wartbares Backup-System geschaffen, das den kontinuierlichen Betrieb der Webanwendung unterstützt und im Fehlerfall eine schnelle Wiederherstellung ermöglicht.
5.4 Wiederherstellung von Daten mittels Restore-Skripten
Neben der Datensicherung stellt die strukturierte Wiederherstellung der Daten einen zentralen Bestandteil des Backup-Systems dar. Zu diesem Zweck wurde ein eigenes Bash-Skript implementiert, das sowohl die PostgreSQL-Datenbank als auch die Anwendungsdateien aus einem gewählten Backup-Ordner wiederherstellt
Resolve-Skript
. Ziel war es, einen klar definierten und kontrollierten Prozess zu schaffen, der im Fehlerfall eine vollständige Rücksetzung des Systems ermöglicht.
Das Skript beginnt – analog zum Backup-Skript – mit einer sicheren Ausführungskonfiguration:
#!/usr/bin/env bash set -euo pipefail
Auch hier sorgt set -euo pipefail dafür, dass das Skript bei Fehlern sofort abbricht, keine undefinierten Variablen verwendet werden und Fehler innerhalb von Befehls-Pipelines korrekt erkannt werden. Dadurch wird verhindert, dass ein unvollständiger oder fehlerhafter Restore durchgeführt wird.
Zu Beginn wird festgelegt, welcher Backup-Ordner verwendet werden soll. Wird beim Start ein Argument übergeben, wird dieses als Backup-Verzeichnis interpretiert. Andernfalls wird automatisch das neueste Backup ausgewählt:
if $# -ge 1 ; then BACKUP_SUBDIR="$1" else BACKUP_SUBDIR="$(ls -1 "${BACKUP_ROOT}" | sort | tail -n 1)" fi
Diese Logik ermöglicht eine flexible Nutzung des Skripts. Administratoren können gezielt einen bestimmten Sicherungsstand auswählen oder standardmäßig den aktuellsten verwenden.
Vor Beginn der Wiederherstellung erfolgt eine deutliche Sicherheitswarnung:
read -rp "Fortfahren? (ja/nein): " answer if ; then exit 0 fi
Diese Abfrage dient als Schutzmechanismus, da der Restore-Prozess bestehende Daten überschreibt. Erst nach expliziter Bestätigung wird die Wiederherstellung gestartet.
Die Wiederherstellung der PostgreSQL-Datenbank erfolgt in mehreren Schritten. Zunächst wird – falls vorhanden – die bestehende Datenbank gelöscht:
dropdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE"
Anschließend wird eine neue, leere Datenbank erstellt:
createdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE"
Danach wird der zuvor gesicherte Dump eingespielt:
pg_restore -h "$PGHOST" -p "$PGPORT" -U "$PGUSER"
-d "$PGDATABASE" -c "$DUMP_FILE"
Das Programm pg_restore liest das im Custom-Format gespeicherte Backup ein und stellt sämtliche Tabellen, Indizes und Datenbankobjekte wieder her. Die Option -c sorgt dafür, dass bestehende Objekte vor dem Import entfernt werden, wodurch Konflikte vermieden werden.
Neben der Datenbank wird auch der Anwendungsordner wiederhergestellt. Bevor die neuen Dateien entpackt werden, wird der aktuell vorhandene Ordner zur Sicherheit umbenannt:
mv "$OQTANE_DIR" "${OQTANE_DIR}.old.$(date +%s)"
Diese Maßnahme verhindert einen vollständigen Datenverlust, falls beim Restore ein Problem auftreten sollte. Anschließend wird das Archiv entpackt:
tar -xvpzf "$FILES_ARCHIVE"
Der Parameter -x extrahiert das Archiv, -p stellt die ursprünglichen Dateiberechtigungen wieder her und -z dekomprimiert das gzip-Archiv. Dadurch wird die komplette Ordnerstruktur in ihrem ursprünglichen Zustand wiederhergestellt.
Zusammenfassend ermöglicht das Restore-Skript eine vollständige Rücksetzung der Webanwendung auf einen definierten Sicherungsstand. Durch die Kombination aus Sicherheitsabfrage, kontrollierter Datenbank-Neuerstellung und strukturiertem Dateirestore wird ein zuverlässiger und nachvollziehbarer Wiederherstellungsprozess gewährleistet. Das System ergänzt somit das Backup-Konzept um eine praxisnahe und technisch saubere Lösung für den Ernstfall.
5.5 Fazit zur Datensicherung
Durch die Implementierung eines automatisierten Backup- und Restore-Systems wurde eine zuverlässige Grundlage für die Datensicherheit der Webanwendung geschaffen. Das entwickelte System ermöglicht eine regelmäßige Sicherung sowohl der PostgreSQL-Datenbank als auch der vollständigen Anwendungsdateien. Durch die automatisierte Ausführung mittels Cronjob wird sichergestellt, dass die Backups ohne manuelles Eingreifen täglich erstellt werden.
Zusätzlich sorgt das integrierte Rotationsprinzip dafür, dass ältere Sicherungen automatisch entfernt werden und der verfügbare Speicherplatz effizient genutzt wird. Die strukturierte Ablage der Backups mit Zeitstempeln erleichtert die Auswahl eines bestimmten Sicherungsstandes.
Neben der Datensicherung wurde auch ein Restore-Skript implementiert, das eine vollständige Wiederherstellung des Systems ermöglicht. Dabei werden sowohl die Datenbank als auch die Anwendungsdateien aus einem ausgewählten Backup wiederhergestellt. Sicherheitsmechanismen wie Bestätigungsabfragen und das temporäre Umbenennen bestehender Daten reduzieren das Risiko von Datenverlust während des Wiederherstellungsprozesses.
Insgesamt stellt das entwickelte Backup-System eine robuste und praxisnahe Lösung dar, die den sicheren Betrieb der Webanwendung unterstützt und im Fehlerfall eine schnelle Wiederherstellung der Daten ermöglicht.
6. Benutzerverwaltung und Authentifizierung per LinkedIn
6.1 Authentifizierung mittels OAuth 2.0
Zur Anmeldung auf der entwickelten Webplattform wurde eine Authentifizierung über das Business-Netzwerk LinkedIn implementiert. Dabei kommt das standardisierte Autorisierungsprotokoll OAuth 2.0 zum Einsatz. Dieses Verfahren ermöglicht es, Benutzer über externe Identitätsanbieter zu authentifizieren, ohne dass deren Zugangsdaten direkt an die Webanwendung übertragen werden müssen.
OAuth 2.0 basiert auf dem Prinzip der delegierten Autorisierung. Dabei erlaubt ein Benutzer einer Anwendung, bestimmte Informationen seines Kontos bei einem externen Dienst zu verwenden. Die eigentlichen Zugangsdaten – beispielsweise das LinkedIn-Passwort – verbleiben dabei ausschließlich beim Identitätsanbieter.
Der grundlegende Ablauf einer OAuth-Authentifizierung ist in Abbildung X dargestellt. Dabei wird der Benutzer zunächst zur Login-Seite des externen Anbieters weitergeleitet. Nach erfolgreicher Anmeldung bestätigt der Benutzer, dass die Anwendung Zugriff auf bestimmte Profildaten erhalten darf.
Erstellt von ChatGbt
Die Abbildung zeigt den Ablauf der OAuth-Authentifizierung. Zunächst erfolgt die Weiterleitung zur LinkedIn-Anmeldeseite, anschließend wird ein Autorisierungscode an die Webanwendung zurückgegeben, welcher gegen einen Zugriffstoken ausgetauscht wird.
Nach der Autorisierung sendet LinkedIn einen sogenannten Authorization Code an die Webanwendung zurück. Dieser Code wird anschließend vom Server der Anwendung gegen einen Access Token ausgetauscht. Mit Hilfe dieses Tokens kann die Webanwendung anschließend die freigegebenen Benutzerdaten vom LinkedIn-Server abrufen.
Der Vorteil dieses Verfahrens liegt darin, dass die Webanwendung zu keinem Zeitpunkt Zugriff auf das Passwort des Benutzers erhält. Dadurch wird ein höheres Sicherheitsniveau erreicht und gleichzeitig die Benutzerfreundlichkeit verbessert, da sich Benutzer mit ihrem bestehenden LinkedIn-Konto anmelden können.
6.2 Technische Umsetzung der LinkedIn-Anmeldung in Oqtane
Die technische Umsetzung der LinkedIn-Authentifizierung erfolgte über das integrierte External Login System des Content-Management-Systems Oqtane. Dieses System ermöglicht die Integration externer Identitätsanbieter über standardisierte Protokolle wie OAuth 2.0.
Für die Verbindung mit LinkedIn wurde zunächst eine Entwickleranwendung im LinkedIn Developer Portal erstellt. Dabei werden zwei zentrale Zugangsdaten generiert:
Client ID
Client Secret
Diese dienen zur Identifikation der Webanwendung gegenüber den LinkedIn-Servern.
Innerhalb der Oqtane-Konfiguration wurde anschließend ein neuer OAuth-Provider eingerichtet. Dabei mussten mehrere Parameter definiert werden, darunter die Autorisierungs- und Token-Endpunkte von LinkedIn.
Beispielsweise wird für die Benutzerautorisierung folgende Adresse verwendet:
https://www.linkedin.com/oauth/v2/authorization
Nach erfolgreicher Anmeldung stellt LinkedIn über folgenden Endpunkt ein Zugriffstoken bereit:
https://www.linkedin.com/oauth/v2/accessToken
Zusätzlich wurde eine sogenannte Redirect URL definiert. Diese URL wird von LinkedIn verwendet, um den Benutzer nach erfolgreicher Authentifizierung wieder zurück zur Webanwendung zu leiten.
In der Konfiguration wurde außerdem festgelegt, welche Benutzerdaten von LinkedIn übernommen werden sollen. Dazu gehören unter anderem:
Benutzername
E-Mail-Adresse
eindeutige Benutzer-ID
Diese Daten werden von Oqtane als sogenannte Claims verarbeitet und anschließend dem Benutzerkonto der Plattform zugeordnet.
Darüber hinaus wurde in den Einstellungen aktiviert, dass bei der ersten Anmeldung automatisch ein neues Benutzerkonto erstellt werden kann. Dadurch können sich neue Nutzer direkt über ihr LinkedIn-Konto registrieren.
6.3 Ablauf des Anmeldeprozesses
Der eigentliche Anmeldevorgang erfolgt in mehreren aufeinanderfolgenden Schritten. Zunächst wählt der Benutzer auf der Login-Seite der Webplattform die Option zur Anmeldung über LinkedIn aus.
Daraufhin wird der Benutzer zur LinkedIn-Authentifizierungsseite weitergeleitet. Dort meldet sich der Benutzer mit seinem LinkedIn-Konto an und bestätigt die Autorisierung der Anwendung.
Nach erfolgreicher Authentifizierung sendet LinkedIn eine Antwort an die zuvor definierte Redirect-URL der Webanwendung. Diese Antwort enthält einen Autorisierungscode, der anschließend vom Server der Webanwendung gegen einen Access Token ausgetauscht wird.
Mit Hilfe dieses Tokens kann die Anwendung anschließend die freigegebenen Benutzerdaten vom LinkedIn-Server abrufen. Diese Daten werden verwendet, um den Benutzer in der lokalen Datenbank zu identifizieren oder ein neues Benutzerkonto zu erstellen.
7. Implementierung des Premium-Bereichs
7.1 Ziel und Zweck des Premium-Bereichs
7.2 Funktionalität und Features des Premium-Bereichs
7.3 Zugriffsbeschränkung und Benutzerrechte
7.4 Mehrwert für registrierte Mitglieder
8. Technologien
8.1 ASP.NET und .NET
8.2 Postgres Datenbank
8.3 LinkedIn OAuth 2.0
10. Learnigs
10.1 Technische und fachliche Erkenntnisse
10.2 Agile Projektarbeit und Teamarbeit(Zeitmanagment)
10.3 Persönliche Weiterentwicklung
11. Fazit und Ausblick
11.1 Zusammenfassung der Arbeit
11.2 Mögliche Erweiterungen der Website
11.3 Zukunftspotenzial für den Absolventenverein
12. Quellenverzeichnis
-
DSGVO – Datenschutz-Grundverordnung: https://eur-lex.europa.eu/eli/reg/2016/679/ ↩︎
-
RIS – Rechtsinformationssystem des Bundes: https://www.ris.bka.gv.at/ ↩︎
-
DSB – Österreichische Datenschutzbehörde: https://dsb.gv.at/ ↩︎
-
Datensicherung und Datenverlust: https://www.bsi.bund.de/DE/Themen/Verbraucherinnen-und-Verbraucher/Informationen-und-Empfehlungen/Cyber-Sicherheitsempfehlungen/Daten-sichern-verschluesseln-und-loeschen/Datensicherung-und-Datenverlust/Datensicherung-wie-geht-das/datensicherung-wie-geht-das_node.html ↩︎
-
ChatGPT Notwendigkeit der Datensicherung: https://chatgpt.com/c/69a06632-e4fc-8384-bd6c-a543d7bbd00d ↩︎