Dieser 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.
Linux-Server: Debian/Ubuntu, RHEL/CentOS, SUSE
Windows-Server: Active Directory, GPOs, DNS, DHCP, WSUS
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
SubnetzNetzadresseNutzbarer BereichBroadcast1192.168.10.0192.168.10.1 - 192.168.10.30192.168.10.312192.168.10.32192.168.10.33 - 192.168.10.62192.168.10.633192.168.10.64192.168.10.65 - 192.168.10.94192.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:
bash
# 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:
dockerfile
# 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):
yaml
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-LevelNutzbare KapazitätLesenSchreibenMax. AusfälleRAID 1 (Spiegelung)8 TB (50%)Sehr gutGut7 Platten*RAID 5 (Striping + Parität)14 TB (87.5%)GutMäßig1 PlatteRAID 10 (Spiegel + Stripe)8 TB (50%)Sehr gutSehr gutBis 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)
sql
-- 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
sql
-- 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
sql
-- 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):
text
INNER JOIN: LEFT JOIN: RIGHT JOIN:
╔═══╗ ╔═══════╗ ╔═══════╗
║ ▓▓║ ║▓▓▓▓▓▓▓║ ║▓▓▓▓▓▓▓║
A ║▓▓▓ ║ B A ║▓▓▓▓▓▓▓║ B A ║▓▓▓▓▓▓▓║ B
║▓▓▓▓║ ║▓▓▓▓▓▓▓║ ║▓▓▓▓▓▓▓║
╚═══╝ ╚═══════╝ ╚═══════╝
(Nur Schnitt) (A komplett) (B komplett)
JOINBeschreibungVerwendungINNER JOINNur passende Zeilen beider Tabellen (Schnittmenge)Wenn Daten in beiden Tabellen existieren müssenLEFT JOINAlle Zeilen der linken Tabelle, passende der rechten (A gesamt)Wenn alle Datensätze der Haupttabelle erhalten bleiben sollenRIGHT JOINAlle 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:
SchichtNameProtokolle/GeräteEinheitSchlüsselbegriffe7AnwendungHTTP, HTTPS, FTP, SMTP, DNSDatenTLS/SSL, Port 4436DarstellungTLS, SSL, ASCII, JPEG, MPEGDatenVerschlüsselung, Kompression5SitzungNetBIOS, RPC, PPTPDatenSitzungsmanagement4TransportTCP, UDP, SCTPSegmentPort-Nummern, Segmentierung3NetzwerkIP, ICMP, ARP, RouterPaketIP-Adressen, Routing2SicherungEthernet, PPP, Switch, MACFrameMAC-Adressen, VLAN1BitübertragungHub, Kabel, Glasfaser, FunkBitBits, 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-TypBezugspunktBackup-ZeitWiederherstellungSpeicherbedarfVollbackupKomplettLang (500 GB)SchnellHoch (500 GB/Tag)DifferentiellLetztes VollbackupMittel (~20 GB)MittelMittelInkrementellLetztes BackupKurz (~20 GB)Langsam (Kette)Niedrig
Beispiel-Berechnung (Woche):
RPO und RTO definieren:
Symmetrische vs. Asymmetrische Verschlüsselung:
EigenschaftSymmetrischAsymmetrischSchlüsselGleicher SchlüsselSchlüsselpaar (öffentlich/privat)GeschwindigkeitSehr schnellLangsamAlgorithmenAES, ChaCha20, 3DESRSA, ECDSA, DSAEinsatzGroße DatenmengenSchlüsselaustausch, Signaturen
TLS-Handshake (HTTPS-Verbindung):
Warum beide Verfahren kombiniert?
Forward Secrecy (PFS):
Empfohlene Schlüssellängen:
AlgorithmusSchlüssellängeSicherheitsstufeAES256 BitHohe SicherheitRSA2048-4096 BitMindestens 2048 BitECDSA/ECDH256 Bit (P-256)Empfohlen statt RSAChaCha20256 BitAlternative zu AES
Aufgabe: Mittelständisches Unternehmen mit Abteilungen Vertrieb, Entwicklung, Verwaltung strukturieren.
OU-Struktur:
text
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:
powershell
# 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:
RichtlinieWertBeschreibungMin. Kennwortlänge12 ZeichenKomplexität erforderlichKennwortablauf90 TageRegelmäßiger WechselBildschirmsperre10 Min.Automatische SperreKontosperrung5 FehlversucheSchutz vor Brute-Force
Aufgabe: Büro mit Abteilungen Verwaltung (VLAN 10), Technik (VLAN 20), Gäste (VLAN 30) trennen.
Tagged vs. Untagged (802.1Q):
TypBezeichnungBeschreibungUntaggedAccess PortEndgeräte-Port, kein VLAN-TagTaggedTrunk PortUplink zwischen Switches, mehrere VLANs
Switch-Konfiguration (Beispiel Cisco):
bash
# 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):
bash
# 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.
bash
#!/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:
KonstruktBeschreibungBeispielif [ ]Bedingung testenif [ -f datei ]``for var inSchleifefor i in {1..10}``whileWhile-Schleifewhile read line``$?Exit-Codeif [ $? -eq 0 ]``> / >>Umleiten/Anhängenecho "log" >> datei``|| / &&Oder / Und`befehl
Aufgabe: AD-Benutzer anlegen und Systemdienste überwachen.
powershell
# 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:
OperatorBeschreibungBeispiel-eqGleich$a -eq $b``-neUngleich$status -ne "Running"``-likeWildcard$name -like "*Admin*"``-matchRegex$email -match "@corp.local$"``Pipe$()SubexpressionWrite-Host "CPU: $($proc.CPU)"
Aufgabe: Webserver absichern – SSH, HTTP und HTTPS erlauben, restlichen Traffic blockieren.
bash
# 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:
OptionBedeutungBeispiel-AAnhängen (Append)-A INPUT``-PPolicy setzen-P INPUT DROP``-pProtokoll-p tcp``--dportZielport--dport 22``-jJump (Ziel)-j ACCEPT``-mModul laden-m state
Je nach Aufgabe: