Linux Daten verschlüsseln

From JonDonym Wiki
Jump to: navigation, search

<metadesc>HowTo zur Verschlüsselung von Daten auf Linux-Servern mit DM-Crypt und LUKS. Es können freie Partitionen verschlüsselt oder Containerdateien angelegt werden.</metadesc> En2.png De2.png  Hauptseite (de) | Linux Server Setup

Contents

Datenverschlüsselung mit DM-Crypt

DM-Crypt ist fester Bestandteil des Linux-Kernels und somit in allen aktuellen Distributionen enthalten. DM-Crypt arbeitet mit Containern fester Größe, welche die verschlüsselten Daten enthalten. Ein Container kann eine Festpattenpartition oder eine Imagedatei sein. Die Erweiterung LUKS (standardmäßig enthalten) ermöglicht es, bis zu 8 verschiedene Passwörter für das Öffnen des Containers zu nutzen.

Für die Nutzung ist folgende zusätzliche Software nötigt:

  • cryptsetup kann zum Erstellen, Öffnen und Schließen der verschlüsselten Container eingesetzt werden.
  • pam-mount enthält Skripte, die das Öffnen und Schließen von verschlüsselten Containern vereinfachen.

Die Installation kann mit den Paket-Managern der Distribution erfolgen:

Debian: aptitude install cryptsetup libpam-mount
RedHat: yum install util-linux-crypto libpam-mount

Sollte als abhängiges Paket bei der Installation auch dm-setup installiert werden, ist ein Reboot des Systems nötig. Wenn bei der Nutzung von cryptsetup eine Fehlermeldung "Command failed: Failed to setup dm-crypt key mapping" erscheint, muss das Kernel-Modul dm_crypt per Hand geladen werden. In diesem Fall fehlt in der Datei /etc/modules die Zeile dm_crypt.

modprobe dm_crypt

Verschlüsselte Festplattenpartition

Ist auf dem Server eine hinreichend große freie Partition vorhanden, kann diese mit folgendem Kommando verschlüsselt werden. Es wird dabei 3x die Passphrase abgefragt.

luksformat -t ext3 /dev/sda4

Das Öffnen der verschlüsselten Partition erfolgt mit mount.crypt aus der Sammlung pam-mount. Das Beispiel verwendet den Mount-Point /mnt.

mount.crypt /dev/sda4 /mnt

Das Schließen kann mit umount.crypt erfolgen.

umount.crypt /mnt

Verschlüsselte Containerdatei

Ist auf dem Server keine freie Partition vorhanden, die verschlüsselt werden könnte, kann man eine Containerdatei nutzen. Die Erstellung einer verschlüsselten Containerdatei erfordert folgende Einzelschritte:

  • Zuerst ist eine leere Imagedatei zu erstellen (im Beispiel 100 MByte)
  • Einhängen der Datei als Loop-Device.
  • Die ersten 2 MByte sind mit Zufallswerten zu füllen.
  • Anschließend erfolgt die LUKS-Formatierung (luksFormat).
  • Das formatierte Device wird dem Device-Mapper unterstellt (luksOpen).
  • Ein Dateisystem wird auf dem neuen Volume angelegt.
  • Das vorbereitete Volume wird wieder geschlossen (luksClose).
  • Das Loop-Device wird wieder ausgehängt.
dd if=/dev/zero of=geheim.luks bs=1M count=100
losetup /dev/loop0 geheim.luks
dd if=/dev/urandom of=/dev/loop5 bs=1M count=2
cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 -y /dev/loop/0
cryptsetup luksOpen /dev/loop0 <name>
mkfs.ext3 /dev/mapper/<name>
cryptsetup luksClose <name>
losetup -d /dev/loop0

Das Öffnen der verschlüsselten Containerdaei und mounten kann wieder mit mount.crypt erfolgen.

mount.crypt geheim.luks /mnt -o loop

Das Schließen kann mit umount.crypt erfolgen.

umount.crypt /mnt

Beim Öffnen der Containerdatei werden folgende Einzelschritte abgearbeitet, die man auch ohne mount.crypt selbst aufrufen kann:

losetup /dev/loop0 geheim.luks
cryptsetup luksOpen /dev/loop0 <name>
mount /dev/mapper/<name> /mnt

Beim Schließen werden folgende Schritte abgearbeitet:

umount /mnt
cryptsetup luksClose <name>
losetup -d /dev/loop0

Passwörter verwalten

LUKS beitet die Möglichkeit, bis zu 8 verschiedene Passwörter für das Öffnen eines Containers zu definieren. Sollen mehrere Administratoren Zugriff auf dem Server haben, kann für jeden Admin ein eigenes Passwort definiert werden. Scheidet ein Adminitrator aus, kann sein Keyslot gelöscht werden.

Das Hinzufügen eines Passwortes und damit eines neuen Keyslots erfolgt mit luksAddKey, wobei als <device> beispielsweise /dev/loop5 für eine eingebundene Containerdatei oder /dev/hda5 für eine Festplattenpartition anzugeben ist. Das Keyfile ist optional.

# cryptsetup luksAddKey <device> [keyfile]

Ein Keyslot kann mit folgendem Kommando wieder entfernt werden:

# cryptsetup luksKillSlot <device> <slot>

Als <slot> ist die Nummer des Keyslots anzugeben, eine Zahl zwischen 0..7. Es ist also nötig, sich zu merken, welches Passort auf welchen Keyslot gelegt wurde.

Eine Übersicht, welche Keyslots belegt und welche noch frei sind, liefert luksDump:

# cryptsetup luksDump <device>
LUKS header information for <device>
...
Key Slot 0: DISABLED
Key Slot 1: ENABLED
        Iterations:
        Salt:

        Key material offset:
        AF stripes:
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

SWAP und TMP verschlüsseln

SWAP und /tmp können sensible Informationen enthalten, die im Verlauf der Arbeit ausgelagert wurden. Debian und Ubuntu enthalten ein Init-Script, welches eine einfache Verschlüsselung der SWAP und /tmp Bereiche ermöglicht, wenn diese auf einer eigenen Partition liegen. Beim Booten werden diese Bereiche als verschlüsselte Container mit einem zufälligem Passwort initialisiert. Mit dem Herunterfahren des Rechners ist das Passwort verloren. Die Daten können nicht wiederhergestellt werden.

In der Datei /etc/crypttab sind die folgenden Zeilen hinzuzufügen, wobei /dev/hda5 und /dev/hda8 durch die jeweils genutzten Partitionen zu ersetzen sind:

cryptswp  /dev/hda5  /dev/urandom  swap
crypttmp  /dev/hda8  /dev/urandom  tmp

In der Datei /etc/fstab, welche die beim Bootprozess zu mountenden Partitionen enthält, sind die Einträge für swap und /tmp anzupassen:

/dev/mapper/cryptswp  none  swap  sw  0  0
/dev/mapper/crypttmp  /tmp  ext2  defaults  0  0 

Hinweis: Die Partition für TMP darf kein Dateisystem enthalten. Wenn das Init-Script ein Dateisystem auf der für TMP vorgesehenen Partition findet, wird das verschlüsselte TMP nicht angelegt. Soll eine bereits verwendete TMP-Partionion verschlüsselt werden, ist diese erst einmal zu unmounten und zu überschreiben:

umount /tmp
dd if=/dev/zero of=/dev/hda8

Anschließend ist der Rechner neu zu booten und beide Partitionen sind verschlüsselt.

Personal tools