Verschlüsseln und sichern
Da ich viel und gerne an neu installierten Betriebssystemen herumbastel, brauche ich eine gut funktionierende Backup-Lösung für meine Daten. Ich sichere sie auf einer externen Festplatte. Sollte sie mal geklaut werden, und um meine Privatssphäre zu schützen (Emails, Bank-Daten etc.), habe ich sie komplett mit cryptsetup verschlüsselt und die Daten mit rsync gesichert. Dabei bedient sich cryptsetup der sogenannte „On The Fly Verschlüsselung“, Daten werden nur im Arbeitsspeicher ver- und entschlüsselt, was für mehr Geschwindigkeit, aber auch Sicherheit sorgt, da man nicht durch Daten-Reste auf der Festplatte auf den Inhalt der verschlüsselten Dateien zurückschließen kann.
Verschlüsseln
Mit cryptsetup kann man ganze Partitionen oder Gerätedaten ver- und entschlüsseln, ein gutes Werkzeug also, um eine externe USB-Festplatte abzusichern. Nachdem ich die Festplatte eingesteckt hatte, wurde sie erstmal automatisch gemountet. Im eingehängten Zustand kann das Dateisystem der Platte nicht bearbeitet werden, weshalb sie wieder ausgehängt werden muss:
umount /media/disk
Die Bezeichnung des Einhängepunkts kann dabei von Betriebssystem zu Betriebssystem variieren. Welche Gerätedateien wie gemountet sind, erfährt man mit dem Befehl mount
in der Konsole. Damit man mit cryptsetup verschlüsseln kann müssen die Module dm-crypt, dm-mod und aes, bzw. aes-i586, ein speziell an Pentium-Prozessoren angepasstes Modul, mit dem Befehl modprobe
geladen werden, falls sie es noch nicht sind. Ob sie es sind, kann man z.B. mit lsmod | grep aes
überprüfen.
Für alle folgenden Befehle benötigt man übrigens Root-Rechte. Unter Ubuntu bekommt man sie mit sudo -s
, alle anderen werden einfach Benutzer root.
Auf der externen Festplatte wird im ersten Schritt ein verschlüsseltes LUKS-Dateisystem angelegt. In meinem Fall heißt die Gerätedatei /dev/sdc1. Die Bezeichnung muss man durch die der entsprechenden Partition auf dem heimischen PC ersetzen. LUKS (Linux Unified Key Setup) ist übrigens ein Linux-Standard für Festplattenverschlüsselung und eine Erweiterung für cryptsetup. Aber Achtung: Der Befehl löscht sämtliche Dateien auf der externen Festplatte unwiederbringlich! Daher sollte man vorher ein Backup machen, falls nötig.
cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sdc1
Das Argument „-c“ legt den Verschlüsselungsalgorithmus fest (in meinem Fall AES; aes-xts-plain ist aber erst in neueren Kerneln vorhanden, bei älteren Kerneln sollte man aes-cbc-essiv verwenden), „-y“ sorgt für eine doppelte Passwortabfrage, wobei die zweite Abfrage mit der ersten identisch sein muss, und „-s“ definiert die Schlüssellänge (bei mir 512 Bit). Danach muss man mit „YES“ in Großbuchstaben bestätigen, die Passphrasse zweimal eingeben und die Partition wird verschlüsselt. Am Ende sollte dann die Ausgabe „Command successful“ erscheinen.
Auf der verschlüsselte Partition wird nun ein Dateisystem erstellt. Dazu wird die Festplatte unverschlüsselt in das System eingehängt:
cryptsetup luksOpen /dev/sdc1 crypto
Der Name „crypto“ kann dabei beliebig sein. Im Verzeichnis /dev/mapper gibt es nun die Datei crypto, die sich wie eine normale Festplatte ansprechen lässt. Auf der erstellt man dann das Dateisystem, z.B. ext3:
mkfs -t ext3 /dev/mapper/crypto
Will man einen USB-Stick oder SSD-Festplatte verschlüsseln, sollte man das Dateissystem mit ext2 formatieren. Die Journaling-Funktion des ext3-Dateisystem belastet den Flashspeicher doch recht stark und verkürzt dadurch die Lebensdauer. Jetzt kann man die verschlüsselte Platte ins System einhängen und mit dem Backup starten:
mount /dev/mapper/crypto /mnt/
Sichern
Wenn man einfach das komplette Home-Verzeichnis sichern will, führt man folgenden Befehl als einfacher Benutzer aus:
rsync -avz --progress --delete /home /dev/mapper/crypto
Nach dem Backup sollte der Datenträger wieder sauber ausgehangen
umount /mnt
und der Container abschließend verschlossen werden:
cryptsetup luksClose crypto
Um später wieder an die Daten zu gelangen, hängt man die externe Festplatte einfach wieder an und öffnet den verschlüsselten Container als Benutzer root mit
cryptsetup luksOpen /dev/sdc1 crypto
in der Konsole und gibt seine Passphrase ein. Danach muss das Dateisystem nur noch eingehängt werden, wobei das auf modernen Linux-System meist schon automatisch geschieht. So wird bei mir die externe Festplatte gleich wieder nach /media/disk unter sidux gemountet. Daher lautet mein neuer Befehl zum synchronisieren:
rsync -avz --progress --delete /home /media/disk/
Danach wird die Platte wieder ausgehängt mit
umount /media/disk/
und der Container verschlossen.
cryptsetup luksClose crypto
Unter Betriebssystemen mit einem aktuellerem Gnome-Desktop wie Ubuntu 8.04 Hardy Heron läuft das Einhängen ein wenig komfortabler.
Der Gnome-Volume-Manager erkennt automatisch, dass es sich bei der frisch angeschlossenen externen Festplatte um eine verschlüsseltes Medium handelt und startet ein Fenster, das zur Eingabe der Passphrase auffordert.