DM-Crypt/Daten-Partition verschlüsseln

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Eine Einleitung und Hinweise zur Kernelkonfiguration sowie Installation von DM-Crypt und cryptsetup finden Sie im Artikel DM-Crypt. Dort sind auch weitere Anwendungsbeispiele verlinkt.


Als erstes benötigen wir eine Partition, in meinem Beispiel ist es eine S-ATA Festplatte mit einer Partition. Achtung: Soll sowieso eine komplette Platte verschlüsselt werden, wird natürlich KEINE Partition benötigt. Statt z.B. /dev/sda1 wird dann /dev/sda verwendet.

[Bearbeiten] LUKS Partiton erstellen

Sämtliche Daten auf dieser Partition müssen vorher gesichert werden!

Als erstes braucht man eine zu verschlüsselnde Partition, in meinem Fall habe ich /dev/sda1 gewählt. Wer alle vorhandenen Daten komplett unwiederherstellbar vernichten will, führt folgendes aus:

shred /dev/sda1

Wenn es die komplette Festplatte sein darf, dann /usr/bin/shred /dev/sda.

Diese Partition wird nun initialisiert. Im Beispiel ist AES mit dem Chiffriermodus XTS-PLAIN gewählt. Die Schlüsselgröße beträgt demnach 256, 384 oder 512 bit. Bei der Initialisierung muss man ein Passwort angeben, mit dem man später die Partition öffnen kann. Natürlich ist eine Verschlüsselung unnütz, wenn man Standardpasswörter aus anderen Bereichen verwendet. Mehr zu Thema sichere Passwörter gibt es hier

cryptsetup -c aes-xts-plain -y -s 384 luksFormat /dev/sda1

Statt einem Passwort kann auch ein Keyfile übergeben werden welches sich zum Beispiel auf einem USB Stick befindet oder anderweitig gesichert ist. Dadurch wird eine Passwortabfrage umgangen

head -c1024 /dev/urandom >/mnt/usb/key.sda1
cryptsetup -c aes-xts-plain -s 384 luksFormat /dev/sda1 /mnt/usb/key.sda1

Auf dem Device-Mapper-Blockdevice muss nun ein Dateisystem erstellt werden, dazu muss man sie zuerst öffnen bzw. freigeben:

cryptsetup luksOpen /dev/sda1 media

Solltest du dem Key Beispiel folgen musst du nun

cryptsetup luksOpen /dev/sda1 media --key-file /mnt/usb/key.sda1

Dabei wird das Mapper-Device /dev/mapper/media angelegt. Persönlicher Kreativität sind keine Grenzen gesetzt.Nun das Anlegen des Dateisystems, in meinen Fall mit ext3:

mke2fs -j /dev/mapper/media

Voila, die Datenpartition ist fertig und bereit zum mounten:

mount -t ext3 /dev/mapper/media /mnt/media

Nach einem Unmounten ist es ratsam, die Partition zu schließen:

umount /mnt/media
cryptsetup luksClose media

Zum erneuten Öffnen und Mounten:

cryptsetup luksOpen /dev/sda1 media
mount -t ext3 /dev/mapper/media /mnt/media

[Bearbeiten] Täglicher Gebrauch

Ärgerlich ist es im täglichen Gebrauch, dass man dazu Root sein muss. Ich habe mir einen sudo Eintrag erstellt:

EDIT: Dies kann durch benutzung von pam_mount umgangen werden! LINK: pam_mount[1]

visudo

%users ALL= NOPASSWD: /sbin/cryptsetup

Für Mehrbenutzersysteme ist das unsicher. Restriktiver sind folgende Einträge:

%users ALL= NOPASSWD: /sbin/cryptsetup luksOpen *
%users ALL= NOPASSWD: /sbin/cryptsetup luksClose *
%users ALL= NOPASSWD: /sbin/cryptsetup -y luksAddKey *
%users ALL= NOPASSWD: /sbin/cryptsetup luksDelKey *

Und einen passenden fstab Eintrag:

nano -w /etc/fstab

/dev/mapper/media       /mnt/media      ext3    noatime,noexec,nodev,noauto,user        0 0

Und nun folgendes Bash-Skript:

#! /bin/sh

##### Config #####

SUDO="/usr/bin/sudo"
CRYPTSETUP="/sbin/cryptsetup"
DEV="/dev/sda1"
MAPPER="media"
MOUNT="/mnt/media"

##### Do Not Change Below #####

if [[ "$UID" == "0" ]] ; then
        SUDO=""
fi

case $1 in
-m)	$SUDO $CRYPTSETUP luksOpen $DEV $MAPPER
        mount $MOUNT
	;;
-u)	umount $MOUNT
        $SUDO $CRYPTSETUP luksClose $MAPPER
	;;
-a)	$SUDO $CRYPTSETUP -y luksAddKey $DEV
	;;
-d)	if [[ -z "$2" ]] ; then
                echo "usage: -d <nr> - del key"
        else
                $SUDO $CRYPTSETUP luksDelKey $DEV $2
        fi
	;;
*)	echo "usage: -m - mount and open encrypted device"
        echo "       -u - umount and close encrypted device"
        echo "       -a - add key"
        echo "       -d <nr> - del key"
	;;
esac

Diese Vorgehensweise ist nicht die sicherste, ein Angreifer mit Benutzerrechten kann durch Entfernen sämtlicher Key Slots die LUKS Partition unbrauchbar machen. Wer auf Nummer sicher gehen will, lässt das Recht einen Key zu entfernen weg. Dies kann man durch entsprechende Einträge in /etc/sudoers verwirklichen:

# Host_Alias SYSTEM
# User Alias Specification
User_Alias PUSERS = ...,<cryptuser>,...
User_Alias CRYPTUSERS = <cryptuser>
...
# Cmnd_Alias Specification
Cmnd_Alias CRYPTSETUP = /sbin/cryptsetup luksOpen *, /sbin/cryptsetup luksClose *
Cmnd Alias CRYPTSETUP_KEY = /sbin/cryptsetup -y luksAddKey *, /sbin/cryptsetup luksDelKey *
# User privilege specification
root ALL=(ALL) ALL
PUSERS SYSTEM = ..., CRYPTSETUP,...
CRYPTUSER SYSTEM = CRYPTSETUP_KEY

Dann kann man auch auf ein bash skript verzichten

[Bearbeiten] Partition automatisch einbinden

Möchte man eine Partition während des Systemstarts automatisch entschüsseln (und einbinden), so kann man dies bequem in /etc/conf.d/dmcrypt konfigurieren:

/etc/conf.d/dmcrypt

target=home-partition
source='/dev/hda5'

Obiger Eintrag fragt beim Bootprozess automatisch nach einem Passwort für die (mit LUKS verwaltete) Partition /dev/hda5 und legt für diese ein Mapping names /dev/mapper/home-partition an.

Hinweis: Bei der Passworteingabe ist noch kein deutscher Tastaturtreiber geladen! Deshalb Vorsicht mit Sonderzeichen.

Hinweis: Die alte Konfigurationsdatei /etc/conf.d/cryptfs wurde in /etc/conf.d/dmcrypt umbenannt. Sollte es wider Erwarten Probleme geben hilft ein

# ln -s /etc/conf.d/dmcrypt /etc/conf.d/cryptfs
'Persönliche Werkzeuge