Verschlüsselte Wechselfestplatte einrichten

Ich sichere meine wichtigsten Daten regelmäßig auf einer Wechselfestplatte, die ich außer Haus bei meinen Schwiegereltern lagere. So bin ich auch im absoluten Katastrophenfall (Brand, Wasserschaden, etc.) in der Lage auf alle Dokumente zuzugreifen. Dennoch möchte ich nicht, dass meine Daten auf der Wechselfestplatte quasi öffentlich zugänglich sind. Daher verschlüssele ich die Festplatte, so dass sie nur mit dem richtigen Schlüssel ihre Daten hergibt.

Um die Verschlüsselung bei einer fabrikneuen Festplatte einzurichten, schiebe ich die Festplatte so wie sie ist in den Wechselrahmen. Nun muss ich zunächst mal das Device der neuen Festplatte herausfinden mittels lsblk.

$ sudo lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   5,5T  0 disk
├─sda1   8:1    0     1M  0 part
└─sda2   8:2    0   5,5T  0 part /home
sdb      8:16   0   3,7T  0 disk
sdc      8:32   0 232,9G  0 disk
├─sdc1   8:33   0 216,9G  0 part /
├─sdc2   8:34   0     1K  0 part
└─sdc5   8:37   0    16G  0 part [SWAP]
sr0     11:0    1  1024M  0 rom

Die 4TB-Wechselplatte ist offensichtlich als /dev/sdb im System erkannt worden.

Zunächst lege ich eine Partition auf der Wechselfestplatte an. Da sie größer als 2TB ist, kann ich nicht das gewohnte fdisk verwenden, sondern benötige eine GPT, diese lege ich mittels parted an.

$ sudo parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

parted begrüßt mich mit seiner Kommandozeile, zunächst schaue ich der absoluten Sicherheit wegen ob ich mich wirklich auf der richtigen Festplatte bewege.

(parted) print
Error: /dev/sdb: unrecognised disk label
Model: ATA ST4000DM004-2CV1 (scsi)
Disk /dev/sdb: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags:

Das Festplattenmodell und die Größe stimmen, ich kann also loslegen. Zunächst teile ich parted mit, dass ich gerne gpt als Disk-Label verwenden möchte (bei Festplatten größer 2TB wie gesagt ein Muss).

(parted) mklabel
New disk label type? gpt

Ich möchte eine große Partition erstellen und als Einheit daher Prozent verwenden (ich könnte auch als Einheit GB, TB, etc angeben, aber Prozent ist in dem Fall das einfachste).

(parted) unit %

Und nun lege ich die Partition tatsächlich an.

(parted) mkpart primary 0% 100%

Zum Abschluss schaue ich mir an ob auch alles wie gewünscht funktioniert hat.

(parted) print
Model: ATA ST4000DM004-2CV1 (scsi)
Disk /dev/sdb: 100%
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start  End   Size  File system  Name     Flags
 1      0,00%  100%  100%               primary

Das sieht gut aus, ich kann parted also beenden.

(parted) quit
Information: You may need to update /etc/fstab.

Den Anfang der zu verschlüsselnden Partition überschreibe ich mit Zufallsbytes.

$ sudo dd if=/dev/urandom bs=1M count=8 of=/dev/sdb1
8+0 records in
8+0 records out
8388608 bytes (8,4 MB, 8,0 MiB) copied, 0,603032 s, 13,9 MB/s

Den zur Verschlüsselung verwendeten Schlüssel möchte ich nicht jedesmal per Hand eingeben müssen (das Backup läuft nachts per Script), sondern hinterlege diesen in der Datei /etc/luks.key. Diese sieht dann z.B. so aus (ihr solltet natürlich einen eigenen Schlüssel verwenden).

$ sudo cat /etc/luks.key
askjd8hbbewhj26tsfgavSghsSDfgvhDedv

Die Zugriffsrechte auf die /etc/luks.key sollten aus verständlichen Gründen natürlich sehr restriktiv gesetzt werden.

$ sudo chown root:root /etc/luks.key
$ sudo chmod 600 /etc/luks.key

Nun kann ich die Partiton /dev/sdb1 formatieren.

$ sudo cryptsetup luksFormat -d /etc/luks.key /dev/sdb1
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES

Nun weise ich /dev/sdb1 einem virtuellen Gerät zu, welches ich „wechselplatte“ nenne.

$ sudo cryptsetup luksOpen -d /etc/luks.key /dev/sdb1 wechselplatte

Als Dateisystem verwende ich ext4, welches ich nun in gewohnter Weise anlege.

$ sudo mkfs.ext4 /dev/mapper/wechselplatte
mke2fs 1.42.13 (17-May-2015)
Ein Dateisystems mit 976753664 (4k) Blöcken und 244195328 Inodes wird erzeugt.
UUID des Dateisystems: 509adcf1-cd12-4dce-bc65-1d303c1c3894
Superblock-Sicherungskopien gespeichert in den Blöcken:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544

beim Anfordern von Speicher für die Gruppentabellen: erledigt
Inode-Tabellen werden geschrieben: erledigt
Das Journal (32768 Blöcke) wird angelegt: erledgt
Die Superblöcke und die Informationen über die Dateisystemnutzung werden
geschrieben: erledigt

So, damit ist die Festplatte einsatzbereit und kann nun verwendet werden. Ich mounte sie mal probeweise.

$ sudo mount /dev/mapper/wechselplatte /wechselplatte/
$ sudo lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                 8:0    0   5,5T  0 disk
├─sda1              8:1    0     1M  0 part
└─sda2              8:2    0   5,5T  0 part  /home
sdb                 8:16   0   3,7T  0 disk
└─sdb1              8:17   0   3,7T  0 part
  └─wechselplatte 252:0    0   3,7T  0 crypt /wechselplatte
sdc                 8:32   0 232,9G  0 disk
├─sdc1              8:33   0 216,9G  0 part  /
├─sdc2              8:34   0     1K  0 part
└─sdc5              8:37   0    16G  0 part  [SWAP]
sr0                11:0    1  1024M  0 rom

Alles hat funktioniert, ich kann sie also wieder unmounten.

$ sudo umount /wechselplatte
$ sudo cryptsetup luksClose wechselplatte

Wenn ich die Wechselfestplatte verwenden möchte, muss ich sie wieder mounten, dies geht mit

$ sudo cryptsetup luksOpen -d /etc/luks.key /dev/sdb1 wechselplatte
$ sudo mount /dev/mapper/wechselplatte /wechselplatte/