Git für Systemadministratoren: Konfigurationen versionieren wie ein Profi

Die meisten Sysadmins nutzen Git nicht für ihre Serverkonfigurationen — dabei ist es das beste Werkzeug gegen 'Wer hat das geändert?' und 'Wie war das nochmal vorher?'. Ein praktischer Einstieg.

"Wer hat eigentlich diese Zeile in der nginx.conf geändert?" — "Wann wurde der Cronjob deaktiviert?" — "Die Datei war gestern noch anders, ich weiß nur nicht mehr wie."

Solche Fragen kennt jeder, der Server administriert. Die Antwort heißt Git. Nicht nur für Entwickler, sondern für jeden, der Konfigurationsdateien anfasst.

Warum Sysadmins Git brauchen

Versionskontrolle für Code ist selbstverständlich. Für Serverkonfigurationen? Überraschend selten. Dabei passiert hier genau dasselbe:

  • Jemand ändert etwas in /etc/nginx/nginx.conf
  • Drei Wochen später bricht etwas
  • Niemand weiß mehr, was sich verändert hat

Mit Git hat man:

  • Vollständige Änderungshistorie: Wann wurde was geändert, von wem, mit welchem Kommentar
  • Einfaches Rückgängigmachen: git revert oder git checkout bringen eine Datei in den Vorstand
  • Differenzansicht: git diff zeigt genau, was sich zwischen zwei Versionen verändert hat
  • Nachvollziehbarkeit: Pflicht-Dokumentation nach BSI-Grundschutz, ISO 27001 und NIS2

Git Basics für den Serveralltag

Keine Angst vor der Lernkurve — für den Anfang braucht man nur sieben Befehle.

Repository initialisieren:

cd /etc
git init
git config user.name "Systemadmin"
git config user.email "admin@intern.local"

Dateien zum Tracking hinzufügen:

git add nginx/nginx.conf
git add ssh/sshd_config
git add fail2ban/jail.local

Ersten Commit erstellen:

git commit -m "Initiale Konfiguration: nginx, sshd, fail2ban"

Nach einer Änderung:

# Was hat sich verändert?
git diff /etc/nginx/nginx.conf

# Änderungen stagen und committen
git add /etc/nginx/nginx.conf
git commit -m "nginx: client_max_body_size auf 100MB erhöht für Nextcloud"

Historie anzeigen:

git log --oneline /etc/nginx/nginx.conf

Datei auf früheren Stand zurücksetzen:

git checkout abc1234 -- /etc/nginx/nginx.conf

Was versionieren?

Nicht alle Dateien in /etc gehören ins Repo. Empfehlenswert:

VersionierenNicht versionieren
/etc/nginx//etc/shadow (Passwort-Hashes!)
/etc/ssh/sshd_configPrivate Keys
/etc/fail2ban/Zertifikatsdateien
/etc/docker/daemon.jsonLog-Dateien
docker-compose.yml-DateienTemporäre Dateien
/etc/crontab, /etc/cron.d/

Wichtig: Eine .gitignore-Datei anlegen und sensitive Dateien ausschließen:

cat /etc/.gitignore
shadow
passwd
gshadow
group
*.key
*.pem
*_rsa
*_ecdsa
Binary System Services – Professionelle Serveradministration

Gitea / Forgejo: Self-Hosted Git-Server

Wer Konfigurationen nicht lokal im /etc-Repository belassen, sondern zentral für mehrere Server verwalten möchte, braucht einen Git-Server. Die einfachste Option: Gitea oder sein Community-Fork Forgejo — beide laufen als Docker-Container und bieten eine GitHub-ähnliche Web-Oberfläche.

# docker-compose.yml für Forgejo
services:
  forgejo:
    image: codeberg.org/forgejo/forgejo:latest
    restart: unless-stopped
    ports:
      - "3000:3000"
      - "222:22"
    volumes:
      - forgejo_data:/data
    environment:
      - USER_UID=1000
      - USER_GID=1000

volumes:
  forgejo_data:

Nach der Einrichtung (Admin-Account, SSH-Key hinterlegen) kann man:

# Remote auf dem Gitea/Forgejo-Server hinzufügen
cd /etc
git remote add origin ssh://git@gitea.intern.local:222/admin/server-configs.git
git push -u origin main

Jetzt sind alle Konfigurationsänderungen zentral gespeichert, mit Web-UI durchsuchbar und können per Pull Request reviewed werden — auch wenn man alleine arbeitet.

Praktischer Workflow für die tägliche Arbeit

Vor jeder Änderung:

cd /etc
git pull  # Falls remote konfiguriert
git status  # Was ist aktuell ungetrackt oder geändert?

Änderung durchführen und dokumentieren:

# Konfiguration bearbeiten
nano /etc/nginx/sites-available/nextcloud

# Änderung prüfen
git diff

# Committen mit aussagekräftiger Nachricht
git add nginx/sites-available/nextcloud
git commit -m "nextcloud: proxy_read_timeout auf 300s erhöht (Timeout bei großen Uploads)"
git push

Bei einem Produktionsproblem:

# Letzte fünf Commits anzeigen
git log --oneline -5

# Was hat sich in den letzten 24 Stunden geändert?
git log --since="24 hours ago" --oneline

# Datei auf Stand von gestern zurücksetzen
git checkout HEAD~1 -- /etc/nginx/sites-available/nextcloud
nginx -t && systemctl reload nginx

Automatische Commits mit etckeeper

Wer den manuellen Commit-Schritt vergisst, kann etckeeper einsetzen. Das Tool konfiguriert automatisch ein Git-Repository in /etc und erstellt täglich sowie vor jedem apt-Lauf automatisch Commits:

apt install etckeeper

etckeeper initialisiert /etc automatisch als Git-Repository und committet bei Paketupdates. Als Backup-Netz ideal — ersetzt aber keine aussagekräftigen manuellen Commits.

Docker-Compose-Dateien versionieren

Wer Docker einsetzt, sollte alle docker-compose.yml-Dateien ebenfalls unter Versionskontrolle stellen. Empfehlenswert ist ein separates Repository:

mkdir ~/docker-configs
cd ~/docker-configs
git init
# Alle compose-Dateien kopieren oder verlinken
git add .
git commit -m "Initiale Docker-Compose-Sammlung: nginx, nextcloud, forgejo"

Vorteil: Bei einem Serverumzug oder nach einem Hardwareausfall ist die gesamte Containerinfrastruktur in wenigen Minuten wiederhergestellt — git clone und docker compose up -d.

Fazit

Git ist kein Entwickler-Tool. Es ist ein Werkzeug für jeden, der Dateien verändert, die wichtig sind. Im Serverkontext sorgt es für Nachvollziehbarkeit, schnelle Fehleranalyse und sicheres Rückgängigmachen von Änderungen — drei Dinge, die in jeder professionellen IT-Umgebung unverzichtbar sind.

Wer Gitea oder Forgejo hinter einem Nginx Reverse Proxy betreiben möchte, findet die passende Anleitung im Artikel Nginx Reverse Proxy einrichten.

Mehr zu Serveradministration