make more commits :-)
This commit is contained in:
BIN
projects/sbx/student/.DS_Store
vendored
Normal file
BIN
projects/sbx/student/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
projects/sbx/student/exercises/.DS_Store
vendored
Normal file
BIN
projects/sbx/student/exercises/.DS_Store
vendored
Normal file
Binary file not shown.
137
projects/sbx/student/exercises/sheet00/exercise-00.md
Normal file
137
projects/sbx/student/exercises/sheet00/exercise-00.md
Normal file
@@ -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.
|
||||
BIN
projects/sbx/student/exercises/sheet00/exercise-00.pdf
Normal file
BIN
projects/sbx/student/exercises/sheet00/exercise-00.pdf
Normal file
Binary file not shown.
74
projects/sbx/student/exercises/sheet01/sheet01.md
Normal file
74
projects/sbx/student/exercises/sheet01/sheet01.md
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
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 00 - 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.
|
||||
|
||||
1. cd
|
||||
1. ls
|
||||
1. mv
|
||||
1. cp
|
||||
1. rm
|
||||
1. mkdir
|
||||
1. rmdir
|
||||
1. echo
|
||||
1. cat
|
||||
1. grep
|
||||
1. touch
|
||||
1. find
|
||||
1. fdisk
|
||||
1. ls***
|
||||
1. cut
|
||||
1. sort
|
||||
1. uniq
|
||||
|
||||
## 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
|
||||
|
||||
|
||||
|
||||
38
projects/sbx/student/exercises/sheet02/sheet02.md
Normal file
38
projects/sbx/student/exercises/sheet02/sheet02.md
Normal file
@@ -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.
|
||||
60
projects/sbx/student/exercises/template/template-00.md
Normal file
60
projects/sbx/student/exercises/template/template-00.md
Normal file
@@ -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.
|
||||
43
projects/sbx/student/student_linux_tasks.md
Normal file
43
projects/sbx/student/student_linux_tasks.md
Normal file
@@ -0,0 +1,43 @@
|
||||
|
||||
## Tasks
|
||||
|
||||
Separate by different levels of difficulty. In the beginning only easier concepts should be presented.
|
||||
Write guide which can be followed in order to learn and see concepts such as an manual to install a nextcloud instance.
|
||||
In the process the student would learn how a mariadb database is setup. Just following some simple commands.
|
||||
|
||||
### Level 0
|
||||
|
||||
- [ ] base commands - 20 most useful commands: cd, ls, mkdir, mv, rm , cp, touch, find, grep, cat, ssh
|
||||
- [x] ssh key-exchange authentication
|
||||
- [x] ssh hardening - not root login, no password hardening
|
||||
- [x] nginx
|
||||
- [ ] user and group management
|
||||
|
||||
### Level 1
|
||||
|
||||
- [x] fail2ban-server
|
||||
|
||||
### Level 2
|
||||
|
||||
- [ ] git local and remote repo as github and internal gitea
|
||||
|
||||
### Level 3
|
||||
|
||||
- [ ] git server
|
||||
- [ ] setup mysql/mariadb database
|
||||
- [ ] nextcloud setup
|
||||
|
||||
### Level 4
|
||||
|
||||
- [ ] nmap
|
||||
- [ ] ipcalc
|
||||
- [ ] ufw
|
||||
|
||||
### Level 5
|
||||
|
||||
- [ ] simple mail server Ports: 25 (smtp), 587 (smpts), 143 (imap)
|
||||
- [ ] tcpdump -> catch clear text passwd with tcpdump
|
||||
- [ ] pki for mutual tls trust
|
||||
- [ ] build each their own firewall/router with openbsd
|
||||
- [ ] build together an firewall which will be the sbx_lab firewall
|
||||
|
||||
Reference in New Issue
Block a user