Hinweis: Die Kernel der üblichen Distributionen sollten dies bereits beinhalten.
(in der Regel werden diese automatisch von cryptsetup geladen)
Die Partition wird angelegt (bestehende Daten werden gelöscht!) und das Passwort definiert:
cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --verify-passphrase /dev/sda3
Der folgende Befehl legt /dev/mapper/sda3 an, welches uns einen Zugriff auf die verschlüsselte Partition erlaubt
cryptsetup luksOpen /dev/sda3 sda3
Nun muss noch ein Dateisystem erstellt werden:
mkfs.xfs /dev/mapper/sda3
Und die Partition kann eingebunden werden:
mount /dev/mapper/sda3 /mnt/sda3
Bemerkung: Soll auch für reguläre Benutzer ein Zugriff möglich sein, wäre nun ein chmod 777 /mnt/sda3/
oder ähnliches angebracht.
Zum sicheren Aushängen der Partition wird folgendes ausgeführt:
umount /dev/mapper/sda3 cryptsetup luksClose sda3
Für das automatische Einbinden der verschlüsselten Partition(en) gibt es mindestens zwei verschiedene Möglichkeiten.
Möchte man bestimmte verschlüsselte Partitionen beim Booten nach Eingabe des Passworts automatisch einbinden, so sind diese in /etc/crypttab wie folgt einzutragen:
# <target name> <source device> <key file> <options> sda3 /dev/sda3 none luks,tries=2,timeout=5,checkargs=xfs
Als Optionen wird unbedingt luks benötigt, der Rest ist optional. Durch checkargs=xfs wird zusätzlich geprüft, ob ein valides XFS-Dateisystem vorliegt. Außerdem wird der Bootvorgang nach fünf Sekunden oder nach zweimaliger Eingabe des falschen Passwortes automatisch fortgesetzt. Weitere Optionen sind unter man crypttab
erklärt.
Soll die Partition automatisch beim Login eines Benutzers (per Konsole oder Login-Manager) eingebunden werden, so kann dies über Pluggable Authentication Module (PAM) gemacht werden. Dafür muss das Paket libpam-mount installiert werden. Anschließend muss in der Datei /etc/security/pam_mount.conf.xml unter Volume definitions ein zugehöriger Eintrag ergänzt werden:
<!-- Volume definitions --> <volume user="hans_maulwurf" mountpoint="/mnt/sda6" path="/dev/sda6" fstype="crypt" options="exec,nodev" /> <!-- pam_mount parameters: General tunables -->
In diesem Beispiel wird bei Login des Benutzers hans_maulwurf automatisch die Partition /dev/sda6 nach /mnt/sda6 eingebunden (und nach Logout wieder ausgehangen). Damit das funktioniert, muss natürlich das Passwort des Benutzers einem der LUKS-Passwörter der Partition entsprechen.
Für externe Wechseldatenträger empfiehlt es sich, das Programm pmount zu verwenden. Dieses erlaubt einerseits regulären Benutzern das Einbinden dieser Datenträger soweit sie sich in der Gruppe plugdev befinden (zumindest trifft dies auf Debian zu), andererseits unterstützt es LUKS und kann damit ebenfalls ohne weitere Konfiguration verschlüsselte Partitionen einbinden. Mit einem Trick ist dies auch für interne Datenträger möglich, diese müssen lediglich in die Datei /etc/pmount.allow eingetragen werden (näheres dazu in der manpage von pmount).
Mittlerweile (ab util-linux 2.15?) unterstützt mount auch selbständig LUKS und fragt ohne weitere Konfiguration nach dem Passwort, wenn eine verschlüsselte Partition eingebunden werden soll.
In beiden Fällen sind die nachfolgenden Erklärungen zum Ein- und Aushängen der verschlüsselten Partition nur bedingt relevant.
Wird die Partition nicht automatisch eingebunden sondern soll sie von normale Systembenutzer gemountet werden können, so sind noch kleine Anpassungen notwendig. Als erstes wird einem Benutzer (hier: scytheman) erlaubt, den Befehl cryptsetup per sudo nutzen zu dürfen. Dazu wird folgendes in die Datei /etc/sudoers eingetragen:
# Cmnd alias specification Cmnd_Alias CRYPT = /sbin/cryptsetup # User privilege specification scytheman ALL = NOPASSWD: CRYPT
Nun muss er auch das Gerät unter /device/mapper/ einhängen dürfen. Dazu wird folgendes in die Datei /etc/fstab eingetragen:
/dev/mapper/sda3 /mnt/sda3 xfs user,noauto,exec,noatime 0 0
Zum Einbinden der Partition muss nun folgendes ausgeführt werden:
sudo cryptsetup luksOpen /dev/sda3 sda3 mount /dev/mapper/sda3
Und zum sicheren Entfernen:
umount /dev/mapper/sda3 sudo cryptsetup luksClose sda3
Dafür bietet sich ein Script an:
Ein Script zum einfachen Ein- und Aushängen der verschlüsselten Partition.
#/bin/sh # exit immediately if a command exits with a non-zero status set -e DEVICE="/dev/sda3" NAME="sda3" case "$1" in start) sudo cryptsetup luksOpen $DEVICE $NAME mount /dev/mapper/$NAME echo "successfully opened and mounted $DEVICE" ;; stop) umount /dev/mapper/$NAME sudo cryptsetup luksClose $NAME echo "successfully unmounted and closed $DEVICE" ;; mount) mount /dev/mapper/$NAME echo "successfully mounted $DEVICE" ;; umount) umount /dev/mapper/$NAME echo "successfully unmounted $DEVICE" echo "warning: device still unencrypted! use $0 close" ;; open) sudo cryptsetup luksOpen $DEVICE $NAME echo "successfully opened $DEVICE" ;; close) sudo cryptsetup luksClose $NAME echo "successfully closed $DEVICE" ;; *) echo "usage: $0 {start|stop|mount|umount|open|close}" exit 1 ;; esac
Dies wird beispielsweise in einer Datei namens crypt_sda3.sh abgespeichert, mit chmod +x crypt_sda3.sh
ausführbar gemacht und anschließend kann per ./crypt_sda3.sh start
und ./crypt_sda3.sh stop
die Partition ein- und ausgehangen werden.
Die Parameter open und close ent-/verschlüssen die Partition lediglich, (un)mounten sie jedoch nicht. Das ist zB für fscks nützlich. mount und umount hängen die entschlüsselte Partition ein bzw. aus.
LUKS unterstützt bis zu 8 verschiedene Passwörter (so genannte Keyslots). Diese können ohne aufwändige Neuverschlüsselung hinzugefügt oder entfernt werden.
cryptsetup luksAddKey /dev/sda3
cryptsetup luksKillSlot /dev/sda3 0
Hinweis: Hier wird das erste Passwort (also Slot 0) gelöscht. Statt luksKillSlot wurde früher luksDelKey verwendet.
Zum Ändern des Passworts fügt man einfach einen neuen Keyslot hinzu und löscht den alten.
CPU-Auslastung des Kernelthreads kcryptd/0
CPU | Datenmenge | Auslastung |
---|---|---|
AMD Athlon™ XP 1800+ | ~13MB/s | ~30% |
Intel(R) Pentium(R) M processor 1.86 GHz | ~17MB/s | ~40% |
Intel(R) Pentium(R) Dual-Core CPU E5200 2.50 GHz | ~30MB/s | ~23% |
Hinweis: Solche Auslastungen erreicht man natürlich nur beim Kopieren größerer Datenmengen. Das Lesen von Videos, Bildern, Audiodateien etc. wirkt sich nicht spürbar auf die Systemlast aus.
Keine Garantie auf Vollständigkeit und Fehlerfreiheit dieses Howtos. Um die Sicherheit des Systems zu verbessern sollten noch die Swap-Partition und /tmp/ verschlüsselt werden. Andernfalls können hier unverschlüsselte Dateien der verschlüsselten Partition auftauchen und abgefangen werden. Zum Verschlüsseln der Root-Partition sind auch noch ein paar zusätzliche, hier nicht genannte Anpassungen notwendig.