Linux Patching Template - Strukturierte Checkliste für sichere Updates

Eine praxisnahe Schritt-für-Schritt-Anleitung für Debian-basierte Systeme - Von Backup über Update bis Rollback inkl. Patching-Template-Markdown-File.

Das regelmäßige Aktualisieren eines Linux-Servers bildet das unerschütterliche Fundament, um die Sicherheit, Stabilität, Sexiness und Effizienz des Systems zu gewährleisten. Damit die Kiste beim Patchen keine Faxen macht und der Prozess zugleich professionell, sauber und reproduzierbar bleibt, habe ich mir ein überaus detailliertes, hochskalierbares, synergiegetriebenes und maximal wertschöpfendes Enterprise-Grade Linux Patching Template (Checkliste) erstellt, das mittlerweile schon seit Jahren erfolgreich in Benutzung ist. Da ich im Netz keine annähernd so vollständige Anleitung gefunden habe, die den kompletten Patch-Prozess von Backup über Pre-/Post-Checks bis 🧻Cleanup wirklich vollständig abbildet, dachte ich mir, ich teile es hier, visuell und als Markdown-Version, brav mit euch wie Moses das Meer.

Ursprünglich entstand dieses Template im medizinischen IT-Umfeld, einer harschen Welt, in der Fehler oder DurchAusfälle (technisch wie gastrointestinal 🚽) nicht nur lästig, sondern hochkritisch sind. Systeme müssen dort absolut zuverlässig funktionieren, und Updates dürfen, frei nach dem Motto „Mal ist man 🐕Hund, mal ist man🌳Baum“, kein russisches-Roulette-Game sein. Dieses Umfeld legte den Grundstone für diese umfangreiche Checkliste.

Das Template geleitet einen systematisch und sicher durch den Debian-basierten Update-Prozess (ohne vorher einen Schornsteinfeger gerubbelt haben zu müssen) und es diente später sogar brav als Blaupause zur Automatisierung via Ansible-Playbook.

Warum überhaupt ein Linux Patching Template?

  • Nachvollziehbarkeit: Jeder Step ist dokumentiert, Anomalien schnell erkennbar
  • Vorher-Nachher-Vergleich: Performance, Dienste und Security-Status fett im Blick
  • Standardisierung: Gleicher Ablauf auf allen Systemen, egal welcher Lauch patched
  • Verlässlichkeit: Die Abläufe sind jedes Mal gleich, man vergisst und verzettelt nichts
  • Onboarding-Erleichterung: Neue Admins können mit klaren Abläufen sofort steil gehen
  • Nervenberuhigung: Man muss den „Gott des Absturzes“ nicht jedes Mal neu besänftigen
  • Struktur: Kein Chaos, sondern ein klarer roter Faden um sich keinen kalten Arsch zu holen
  • Sicherheit: Backups & Checks, bevor ein Malheur härter als eine Flasche feinste Rakija knallt
  • Nachschlagewerk: Bewährte Anlaufstelle wichtiger Befehle/Checks für Alltag & Troubleshooting
  • Frühwarnsystem: Während Bots/NPCs automatisiert durchpatchen, stolpert man beim manuellen durchnudeln über die kleinen Vorboten des Chaos: volle Platten, wackelige Dienste oder nervöse Logs. Dinge, die heute noch kein Problem sind, können dich in Sekundenbruchteilen um den Titel "Mitarbeiter des Jahres" bringen

Wichtig: Vor dem Update immer dem Chef Bescheid geben, nicht das beim Patching extrem fette Updates gezogen werden und er beim Clutchen in Counter-Strike plötzlich derbste FPS-Drops kassiert. Sowas geht gar net!

PS: Das ist eine Markdown-Version. Die Checkboxen werden hier leider nicht korrekt angezeigt. In anderen Markdown-Editoren geht es.

1️⃣ Quick-Infos

  • [ ] Informationen collecten
#==========================================================
# Audit
#==========================================================
# Namensschema der Wikiseite: <hostname-fqdn>-<yyyy-mm-dd>-<purpose>
Namensschema:   ansible-bh-01.hsp.idh-2024-01-16-systemupgrade

Author:         Hackspoiler
Template:       Linux Patchday Template
Version:        1.0
System-Purpose: Ansible Bastion Host

#==========================================================
# Systeminfos
#==========================================================
VM_IP:          10.30.10.140
VM_NAME:        ansible-bh-01.hsp.idh
VM_CPU:         1
VM_RAM:         12GB
VM_HDD:         130GB

2️⃣ Kommunikation - Betroffene Bots/NPCs informieren

  • [ ] Task im Maintenance- oder Weihnachtskalender eintragen (Mindesten 2-3 Tage vorlauf)
  • [ ] Start des Patchings über die jeweiligen Kommunikationskanäle wie TikTok, Youtube-Short, Instagram bekannt geben (Mindestens 30 Min vorlauf)

3️⃣ Monitoring

  • [ ] System im Monitoring pausieren
# URL - Monitoring
Grafana DEV:  https://dev.monitor.hsp.idh/
Grafana INT:  https://int.monitor.hsp.idh/
Grafana PROD: https://prod.monitor.hsp.idh/

4️⃣ Backup

# URL - Snapshot
https://proxmox.hsp.idh/
  • [ ] Backup erstellen
# Backup erstellen. Hier mit BorgBackup. Siehe Anleitung: https://hackspoiler.de/verschluesselte-ubuntu-server-backups-mit-borgbackup-und-borgmatic/
borgmatic --verbosity 2 --log-file /var/log/borg/borgmatic.log

# Backup verifizieren
borgmatic list
# URL - Recovery-Plan: https://wiki.hsp.idh/linux/backup/borg/recovery

5️⃣ Pre-Checks

  • [ ] System-Uptime
# System-Uptime & aktuelle Load
uptime

# Ausgabe:
  • [ ] Anzahl installierter Pakete
# Paket-Anzahl
dpkg -l | awk '$1 == "ii" {count++} END {print count}'

# Ausgabe:
  • [ ] Logfiles
# Logfile - Systemlog
grep --extended-regexp --ignore-case '(abort|alert|crit|corrupt|\bdenied\b|emerg|error|exception|fail|false|fatal|invalid|kill|not found|oom|panic|refused|segfault|timeout|unauthorized|unavailable|warn)' /var/log/syslog

# Ausgabe:
# Logfile - Kernel
grep --extended-regexp --ignore-case '(abort|alert|crit|corrupt|\bdenied\b|emerg|error|exception|fail|false|fatal|invalid|kill|not found|oom|panic|refused|segfault|timeout|unauthorized|unavailable|warn)' /var/log/kern.log | sort | uniq

# Ausgabe:
# Logfile - Journal
journalctl -b -p err --no-pager

# Ausgabe:
# Logfile - Kernel Buffer
dmesg -T -x | grep -E ':alert|:crit|:emerg|:err|:warn'

# Ausgabe:
  • [ ] Firewallstatus
# Firewall
ufw status numbered

# Ausgabe:
  • [ ] Aktive Dienste checken
# Dienste checken
systemctl list-unit-files --no-pager | awk '$2 == "enabled"'; echo "Service Count: $(systemctl list-unit-files --no-pager | awk '$2 == "enabled"' | wc -l)"

# Ausgabe:
  • [ ] Disk-Space checken
# Disk-Space checken
df -hlTi | grep -E '(^Filesystem|^/dev/)'

# Ausgabe:
  • [ ] System-Reboot checken
# System-Reboot nötig? Wenn ja zuerst rebooten
[ -f /var/run/reboot-required ] && echo "Reboot required" || echo "Reboot is NOT required"

# Ausgabe:

6️⃣ System-Update

  • [ ] Tmux-Session starten
# Tmux-Session starten - [Optional screen -S patchday_session]
tmux new-session -s patchday_session -n "Win_1" \; split-window -h -p 40 \; select-pane -L
# Falls die aktuelle Tmux-Session gecuttet wird: tmux attach oder tmux attach -t "patchday_session"
  • [ ] Systemupdate
# Systemupdate
apt update && apt upgrade | tee /var/log/patching_$(date +%F).log
cat /var/log/patching_$(date +%F).log

# Ausgabe:

7️⃣ Mid-Checks

  • [ ] Logfiles
# Logfile - Systemlog
grep --extended-regexp --ignore-case '(abort|alert|crit|corrupt|\bdenied\b|emerg|error|exception|fail|false|fatal|invalid|kill|not found|oom|panic|refused|segfault|timeout|unauthorized|unavailable|warn)' /var/log/syslog

# Ausgabe:
# Logfile - Kernel
grep --extended-regexp --ignore-case '(abort|alert|crit|corrupt|\bdenied\b|emerg|error|exception|fail|false|fatal|invalid|kill|not found|oom|panic|refused|segfault|timeout|unauthorized|unavailable|warn)' /var/log/kern.log | sort | uniq

# Ausgabe:
# Logfile - Journal
journalctl -b -p err --no-pager

# Ausgabe:
# Logfile - Kernel Buffer
dmesg -T -x | grep -E ':alert|:crit|:emerg|:err|:warn'

# Ausgabe:
# Dienste checken
systemctl list-unit-files --no-pager | awk '$2 == "enabled"'; echo "Service Count: $(systemctl list-unit-files --no-pager | awk '$2 == "enabled"' | wc -l)"

# Ausgabe:

8️⃣ Reboot

  • [ ] reboot

9️⃣ Post-Checks

  • [ ] System-Uptime
# System-Uptime & aktuelle Load
uptime

# Ausgabe
  • [ ] Anzahl installierter Pakete
# Paket-Anzahl
dpkg -l | awk '$1 == "ii" {count++} END {print count}'

# Ausgabe:
  • [ ] Logfiles
# Logfile - Systemlog
grep --extended-regexp --ignore-case '(abort|alert|crit|corrupt|\bdenied\b|emerg|error|exception|fail|false|fatal|invalid|kill|not found|oom|panic|refused|segfault|timeout|unauthorized|unavailable|warn)' /var/log/syslog

# Ausgabe:
# Logfile - Kernel
grep --extended-regexp --ignore-case '(abort|alert|crit|corrupt|\bdenied\b|emerg|error|exception|fail|false|fatal|invalid|kill|not found|oom|panic|refused|segfault|timeout|unauthorized|unavailable|warn)' /var/log/kern.log | sort | uniq

# Ausgabe:
# Logfile - Journal
journalctl -b -p err --no-pager

# Ausgabe:
# Logfile - Kernel Buffer
dmesg -T -x | grep -E ':alert|:crit|:emerg|:err|:warn'

# Ausgabe:
  • [ ] Firewallstatus
# Firewall
ufw status numbered

# Ausgabe:
  • [ ] Aktive Dienste checken
# Speziell genutzte Dienste checken
SERVICES="^(apache2|auditd|borg|caddy|chrony|containerd|corosync|cri-o|docker|etcd|fail2ban|grafana|haproxy|keepalived|kubelet|kube-proxy|minio|monit|mysql|nginx|node-exporter|pacemaker|podman|postgres|postfix|prometheus|redis|rsyslog|ufw)"

systemctl list-unit-files --no-pager | awk '$2 == "enabled"' | grep -E -i "${SERVICES}"; echo "Service Count: $(systemctl list-unit-files --no-pager | awk '$2 == "enabled"' | grep -E -i "${SERVICES}" | wc -l)"

# Ausgabe:
  • [ ] Mounts checken
# Mount-Points checken
mount | grep -E '^/dev/' | column -t

# Ausgabe:

🔟 System-Cleanup

  • [ ] Cleanup
# Pakete aufräumen
apt clean && apt autoclean && apt autoremove --purge

# Ausgabe:
# Paketlisten aufräumen
rm -rf /var/lib/apt/lists/* ; apt update

# Ausgabe:
# Verweiste Paketreste entfernen
dpkg --list | awk '/^rc/ {print $2}' | xargs --no-run-if-empty dpkg --purge

# Ausgabe:
# Docker aufräumen
docker system prune

# Ausgabe:

✅ Abschluss

  • [ ] Lynis Security-Check
# Lynis Security-Check
lynis audit system --quick

# Ausgabe Hardening Index:
  • [ ] Kommunikation - Betroffene Parteien informieren
  • [ ] Monitoring - System reaktivieren
  • [ ] Snapshot entfernen

🔥 Fehler

  • [ ] Kritische Fehler (zur sofortigen Bearbeitung)
# Kritische Fehler:
Ticket:
  • [ ] Unkritische Fehler
# Unkritische Fehler:
Ticket:

♻️ Rollback (nur bei Problemen)

  • [ ] Snapshot zurückspielen
  • [ ] BorgBackup Recovery durchführen (Recovery-Plan: https://wiki.hsp.idh/linux/backup/borg/recovery)
  • [ ] Monitoring, Alerts und verfügbare One-Way-Flüge nach Kolumbien prüfen
  • [ ] Incident im Ticket-System dokumentieren

Repository - Linux Debian-basiertes Patchting Template

Markdown Linux Debian-basiertes Patching Template