CLI-Adventskalender, Tag 14: Backups

CLI-Adventskalender: Backups

Avatar von Eric

Hinter diesem Adventstürchen steckt das Rezept für ein bißchen weniger Angst im täglichen Leben – mit Backups.

„Keine Backups, kein Mitleid.“ Ich habe es nicht geschafft herauszufinden, wer diesen Spruch zuerst geprägt hat, aber es gibt eine ganze Reihe an Klamotten, Stickern und Schildern mit dieser Aufschrift. Ich bin selber mal Admin gewesen. Das Problem „Meine Festplatte ist abgeraucht und all meine Daten sind weg“ hat schon damals Hilflosigkeit auf allen Seiten ausgelöst, lange bevor Ransomware ein großes Thema wurde. Der Spruch mahnt zur Eigenverantwortung. Du! Du bist für Backups zuständig. Admins können nicht zaubern. Bitte lies die Anleitung im Wiki.

Backups

Backups sind langweilig. Sie sind Hausaufgaben. Sie sind eine Investition an Arbeit, nur um noch eine Kopie von unserem unfertigen Kram zu haben an dem wir wirklich, wirklich weiterarbeiten sollten. Sie haben auf der anderen Seite diesen magischen Effekt, dass eine Tasse Kaffee in unserem Laptop von einer Katastrophe zu einem bloßen Ärgernis wird.

Ich konzentriere mich hier in diesem Artikel auf Einzelpersonen. Backupstrategien für Unternehmen folgen denselben Prinzipien, aber die Skalierung macht andere Werkzeuge notwendig.

Was hast Du denn so rumliegen?

Wenn ich ein Security-Consulting mache, beinhaltet das oft ein Threat Modeling. Klingt hochtrabend, ist aber einfach: Was hast Du an Daten (und Geräten, in unserem Fall konzentrieren wir uns auf Daten) und wie teuer wird es wenn sie weg sind, jemand sie ausspäht oder sie abändert. Das Prinzip dahinter wird gerne mit „CIA“ abgekürzt. Confidentiality, Integrity, Availability.

Beispiel:

  • Meine Linux-ISOs sind nicht vertraulich. Sie haben öffentlich verfügbare Prüfsummen. Sie liegen bereits auf hunderten von Servern in vielen, vielen Ländern. Wenn ich aus Versehen mein Image lösche, kann ich (wenn ich es überhaupt noch brauche) es durch sechs Minuten Download wiederherstellen.
  • Meine Private Keys sind vertraulich (ich möchte gerne vermeiden, dass sich jemand als ich irgendwo einloggt oder meine E-Mails lesen kann). Sie zu verändern macht sie unbrauchbar und sollte ich sie aus Versehen löschen, kann ich sie nicht wiederherstellen und verliere potenziell (je nach Zweck des Keys) für immer den Zugang zu meinen verschlüsselten Daten. Aua.
  • Dieser Blogpost, während ich ihn schreibe, ist nicht vertraulich. Er ist für die Veröffentlichung bestimmt. Wenn er weg ist, muss ich ihn neu schreiben, das wäre also schmerzhaft.

Vertraulichkeit hat logischerweise Stufen. Öffentliche Informationen auf der einen Seite, private Schlüssel auf der anderen und diverse Arbeitsartefakte irgendwo dazwischen. Verfügbarkeit ist auch eine Frage der Risikobewertung. Bestimmte Sachen sind nicht wiederherstellbar (Private keys), dann kommt Geld (Monate Arbeit, die ein Team reingesteckt hat), Lebenszeit (drei Tage dran gearbeitet) und Seltenheit. Es gibt Daten, die alt sind und nicht mehr weitflächig verfügbar sind. Ahnenforscher zahlen manchmal größere Summen für alte Telefonbücher.

Es gibt unter uns Leute, die mit großen Mengen vertraulicher Daten arbeiten. Videoaufzeichnungen sind hier der beliebteste Kandidat. Für die meisten von uns sind die wirklich kritischen Daten in unserem Leben relativ klein und handlich.

Was wird wohl passieren?

Eine Regel, die man häufig hört, ist die 3-2-1-Regel. Mindestens drei Kopien Deiner Daten, auf mindestens zwei Maschinen, eine davon in einem anderen Gebäude. Hier schwingt wieder Risikomodellierung mit: Was sind die wahrscheinlichsten Fälle die passieren, die Daten kaputt machen? Beispiel: Ich lösche was, was ich nicht löschen wollte. Ups. Das ist der Grund, warum es digitale Papierkörbe gibt. Was sind unwahrscheinliche Fälle die dramatische Folgen haben? Beispiel: Ein Hausbrand.

Risiko ist Eintrittswahrscheinlichkeit multipliziert mit Schaden. Verhältnismäßig sind also Zeit- und Geldinvestitionen, die unter dieser Zahl liegen. Externe Festplatten und Webspace sind nicht teuer.

Was tun, wenn’s brennt?

Wenn wir diese Modellierung für Firmendaten machen, würden wir jetzt über die Zeit der Wiederherstellung sprechen. Für wie lange bleibt der Webshop offline? Wie lange dauert der resync der Datenbank, bis die Konsistenz wiederhergestellt ist? Bei Einzelpersonen sage ich folgendes: Ordnung halten. Backups da hintun, wo man sie findet. Ich sage gleich noch mehr zu diesem Thema.

Verschlüsselung ist Dein Freund

Festplatte verschlüsseln, keine unverschlüsselten Verbindungen zur Übertragung verwenden, am besten auf der verschlüsselten Festplatte sensible Daten nochmal in einen verschlüsselten Container packen und Offline-Backups gehören ebenfalls verschlüsselt. Hab ich hier meinen Alufolienhut auf? Nein, noch nicht.

Verschlüsselte Festplatten schützen vor dem Fall, dass das Laptop irgendwo liegen gelassen wird. Sie schützen vor dem Fall, dass jemand die aus der frisch formatierten Platte gelöschte Daten wiederherstellen kann. Erinnert ihr euch an den UK-Politiker, der seinen Laptop in der U-Bahn hat liegen lassen? An die vertraulichen Handbücher der Bundesweh,r die auf einer Platte auf eBay aufgetaucht sind? Das Internet erinnert sich. Verschlüsselung hätte geholfen.

Verschlüsselungscontainer (z.B. Veracrypt) sind eine zusätzliche Sperre dagegen, dass jemand meinen Laptop ausspäht. Software wird immer Sicherheitslücken haben. Irgendwann klicke ich vielleicht mal auf den falschen Link. Ein Container schützt hier sensible Kundendaten.

Als letztes, das Wichtigste: Daten die auf jemand anderes Computer hochgeladen werden, sind nicht mehr eure Daten; es sei denn sie sind von euch verschlüsselt, ohne dass Dritte jemals den Key theoretisch hätten berühren können. Cloud-Backups sind fantastisch in Sachen Integrity und Availability, bei allem anderen hilft AES-256.

Backups gehören automatisiert

Damit sich das Gefühl von glückseliger Sicherheit einstellt, müssen Backups automatisch im Hintergrund passieren. Nichts ist schlimmer, als bei einem Datenverlust darüber nachzudenken, wann man die letzte Kopie gemacht hat. crontab -e und dann

0 8-22 * * * /home/eric/backups.sh

für stündliche Backups oder

0 23 * * * /home/eric/backup_all_the_things.sh

für einmal am Tag. Viele Programme können im Hintergrund laufen und automatisch bei Änderungen syncen. Mehr dazu gleich.

Praxisteil: Du hast wahrscheinlich schon Backups

Die Arbeit meines Teams liegt auf git. Jede vorangegangene Version, jede parallele Version, liegt nicht nur auf meinem Laptop, nicht nur auf dem Server beim Kunden, sondern auch auf jedem Laptop meines Teams. Das 3-2-1 purzelt hier aus der Tüte.

Natürlich lässt sich das auch automatisieren:

backup_git_repo() {
  cd "$1"
  if ! git diff-index --quiet HEAD --; then
    current_branch=$(git branch --show-current)

    if [ "$current_branch" == "master" || "$current_branch" == "main" ]; then
      backup_branch="backup/$(date +%Y%m%d)"
      git checkout -b "$backup_branch"
    fi

    git add .
    git commit -m "WIP End of Day"
    git push
  fi

  cd - > /dev/null
}
export -f process_git_repo

find "/home/eric/projekte" -type d -name ".git" -exec bash -c 'process_git_repo "$(dirname {})"' \;

Deine E-Mails liegen wahrscheinlich auf Deinem Mailserver (hoffentlich verschlüsselt). Eine Kopie bei Dir, Dein Cloudanbieter hat wahrscheinlich Backups. 3-2-1 passt. Gekaufte Daten lassen sich oft wiederherstellen. Wenn ich mir einen neuen Kindle kaufe, kriege ich alle meine Bücher wieder drauf. Alle möglichen Daten lassen sich trivial im Netz wiederfinden, wenn wir sie brauchen.

Jetzt heißt es, die Lupe rauszuholen, die Gummihandschuhe anzuziehen und wie Marie Kondo durch die schmutzigen Teile unserer Festplatte zu waten. Wie wir wissen, gehören Config-Dateien idealerweise in ein Git-Repo. Besagtes Repo kann man dann z. B. in ein privates Github-Repo schieben oder mit einem der unten stehenden Tools verschlüsselt übertragen. Was haben wir denn noch? Und wie meistern wir nur die ganze Unordnung?

Does it spark joy?

Building a Second Brain von Tiago Forte schlägt die PARA-Methode zur Organisierung von Notizen vor:

  • Projects – Alles mit einem theoretischen Endpunkt, an dem wir gerade arbeiten
  • Area – Alles wofür wir so verantwortlich sind, ohne klaren Endpunkt
  • Resource – Zeug, das in der Zukunft interessant sein könnte
  • Archive – Altes Zeug, das aus den oberen Kategorien rausgepurzelt ist

Das ist – meiner Meinung nach – ein guter Startpunkt, um digitale Daten jeder Art zu sortieren. Sind das hier Dokumente für mein aktuelles Projekt? Oder für einen Arbeitskreis, an dem ich beteiligt bin? Ist das hier einfach nur was, was ich interessant finde? Und wenn es nichts von alledem ist, will ich es direkt löschen oder erstmal aufheben?

Die Backupstrategie wird dadurch auch klarer. Eine Möglichkeit wäre:

  • Projects: Inkrementelle Updates, mindestens stündlich, idealerweise mit Hot-Sync irgendwohin bei jeder Veränderung
  • Area: Einmal am Tag
  • Resource: Einmal pro Woche
  • Archive: Einmal im Monat und ganz alten Kram brauche ich auch nicht auf der Festplatte meines Arbeitslaptops haben

RAIDs

RAIDs (Fileserver mit mehreren Festplatten die ihre Daten verteilen, um Ausfälle abzufangen) sind keine Backups. Sie schützen vor ausfallenden Festplatten, aber nicht vor allen anderen Ursachen von Datenverlust (aus Versehen gelöscht, korrumpiert durch Softwarebug, Ransomware, kompletter Hardwareausfall, etc.). Aber eine private Maschine auf die man automatisch syncen kann ist eine feine Sache!

Clever Backups machen, heißt Speicherplatz sparen

„Jesus saves, but Buddha takes incremental backups.“ Anstelle einer kompletten Kopie kann man auch einfach nur die neuesten Änderungen übertragen.

rsync -av --delete /home/eric/projekte /media/externe_festplatte

Aber bitte verschlüsselt!

Nach meiner Predigt oben will ich euch natürlich auch einen Weg für verschlüsselte Backups an die Hand geben.

tar -czf - /home/eric/projekte | gpg --encrypt --recipient eric@example.com -o /mount/remote_server/backup.tar.gz.gpg

Das ist natürlich nicht inkrementell. Hier ist es ratsam, ein dediziertes Backup-Tool zu verwenden. Mayflower-Admins empfehlen borg:

borg init --encryption=repokey /home/eric/projekte
borg create /home/eric/projekte::backup /mount/remote_server

Nur war borg mir bei dem Ausbessern ihrer zerbrochenen Kryptographie etwas langsam. Mittlerweile lachen mich duplicity …

duplicity /home/eric/projekte file:///mount/remote_server

… und restic an.

restic init --repo /path/to/restic/repo
restic -r /home/eric/projects backup /mount/remote_server

Damit synchrone eingegebene Passwörter mit cron-jobs harmonieren, muss man ein wenig kreativ werden.

echo 'TollesPasswort1337' > /home/eric/.duplicity-pw
chmod 600 /home/eric/.duplicity-pw

Und im cron-Skript:

0 1 * * * export PASSPHRASE=$(cat /home/eric/.duplicity-pw) && /usr/bin/duplicity /home/eric/projekte file:///mount/remote_server && unset PASSPHRASE

Analog für restic:

0 2 * * * /usr/bin/restic -r /home/eric/projekte --password-file /home/user/.restic-pw backup /mount/remote_server

Die Passwörter sollten natürlich angemessen sicher gewählt sein.

openssl rand -base64 24 > /home/eric/.passwordfile
chmod 600 /home/eric/.passwordfile

… ich werde von meinen Erfahrungen berichten.

Wichtig ist hier auch, dass man seine Keys sichert; idealerweise offline. Ein USB-Stick bietet sich an. Oder auch einfaches Ausdrucken auf Papier und Abheften.

Noch ein Tool für Cloud-Liebhaber

Ein Kollege von mir schwört auf Kopia, ein Open-Source-Tool, mit dem sich Cloud-Backends besonders leicht anbinden lassen. Auch hier werde ich über das nächste Jahr fleißig evaluieren.

Testen, testen, testen

Hier ist eine lustige Beschäftigung für ein langes Meeting: Mach‘ ein zweites Laptop neben Deinem auf und starte einen Timer. Dann fang an, ein Betriebssystem und alle Zugänge – ohne irgendwas von Deinem aktuellen Laptop zu verwenden, nur aus Backups – zu installieren. Schau mal, wie lange es dauert, bis Du arbeitsfähig bist. Bonuspunkte, wenn Du das einmal die Woche machst, denn das ist die Zeit, die es kosten wird, wenn Dein aktuelles Laptop stirbt. Bonus: Neue Leute in Deinem Team werden schneller ongeboardet, weil Du anfängst Dokumentation zu schreiben, die Skripte, die Docker-Container oder Vagrant-Maschinen werden, etc.

In weniger extrem: Ein Backup, dass nicht auf seine Wiederherstellungsfähigkeit getestet wird, ist kein Backup.

Wirklich gut investierte Arbeit

Persönliche Backups sind sowas wie Sport machen, Meditation, gesunde Ernährung, Lebensversicherungen und Goethe’s Faust. Etwas, was sich Leute gerne für den mystischen Tag, an dem sie ihr Leben unter Kontrolle haben, vornehmen.

Ich sage: Der Tag ist heute.

Man darf inkrementell arbeiten. Eine schnelle Kopie auf einen Stick oder eine Festplatte ist schon eins besser als vorher. Ein verschlüsseltes Archiv auf einem Fileserver ist noch besser. 

Alle Menschen leben mit dem Hintergrundgeräusch diverser Ängste, es ist Teil unserer Natur. Wenn wir eine davon entfernen, haben wir mehr Energie, uns wegen anderer Sachen Stress zu machen.

Shell-Weisheit des Tages
Vergessen ist die beste Art, sich zu erinnern

Computer sind komplex. Wir arbeiten uns ständig in neue Dinge ein. Je mehr wir unsere kognitive Last reduzieren können, desto besser werden wir in unserem Job. Unsere besten Freunde bei diesem Thema sind Dokumentation, Konfiguration und Skripte.

David Allen schrieb in seinem Buch Getting Things Done: „Your brain is for having ideas, not storing them.“ Je mehr Detailwissen wir auslagern können, desto besser für uns. Je effizienter wir darin werden, desto effektiver werden wir.

Ein persönliches Git-Repo mit Notizen ist eine gute Idee; habe ich schon auf meinen Blog-Artikel Knowledge Management for Software Engineers verwiesen?

Ein persönliches Git-Repo mit allen Config-Dateien ist eine gute Idee. Git-Repos für den unweigerlichen Friedhof alter Softwareprojekte sind eine gute Idee.

Die Shell funktioniert über Textdateien. Wir können sie abstrus schnell durchsuchen, um alles zu finden was wir suchen. Je ordentlicher wir sie ablegen, desto besser können wir sie vergessen und desto effizienter können wir sie wieder hervorzaubern, wenn wir uns doch wieder erinnern wollen.

Avatar von Eric

Kommentare

Eine Antwort zu „CLI-Adventskalender: Backups“

  1. […] Hab nichts zu verstecken! Bin kein Spion/Krimineller/Regime-Kritiker! Warum soll ich mir das antun? Wo wir wieder bei Risikomodellierung wären (siehe der vorherige Artikel über Backups). […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.