Install
openclaw skills install fisiUnterstützt bei FiSi-Ausbildungsthemen wie Netzwerke, Server-Admin, Datenbanken, Scripting, Sicherheit, Virtualisierung, Prüfungsvorbereitung und Projektarbeit.
openclaw skills install fisiDieser Skill unterstützt dich umfassend bei deiner Umschulung zum Fachinformatiker für Systemintegration. Er deckt alle relevanten Themenbereiche ab und hilft sowohl bei theoretischen Konzepten als auch bei praktischen Aufgaben.
Ich achte auf:
Aufgabenstellung: Berechne Subnetze bei gegebenem Netz und erforderlicher Host-Zahl.
Vorgehensweise:
2^n >= required_hosts/32 - n oder 255.255.255.xBeispiel: 192.168.10.0/24, benötigt 6 Subnetze mit mindestens 20 Hosts
| Subnetz | Netzadresse | Nutzbarer Bereich | Broadcast |
|---|---|---|---|
| 1 | 192.168.10.0 | 192.168.10.1 - 192.168.10.30 | 192.168.10.31 |
| 2 | 192.168.10.32 | 192.168.10.33 - 192.168.10.62 | 192.168.10.63 |
| 3 | 192.168.10.64 | 192.168.10.65 - 192.168.10.94 | 192.168.10.95 |
Berechnung: Für 20+ Hosts braucht man 5 Bits (2^5=32). Subnetzmaske: /27 (255.255.255.224).
Aufgabe: Verzeichnis /var/www/projekt konfigurieren:
Befehle:
# Besitzer und Gruppe setzen
sudo chown www-data:webentwickler /var/www/projekt
# Berechtigungen: rwxr-x--- (750)
sudo chmod 750 /var/www/projekt
# SGID-Bit setzen (Gruppenvererbung)
sudo chmod g+s /var/www/projekt
# oder: sudo chmod 2750 /var/www/projekt
Oktalnotation:
Container vs. Virtuelle Maschinen:
Dockerfile für Node.js-Backend:
# Multi-Stage Build für optimierte Image-Größe
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:18-alpine
RUN addgroup -g 1001 -S nodejs && adduser -S nodeuser -u 1001
WORKDIR /app
COPY --from=builder --chown=nodeuser:nodejs /app/node_modules ./node_modules
COPY --chown=nodeuser:nodejs . .
USER nodeuser
EXPOSE 3000
CMD ["node", "server.js"]
docker-compose.yml (Node.js + PostgreSQL + Nginx):
version: '3.8'
services:
backend:
build: ./backend
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/appdb
depends_on:
- db
networks:
- appnet
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=appdb
volumes:
- db_data:/var/lib/postgresql/data
networks:
- appnet
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- backend
networks:
- appnet
volumes:
db_data:
networks:
appnet:
Sicherheitshinweise:
.dockerignore erstellen (node_modules, .env, .git ausschließen)Aufgabe: Fileserver mit 8 Festplatten à 2 TB konfigurieren. Vergleiche RAID 1, RAID 5 und RAID 10.
Vergleichstabelle:
| RAID-Level | Nutzbare Kapazität | Lesen | Schreiben | Max. Ausfälle |
|---|---|---|---|---|
| RAID 1 (Spiegelung) | 8 TB (50%) | Sehr gut | Gut | 7 Platten* |
| RAID 5 (Striping + Parität) | 14 TB (87.5%) | Gut | Mäßig | 1 Platte |
| RAID 10 (Spiegel + Stripe) | 8 TB (50%) | Sehr gut | Sehr gut | Bis zu 4 Platten** |
* Bei 4 gespiegelten Paaren: Ein Ausfall pro Paar tolerierbar ** Bei RAID 10: Bis zu 50% Ausfälle, solange kein Paar komplett ausfällt
Berechnung:
Empfehlung für Dokumentenserver: RAID 10 – Begründung: Höchste Performance bei Lese- und Schreibzugriffen (wichtig für viele gleichzeitige Benutzer), gute Ausfallsicherheit, schneller Rebuild bei Plattenausfall.
Tabellen: kunden (id, name, ort) und bestellungen (id, kunden_id, produkt, betrag)
Aufgabe (a): Alle Kunden mit Bestellungen anzeigen (auch ohne Bestellungen)
-- LEFT JOIN: Alle Kunden, auch ohne Bestellung
SELECT k.name, b.produkt, b.betrag
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunden_id;
Aufgabe (b): Gesamtumsatz pro Kunde berechnen
-- GROUP BY mit Aggregatfunktion SUM
SELECT k.name, COALESCE(SUM(b.betrag), 0) AS gesamtumsatz
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunden_id
GROUP BY k.id, k.name;
Aufgabe (c): Nur Kunden mit mehr als 500 EUR Umsatz
-- HAVING filtert auf Aggregat-Ergebnisse
SELECT k.name, SUM(b.betrag) AS gesamtumsatz
FROM kunden k
JOIN bestellungen b ON k.id = b.kunden_id
GROUP BY k.id, k.name
HAVING SUM(b.betrag) > 500;
JOIN-Typen im Vergleich (Venn-Diagramm-Prinzip):
INNER JOIN: LEFT JOIN: RIGHT JOIN:
╔═══╗ ╔═══════╗ ╔═══════╗
║ ▓▓║ ║▓▓▓▓▓▓▓║ ║▓▓▓▓▓▓▓║
A ║▓▓▓ ║ B A ║▓▓▓▓▓▓▓║ B A ║▓▓▓▓▓▓▓║ B
║▓▓▓▓║ ║▓▓▓▓▓▓▓║ ║▓▓▓▓▓▓▓║
╚═══╝ ╚═══════╝ ╚═══════╝
(Nur Schnitt) (A komplett) (B komplett)
| JOIN | Beschreibung | Verwendung |
|---|---|---|
| INNER JOIN | Nur passende Zeilen beider Tabellen (Schnittmenge) | Wenn Daten in beiden Tabellen existieren müssen |
| LEFT JOIN | Alle Zeilen der linken Tabelle, passende der rechten (A gesamt) | Wenn alle Datensätze der Haupttabelle erhalten bleiben sollen |
| RIGHT JOIN | Alle Zeilen der rechten Tabelle, passende der linken (B gesamt) | Selten verwendet (umgekehrter LEFT JOIN) |
Aufgabe: Ordne Protokolle und Geräte den korrekten OSI-Schichten zu.
OSI-Schichten-Übersicht:
| Schicht | Name | Protokolle/Geräte | Einheit | Schlüsselbegriffe |
|---|---|---|---|---|
| 7 | Anwendung | HTTP, HTTPS, FTP, SMTP, DNS | Daten | TLS/SSL, Port 443 |
| 6 | Darstellung | TLS, SSL, ASCII, JPEG, MPEG | Daten | Verschlüsselung, Kompression |
| 5 | Sitzung | NetBIOS, RPC, PPTP | Daten | Sitzungsmanagement |
| 4 | Transport | TCP, UDP, SCTP | Segment | Port-Nummern, Segmentierung |
| 3 | Netzwerk | IP, ICMP, ARP, Router | Paket | IP-Adressen, Routing |
| 2 | Sicherung | Ethernet, PPP, Switch, MAC | Frame | MAC-Adressen, VLAN |
| 1 | Bitübertragung | Hub, Kabel, Glasfaser, Funk | Bit | Bits, elektrische/optische Signale |
Datenkapselung bei HTTPS-Aufruf:
Merksatz (oben nach unten): „Alle Tiefen Säufer Nennen Das Feiern” (Anwendung, Transport, Sitzung, Darstellung, Netzwerk, Daten, Bit)
Aufgabe: Unternehmen mit 500 GB Daten, täglich 20 GB Änderungen, Backup-Fenster 22:00–06:00. Entwirf ein Backup-Konzept.
Die 3-2-1-Regel:
Backup-Arten im Vergleich:
| Backup-Typ | Bezugspunkt | Backup-Zeit | Wiederherstellung | Speicherbedarf |
|---|---|---|---|---|
| Vollbackup | Komplett | Lang (500 GB) | Schnell | Hoch (500 GB/Tag) |
| Differentiell | Letztes Vollbackup | Mittel (~20 GB) | Mittel | Mittel |
| Inkrementell | Letztes Backup | Kurz (~20 GB) | Langsam (Kette) | Niedrig |
Beispiel-Berechnung (Woche):
RPO und RTO definieren:
Symmetrische vs. Asymmetrische Verschlüsselung:
| Eigenschaft | Symmetrisch | Asymmetrisch |
|---|---|---|
| Schlüssel | Gleicher Schlüssel | Schlüsselpaar (öffentlich/privat) |
| Geschwindigkeit | Sehr schnell | Langsam |
| Algorithmen | AES, ChaCha20, 3DES | RSA, ECDSA, DSA |
| Einsatz | Große Datenmengen | Schlüsselaustausch, Signaturen |
TLS-Handshake (HTTPS-Verbindung):
Warum beide Verfahren kombiniert?
Forward Secrecy (PFS):
Empfohlene Schlüssellängen:
| Algorithmus | Schlüssellänge | Sicherheitsstufe |
|---|---|---|
| AES | 256 Bit | Hohe Sicherheit |
| RSA | 2048-4096 Bit | Mindestens 2048 Bit |
| ECDSA/ECDH | 256 Bit (P-256) | Empfohlen statt RSA |
| ChaCha20 | 256 Bit | Alternative zu AES |
Aufgabe: Mittelständisches Unternehmen mit Abteilungen Vertrieb, Entwicklung, Verwaltung strukturieren.
OU-Struktur:
corp.local
├── OU=Benutzer
│ ├── OU=Vertrieb
│ ├── OU=Entwicklung
│ └── OU=Verwaltung
├── OU=Computer
│ ├── OU=Clients
│ └── OU=Server
└── OU=Gruppen
└── OU=Sicherheitsgruppen
AGDLP-Prinzip (Account → Global → Domain Local → Permission):
Beispiel GPO – Passwortrichtlinie:
# GPO erstellen und verknüpfen
New-GPO -Name "Passwortrichtlinie" | New-GPLink -Target "OU=Benutzer,DC=corp,DC=local"
# Einstellungen konfigurieren (Gruppenrichtlinienverwaltung)
# Computerkonfiguration → Windows-Einstellungen → Sicherheitseinstellungen → Kontorichtlinien
GPO-Einstellungen:
| Richtlinie | Wert | Beschreibung |
|---|---|---|
| Min. Kennwortlänge | 12 Zeichen | Komplexität erforderlich |
| Kennwortablauf | 90 Tage | Regelmäßiger Wechsel |
| Bildschirmsperre | 10 Min. | Automatische Sperre |
| Kontosperrung | 5 Fehlversuche | Schutz vor Brute-Force |
Aufgabe: Büro mit Abteilungen Verwaltung (VLAN 10), Technik (VLAN 20), Gäste (VLAN 30) trennen.
Tagged vs. Untagged (802.1Q):
| Typ | Bezeichnung | Beschreibung |
|---|---|---|
| Untagged | Access Port | Endgeräte-Port, kein VLAN-Tag |
| Tagged | Trunk Port | Uplink zwischen Switches, mehrere VLANs |
Switch-Konfiguration (Beispiel Cisco):
# VLANs erstellen
vlan 10
name Verwaltung
vlan 20
name Technik
vlan 30
name Gaeste
# Access-Ports konfigurieren
interface gi0/1
switchport mode access
switchport access vlan 10
# Trunk-Port konfigurieren
interface gi0/24
switchport mode trunk
switchport trunk allowed vlan 10,20,30
Inter-VLAN-Routing (Router-on-a-Stick):
# Router-Subinterfaces
interface gi0/0.10
encapsulation dot1Q 10
ip address 192.168.10.1 255.255.255.0
interface gi0/0.20
encapsulation dot1Q 20
ip address 192.168.20.1 255.255.255.0
Sicherheit: Gäste-VLAN isoliert, kein Zugriff auf interne VLANs (Firewall-Regel).
Aufgabe: Backup-Skript erstellen, das /home-Verzeichnisse archiviert und alte Backups löscht.
#!/bin/bash
# backup.sh - Automatisiertes Home-Verzeichnis-Backup
# Konfiguration
BACKUP_DIR="/backup"
SOURCE_DIR="/home"
RETENTION_DAYS=7
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="home_backup_${DATE}.tar.gz"
# Funktion: Fehlerbehandlung
cleanup() {
echo "Fehler aufgetreten. Bereinige..."
rm -f "${BACKUP_DIR}/tmp_*"
exit 1
}
trap cleanup ERR
# Prüfung: Backup-Verzeichnis existiert?
if [ ! -d "$BACKUP_DIR" ]; then
echo "Erstelle Backup-Verzeichnis..."
mkdir -p "$BACKUP_DIR" || { echo "Fehler: Kann Verzeichnis nicht erstellen"; exit 1; }
fi
# Backup erstellen
echo "Starte Backup von $SOURCE_DIR..."
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" "$SOURCE_DIR" 2>/dev/null
# Prüfung erfolgreich?
if [ $? -eq 0 ]; then
echo "Backup erfolgreich: ${BACKUP_FILE}"
logger -t backup "Home-Verzeichnis gesichert"
else
echo "Backup fehlgeschlagen!"
exit 1
fi
# Alte Backups löschen (Retention)
find "$BACKUP_DIR" -name "home_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "Backups älter als $RETENTION_DAGE Tage gelöscht"
# Übersicht anzeigen
du -sh "${BACKUP_DIR}/home_backup_"*.tar.gz | tail -5
Wichtige Bash-Konstrukte:
| Konstrukt | Beschreibung | Beispiel |
|---|---|---|
if [ ] | Bedingung testen | if [ -f datei ] |
for var in | Schleife | for i in {1..10} |
while | While-Schleife | while read line |
$? | Exit-Code | if [ $? -eq 0 ] |
> / >> | Umleiten/Anhängen | echo "log" >> datei |
|| / && | Oder / Und | `befehl |
Aufgabe: AD-Benutzer anlegen und Systemdienste überwachen.
# Benutzerverwaltung
New-ADUser -Name "Max Mustermann" `
-SamAccountName "mmustermann" `
-UserPrincipalName "mmustermann@corp.local" `
-Path "OU=Entwicklung,OU=Benutzer,DC=corp,DC=local" `
-AccountPassword (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) `
-Enabled $true `
-ChangePasswordAtLogon $true
# Mehrere Benutzer aus CSV importieren
Import-Csv "C:\\users.csv" | ForEach-Object {
New-ADUser -Name $_.Name -SamAccountName $_.SAM `
-Path "OU=Benutzer,DC=corp,DC=local" -Enabled $true
}
# Systemdienste prüfen
Get-Service | Where-Object {$_.Status -eq "Running" -and $_.StartType -eq "Auto"} |
Select-Object Name, DisplayName, Status | Export-Csv "C:\\services.csv"
# Remote-Computer verwalten (WinRM erforderlich)
Invoke-Command -ComputerName "SERVER01" -ScriptBlock {
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
}
PowerShell-Operatoren:
| Operator | Beschreibung | Beispiel |
|---|---|---|
-eq | Gleich | $a -eq $b |
-ne | Ungleich | $status -ne "Running" |
-like | Wildcard | $name -like "*Admin*" |
-match | Regex | $email -match "@corp.local$" |
| ` | ` | Pipe |
$() | Subexpression | Write-Host "CPU: $($proc.CPU)" |
Aufgabe: Webserver absichern – SSH, HTTP und HTTPS erlauben, restlichen Traffic blockieren.
# Alle bestehenden Regeln löschen
iptables -F
iptables -X
# Standard-Policy: Alles verbieten
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loopback erlauben
iptables -A INPUT -i lo -j ACCEPT
# Established connections erlauben
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH (Port 22) erlauben
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP (Port 80) und HTTPS (Port 443) erlauben
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ICMP (Ping) begrenzt erlauben
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
# Alles andere loggen und verwerfen
iptables -A INPUT -j LOG --log-prefix "FIREWALL-DROP:"
iptables -A INPUT -j DROP
iptables-Optionen:
| Option | Bedeutung | Beispiel |
|---|---|---|
-A | Anhängen (Append) | -A INPUT |
-P | Policy setzen | -P INPUT DROP |
-p | Protokoll | -p tcp |
--dport | Zielport | --dport 22 |
-j | Jump (Ziel) | -j ACCEPT |
-m | Modul laden | -m state |
Je nach Aufgabe: