diff --git a/exerices/sheet00/exercise-00.md b/exerices/sheet00/exercise-00.md new file mode 100644 index 0000000..de75d28 --- /dev/null +++ b/exerices/sheet00/exercise-00.md @@ -0,0 +1,137 @@ +--- +author: Petar Cubela +date: Thu Sep 18 2025 +email: mail@petarcubela.de +title: Aufgabenblatt 00 - ssh Security und fail2ban (v1.1) +geometry: margin=2cm +output: pdf_document +--- + +# Aufgabenblatt 00 + +In diesem Blatt lernst du wichtige Grundlagen, um die Sicherheit eines Linux Servers zu gewaehrleisten. + +`ssh` (_secure shell_) ist eines der wichtigsten Tools die ein Linux Administrator beherrschen sollte. +Dieses erlaubt es uns, eine Shell zu einem remote Linux (im allgemeinen Unix) System zu oeffnen, +um dann administrative Taetigkeiten am Server durch zu fuehren. +Die Authentifizierung passiert hier in der Regel mit Username und Passwort. +Es gibt aber Situationen in denen es nicht ratsam ist, Usernamen und Passwort fuer die Authentifizierung zu nutzen. +Zum Besipiel, wenn der `ssh` Port, 22, oeffentlich zuegaenglich ist, und damit jeder den _OpenSSH_ Server des Linux Servers erreichen koennte. +Ein Passwort koennte durch eine brute-force Attacke erraten werden oder durch andere Wege komprimittiert werden. +Aus dem Grunde gibt es `ssh` Key Paare, welche es uns ermoeglichen uns ohne Passwort am Server zu authentifizieren. + +Einer der keys ist hier ein **privater** Schluessel, den niemand haben sollte und der immer sicher aufbewahrt werden sollte. +Der zweite key ist **public** und darf somit von anderen gesehen/gelesen werden. Der public Key wird am Linux Server +in der Datei `/home/$USER/.ssh/authorized_keys` abgelegt, waehrend der private Key am eigenen Rechner hinterlegt wird, +ebenfalls im Ordner `/home/$USER/.ssh/`. Beim Versuch sich mittels `ssh` am Ziel Server anzumelden, gleicht der Server seinen public +Key mit dem private Key des `ssh`-Clients ab und wenn die beiden zu einander passen, wird Zugang gewaehrt. + +Wir lernen, wie wir ssh key Paare erzeugen und am Ziel Server zu hinterlegen, welche es uns erlauben, uns ohne Passwort an einem OpenSSH server zu authentifizieren. +Dies wird in Zukunft auch sehr nuetzlich sein, um Automatisierungstools gegen einen oder _mehrere_ Server laufen zu lassen. + +Zusaetzlich lernen wir `fail2ban`, welches ein einfaches _intrusion detection system(IPS)_ ist, welches in der Lage ist Ports zu Diensten auf dem Server zu ueberwachen +und bei missbraeulichem Verhalten IP Addressen zu blocken. Zum Beispiel kann eine IP Adresse fuer eine Stunde geblockt werden, wenn der entsprechende `ssh`-Client drei mal das Passwort falsch eingibt. + +Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert. + +## Aufgabe 1 - ssh security and config + +**a.** Erstelle ein `ssh` Key Paar auf deinem lokalen Rechner, lege den public key auf deinem remote Linux Server ab +und melde dich ohne Passwort mit `ssh` am Server an. `ssh USER@EXAMPLE.COM`. + +Tools, welche gentuzt werden sollen: + +- `ssh` +- `ssh-keygen` (wenn dieser Befehl benutzt wird, setze keien Passwort fuer das Key Paar, sonst musst ihr Dieses jedes mal eingeben, wenn die Keys genutzt werden) +- `ssh-copy-id` + +**b.** Passe die Konfiguration des _ssh daemons_ `sshd`, unter dem Pfad `/etc/ssh/sshd_config`, so an, dass + +- eine `root` Anmeldung nicht moeglich ist. (Der `root` User hat uneingeschraenkte Berechtigungen auf dem Server. Dieser sollte ueber `ssh` nie erreichbar sein.) +- die Passwort Authentifizierung nicht moeglich ist, +- und deiner Meinung nach die Sicherheit des `ssh`-Zugangs weiter erhoeht wird. + +Nachdem der `ssh`-Dienst angepasst wurde, muss Dieser neugestartet werden, damit die Aenderugen geladen werden: + +```bash +$ sudo systemctl restart ssh.service +$ sudo systemctl status ssh.service +``` + +## Aufgabe 2 - fail2ban to protect ssh + +Installiere `fail2ban` und konfiguriere es so, dass + +- `ssh` ein aktives `jail` ist +- bei 3 maliger Passwortfalscheingabe, die IP Adresse des Clients fuer 2 Stunden gebannt wird + +Die Konfigurationsdateien von `fail2ban` sind im Pfad `/etc/fail2ban/` hinterlegt. + +**Anleitung:** + + Gehe wie folgt vor: + +1. Installation: + +```bash +sudo apt install fail2ban +``` + +2. Pruefe den Status des `fail2ban`-Dienstes mittels `systemd`: + +```bash +$ systemctl status fail2ban.service +``` + +3. Lese den Inhalt einer default Konfigurations: + +```bash +$ cd /etc/fail2ban/ +$ head -20 jail.conf +``` + +4. Erstelle wie empfohlen eine _local_ jail Konfigurationsdatei: + +```bash +$ cp jail.conf jail.local +``` + +5. Passe die `jail.local` Datei an, so dass die Vorgabe umegestzt ist. + +```bash +$ sudo nano/vim jail.local +``` + +Recherchiere gegebenfalls im Internet, um dies umzusetzen. (Tipp: `ssh` speichert seine logs nicht mehr standardmaessig im Pfad `/var/log/`, +sondern nutzt `systemd-journald`) + +6. Teste deine Konfig von einem auf dem `pve.lab.softbox.net` verfuegbaren Linux Host. + + +## Aufgabe 3 - nginx web server + +Wir installieren hier einen der am meisten genutztne Web server auf der Welt [`nginx`](https://nginx.org/) und machen damit den ersten Schritt zu einer web page. + +Installiere `nginx`: + +```bash +$ sudo apt install nginx +``` + +Pruefe den `nginx`-Dienst via `systemctl`: + +```bash +$ sudo systemctl status nginx +``` + +Besuche die Seite [http://student1.lab.softbox.net](http://student1.lab.softbox.net "http://student1.lab.softbox.net/"), welche dir die `nginx` welcome page zeigen sollte. +Die Konfigurationsdateien von `nginx` unter dem Pfad `/etc/nginx/` zu finden. Die `html` (+ `css` + etc.) sind in der Regel unter dem Pfad `/var/www/` zu finden, +wobei Dieser in `nginx`-Konfigurationsdateien beliebig waehlbar ist. + +Pruefe auf welcher IP Adresse und welchem Port `nginx` _lauscht_ (im englischen: _listen_ + +```bash +$ sudo ss -tulpn | grep nginx +``` + +**Zusatz:** Nutze `man ss`, um dich mit dem Befehl `ss` und den gewaehlten Optionen auseinanderzusetzen. Dies ist ein sehr praktischer Befehl, der sehr haeufig genutzt wird. diff --git a/exerices/sheet00/exercise-00.pdf b/exerices/sheet00/exercise-00.pdf new file mode 100644 index 0000000..6abc573 Binary files /dev/null and b/exerices/sheet00/exercise-00.pdf differ diff --git a/exerices/sheet01/sheet01.md b/exerices/sheet01/sheet01.md new file mode 100644 index 0000000..4c752f8 --- /dev/null +++ b/exerices/sheet01/sheet01.md @@ -0,0 +1,58 @@ +--- +author: Petar Cubela +date: Sep 21, 2025 +email: mail@petarcubela.de +title: Aufgabenblatt 01 - base commands & user/group management (v0.1) +geometry: margin=2cm +output: pdf_document +--- + +# Aufgabenblatt 01 - base commands & user/group management + +In diesem Blatt lernst du grudnlegende Basis Befehle fuer die Verwaltung und 'Bedienung' eines Linux Servers ohne Bildschirmumgebung. + +Zusaetzlich lernst du wie User, Gruppen, Besitzrechte und Berechtigungen ersetllt und vergeben werden. + +Zuletzt wir das gelernte, um selbststaendig einen git Server aufzusetzen; das hoert sich moeglicherweise komplizierter an als es ist, +aber kann mit dem zuvor gelernten schon umgesetzt werden. + +Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert. + +- Schreibe kurze Beschreibung zu den Grundlagen des User managements (user, groups, owner and permissions) +- erzaehle ueber die wichtigkeit dieser wenigen Befehle, welche uns ermoeglichen komplexe Dinge durchzufuehren + +## Aufgabe 1 - Basisbefehl + +- Lerne diese, sodass im sie im Schlaf bekannt sind. + +cd , ls , mv , cp , rm , mkdir , rmdir , echo , cat , grep , touch , find , fdisk , ls*** , cut , sort , uniq, ip + +## Aufgabe 2 - Create, modify and delete users/groups + +### Notizen + +- show the usage of the commands and its options: + - `useradd` + - `usermod` + - `userdel` + - `groupadd` + - `groupmod` + - `groupdel` +- teach linux ownership and permissions via `chown`,`grpown`, `chmod` + + +## Aufgabe 3 - git server - user/group management + +Installiere git und konfiguriere einen git server. Erstelle einen dedizierten +User und eine entsprechende Gruppe `git`, mit dem Pfad zum _home_ folder, `/var/git/`. + +Fuege den eigenen User zur Gruppe `git` hinzu, sodass dieser in der Lage ist, +Repositories dort abzulegen und zu verwalten. Entsprechend muessen die User/Group +Ownership und Permissions von `git`'s home folder angepasst werden. + +### Notizen + +- potentiel sollte auch die `umask` des Ordners angepasst werden + + + diff --git a/exerices/sheet02/sheet02.md b/exerices/sheet02/sheet02.md new file mode 100644 index 0000000..32b73bc --- /dev/null +++ b/exerices/sheet02/sheet02.md @@ -0,0 +1,38 @@ +--- +author: Petar Cubela +date: Sep 21, 2025 +email: mail@petarcubela.de +title: Aufgabenblatt 02 - nextcloud installation and git usage (v0.1) +geometry: margin=2cm +output: pdf_document +--- + +# Aufgabenblatt 02 - nextcloud installation and git repo + +In diesem Blatt lernst du + + + +Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert. + +## Aufgabe 1 - Nextcloud Installation + +**a.** Install dependencies + +**b.** Prepare database - mariadb + +**c.** Setup web server - nginx/apache + +**d.** Install nextcloud source files + + +## Aufgabe 2 - git basics + +1. `git init` +1. `git add` +1. `git commit` +1. `git remote` +1. `git push` +1. `git pull` + +Write simple python 'Hello, world!' script which gets pushed to local git server from last sheet. diff --git a/exerices/template/template-00.md b/exerices/template/template-00.md new file mode 100644 index 0000000..e29dadd --- /dev/null +++ b/exerices/template/template-00.md @@ -0,0 +1,60 @@ +--- +author: Petar Cubela +date: Month 00, 2025 +email: mail@petarcubela.de +title: Aufgabenblatt 00 - Titel (v1.0) +geometry: margin=2cm +output: pdf_document +--- + +# Aufgabenblatt 00 + +In diesem Blatt lernst du wichtige Grundlagen, um die Sicherheit eines Linux Servers zu gewaehrleisten. + +`ssh` (_secure shell_) ist eines der wichtigsten Tools die ein Linux Administrator beherrschen sollte. +Dieses erlaubt es uns, eine Shell zu einem remote Linux (im allgemeinen Unix) System zu oeffnen, +um dann administrative Taetigkeiten am Server durch zu fuehren. +Die Authentifizierung passiert hier in der Regel mit Username und Passwort. +Es gibt aber Situationen in denen es nicht ratsam ist, Usernamen und Passwort fuer die Authentifizierung zu nutzen. +Zum Besipiel, wenn der `ssh` Port, 22, oeffentlich zuegaenglich ist, und damit jeder den _OpenSSH_ Server des Linux Servers erreichen koennte. +Ein Passwort koennte durch eine brute-force Attacke erraten werden oder durch andere Wege komprimittiert werden. +Aus dem Grunde gibt es `ssh` Key Paare, welche es uns ermoeglichen uns ohne Passwort am Server zu authentifizieren. + +Einer der keys ist hier ein **privater** Schluessel, den niemand haben sollte und der immer sicher aufbewahrt werden sollte. +Der zweite key ist **public** und darf somit von anderen gesehen/gelesen werden. Der public Key wird am Linux Server +in der Datei `/home/$USER/.ssh/authorized_keys` abgelegt, waehrend der private Key am eigenen Rechner hinterlegt wird, +ebenfalls im Ordner `/home/$USER/.ssh/`. Beim Versuch sich mittels `ssh` am Ziel Server anzumelden, gleicht der Server seinen public +Key mit dem private Key des `ssh`-Clients ab und wenn die beiden zu einander passen, wird Zugang gewaehrt. + +Wir lernen, wie wir ssh key Paare erzeugen und am Ziel Server zu hinterlegen, welche es uns erlauben, uns ohne Passwort an einem OpenSSH server zu authentifizieren. +Dies wird in Zukunft auch sehr nuetzlich sein, um Automatisierungstools gegen einen oder _mehrere_ Server laufen zu lassen. + +Zusaetzlich lernen wir `fail2ban`, welches ein einfaches _intrusion detection system(IPS)_ ist, welches in der Lage ist Ports zu Diensten auf dem Server zu ueberwachen +und bei missbraeulichem Verhalten IP Addressen zu blocken. Zum Beispiel kann eine IP Adresse fuer eine Stunde geblockt werden, wenn der entsprechende `ssh`-Client drei mal das Passwort falsch eingibt. + +Um Datein zu bearbeiten benutze einen beliebigen Text Editor, wie zum Beispiel `nano` oder `vim`. Diese sind in der Regel auf den meisten Linux Betriebssystemen vorinstalliert. + +## Aufgabe 1 - ssh security and config + +**a.** Erstelle ein `ssh` Key Paar auf deinem lokalen Rechner, lege den public key auf deinem remote Linux Server ab +und melde dich ohne Passwort mit `ssh` am Server an. `ssh USER@EXAMPLE.COM`. + +Tools, welche gentuzt werden sollen: + +- `ssh` +- `ssh-keygen` (wenn dieser Befehl benutzt wird, setze keien Passwort fuer das Key Paar, sonst musst ihr Dieses jedes mal eingeben, wenn die Keys genutzt werden) +- `ssh-copy-id` + +**b.** Passe die Konfiguration des _ssh daemons_ `sshd`, unter dem Pfad `/etc/ssh/sshd_config`, so an, dass + +- eine `root` Anmeldung nicht moeglich ist. (Der `root` User hat uneingeschraenkte Berechtigungen auf dem Server. Dieser sollte ueber `ssh` nie erreichbar sein.) +- die Passwort Authentifizierung nicht moeglich ist, +- und deiner Meinung nach die Sicherheit des `ssh`-Zugangs weiter erhoeht wird. + +Nachdem der `ssh`-Dienst angepasst wurde, muss Dieser neugestartet werden, damit die Aenderugen geladen werden: + +```bash +$ sudo systemctl restart ssh.service +$ sudo systemctl status ssh.service +``` +*Zusatz:** Nutze `man ss`, um dich mit dem Befehl `ss` und den gewaehlten Optionen auseinanderzusetzen. Dies ist ein sehr praktischer Befehl, der sehr haeufig genutzt wird.