Festplattenverschlüsselung, allgemeiner auch Datenträgerverschlüsselung (Full Disk Encryption, FDE) genannt bezeichnet die Verschlüsselung eines kompletten Datenträgers. Das kann eine oder mehrere Partitionen sein, auch externe Datenträger wie USB-Sticks sind möglich. Die Verschlüsselung greift noch unterhalb des Dateisystems und ist damit für Anwendungen transparent (d.h. unsichtbar). Verschlüsselte Datenträger sind in Linux von Haus aus unterstützt, die Datenträger sind also an jedem Rechner mit einer aktuellen Distribution nutzbar.
Die einzelnen Schritte beziehen sich in diesem Kapitel alle auf LUKS (falls nicht anders angegeben).
Technisch wird grundsätzlich eine Zwischenschicht installiert, die beim Systemstart das Passwort für die Partitionen abfragt und dann dem Betriebssystem transparent über einen sog. „mapper“ Zugriff auf die Daten gibt.
Nötige Kernelmodule:
dm_mod:der device-mapper Treiber)dm-crypt: device-mapper erweitert um verschlüsselte Datenträgeraes bzw. die optimierten Varianten aes_i586 für 32-Bit oder aes-x86_64 für 64-Bit: Implementierung der AES-Verschlüsselung
Wenn man einen aktuellen Prozessor (Pentium und auf aufwärts + kompatible) einsetzt sollte man aus Geschwindigkeitsgründen immer statt aes das Modul „aes_i586“ oder „aes-x86_64“ (für 64-Bit Prozessoren) nehmen: D.h. in der Datei /etc/modules/ in einer eigenen Zeile eintragen.
Das Management-Tool LUKS (Linux Unified Key Setup) hilft bei der Verwaltung und bietet die Möglichkeit mehrere Passwörter (bis zu 8 pro Container) zu vergeben und diese auch zu löschen (cryptsetup luksDelKey <device> <key slot number>). Beim Anlegen wird die gesammte Festplatte mit einem zufälligen Schlüssel kodiert, für den Zugriff auf diesen Schlüssel wird das angebene Passwort/die Schlüsseldatei verwendet. Deshalb kann der Schlüssel geändert werden ohne die komplette Festplatte neu zu schreiben.
Bei Gnome sollte mit der Software cryptsetup-luks 1.0.1 oder höher, D-Bus 0.60 oder höher, HAL 0.5.7 oder höher eine gute Integration verschlüsselter Partitionen und Sticks gegeben sein: beim einstecken wird automatisch nach dem Passwort gefragt und man könnte es auch im „Schlüsselbund“ speichern lassen.
Eine Verschlüsselung auf Datei- oder Verzeichnisebene lässt sich mit GNU PG (PGP) erreichen, Zusatzprogramme wie pgpdir) helfen dabei.
Mit FreeOTFE lassen sich verschlüsselte dm-crypt/LUKS-Datenträger auch unter Windows lesen. Es ist keine Installation nötig.
Eine gute und für Windows und Linux erhältliche Alternative ist Truecrypt: Es legt verschlüsselte Container an, die sowohl auf Windows als auch auf Linux lesbar sind. Während das bei Vista enthaltene Bitlocker natürlich nur zu sich kompatibel ist.
| Datenträgerverschlüsselung | ||
|---|---|---|
| dateiweise | komplettes Dateisystem | |
| Kernelspace | eCryptfs (experimentell) | dm-crypt, dm-crypt/LUKS, LoopAES, Truecrypt |
| Userspace | CryptoFS, EncFS | |
Von einer Ubuntu-live-CD kann man mit folgendem Shellscripts schnell alle benötigten Teile nachinstallieren:
#!/bin/bash sudo aptitude -y install cryptsetup lvm2 sudo modprobe dm-crypt sudo modprobe dm_mod sudo modprobe aes_i586 # you may want to mount your disk at this point... # sudo cryptsetup luksOpen /dev/sda1 HD1 # mkdir ~/HD1 # mount -t ext3 /dev/mapper/HD1 ~/HD1
Datenträgerverschlüsselung kann in vieler Hinsicht Sinn machen:
Ob es um den Schutz sensibler Kundendaten geht oder ein Schutz sensibler Daten bei Diebstahl (z.B. bei Laptops ein großes Problem), es gibt viele Gründe seine Festplatte zu verschlüsseln.
Ein möglicher Nachteil ist die hohe Systembelastung (vorrangig der CPU) durch die Verschlüsselung/Entschlüsselung der Daten. Es hilft natürlich nicht gegen Angriffe im laufenden Betrieb und gegen das Ausnutzen von Sicherheitslücken im System oder gezielt in der kryptografischen Implementierung. Wenn man keine Sicherheitsupdates („Patches“) einspielt, nutzt auch die beste Verschlüsselung nichts.
Auch die Auslagerungspartition sollte verschlüsselt sein, da hier sensible Informationen ausgelagert sein könnten.
TIP: Die „alternate“-Version von Ubuntu bietet eine automatische Einrichtung eines komplett verschlüsselten LVMs an.
Der Zugriff erfolgt über einen sog. „mapper“ der sich um die transparenter Ent-/Verschlüsselung kümmert.
sudo cryptsetup luksOpen /dev/sda1 stick
Wenn ein Keyfile benutzt werden soll ist die Angabe mit dem Parameter –key-file (entspricht dem Parameter -d) notwendig, ansonsten sollte aber auch nach dem keyfile gefragt werden. Ein Schreibschutz des Datenträgers ist mit dem Parameter –readonly möglich.
cryptsetup luksOpen /dev/sda1 stick --key-file /root/keyfile.key
sudo mount -t vfat /dev/mapper/stick /media/stick/
Wenn in der Datei /etc/crypttab die verschlüsselte Partition bereits aufgeführt ist, z.B.
# <target name> <source device> <key file> <options> home /dev/hda2 none luks,retry=3
dann reicht:
mount /dev/mapper/NAME /Pfad/des/mountpoints
Wenn man beim booten das Passwort falsch eingegeben hat, kann man die Abfrage durch den Befehl
/etc/init.d/cryptdisks
neu starten.
Bei der Verwendung von Key-Files trägt man in der /etc/crypttab
# <target name> <source device> <key file> <options> home /dev/hda2 /root/keyfile.key luks,retry=3
den Dateinamen und Pfad in der 3. Spalte ein (im Beispiel /root/keyfile.key).
Wenn man (wie es jetzt eigentlich aktuell ist) anstatt der alten Angabe von /dev/sda2 die sich nicht änderbare UUID für udev eintragen will,
cryptsetup luksUUID /dev/sda2 herausbekommen undNAME /dev/disk/by-uuid/fbbb34d4-06b9-40d6-84ee-ad714579fcc6 none luks,retry=5
Die UUID (fbbb34d4-06b9-40d6-84ee-ad714579fcc6) muss natürlich durch die passende ersetzt werden.
Hier wird kurz die Einrichtung eines verschlüsselten USB-Stick besprochen, der unter den verschiedenen Betriebssystem gleichmaßen angesprochen werden kann.
Wenn man nicht alle Schritte manuell durchführen will, hilft auch das Perl-Skript /usr/sbin/luksformat, bei Ubuntu 7.04 (feisty) wird aber nur (das ältere aber auch von früheren Kernelversionen unterstützte) ESSIV benutzt. Für LRW (siehe Schritt 1) ist hier eine angepasste LRW-Variante. Die Endung .txt braucht man nicht, man kann es auch als /usr/sbin/luksformat-lrw (als root) abspeichern und mit chmod +x /usr/sbin/luksformat-lrw ausführbar machen.
Der Aufruf erfolgt nach folgendem Muster:
luksformat [-t DATEISYSTEM] DEVICE
wobei die Angabe des Dateisystems optional ist. Allerdings wird in diesem Fall das Dateisystem fat32 (bzw. vfat) genommen, welches einige Nachteile hat (keine Zugriffsberechtigungen, nur Datei bis max. 4GB), dafür aber von jedem Betriebssystem beherrscht wird.
Für die 1.SATA-Festplatte und Formatierung mit ext3 sollte die Installation so aussehen:
deinBenutzer@deinHost:~$ sudo /usr/sbin/luksformat -t ext3 /dev/sda1
Creating encrypted device on /dev/sda1...
WARNING!
========
Daten auf /dev/sda1 werden unwiderruflich überschrieben.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
Please enter your passphrase again to verify it
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.
mke2fs 1.40-WIP (14-Nov-2006)
Dateisystem-Label=
OS-Typ: Linux
Blockgröße=4096 (log=2)
Fragmentgröße=4096 (log=2)
61063168 Inodes, 122095871 Blöcke
6104793 Blöcke (5.00%) reserviert für den Superuser
erster Datenblock=0
Maximum filesystem blocks=0
3727 Blockgruppen
32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe
16384 Inodes pro Gruppe
Superblock-Sicherungskopien gespeichert in den Blöcken:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Schreibe Inode-Tabellen: erledigt
Erstelle Journal (32768 Blöcke): erledigt
Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt
Das Dateisystem wird automatisch alle 37 Mounts bzw. alle 180 Tage überprüft,
je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t .
Wenn man die Schritte manuell eingeben will, dann geht ab hier los; die ausführliche Version gibts auf dieser Seite: Verschluesselter USB-Speicherstick mit LUKS HOWTO. Bei mir ist der Stick das Gerät /dev/sda1 (unverschlüsselt) und sda2 (verschlüsselt), der Name des verschlüsselten Dateisystems für den mapper ist „stick“.
sudo cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/sda1
; ab Kernelversion 2.6.20 kann alternativ LRW benutzt werden:
sudo cryptsetup -c aes-lrw-benbi -y -s 384 luksFormat /dev/sda1
siehe System verschlüsseln.
sudo cryptsetup luksOpen /dev/sda1 stick
mkfs.vfat -n "sicher" /dev/mapper/stick
sudo mount -t vfat /dev/mapper/stick /media/stick/
sudo cryptsetup luksAddKey /dev/sda1
Die Ausgabe ist dann ähnlich zu dieser hier:
Enter any existing LUKS password: aktuelles Passwort
Zuerst muss man eins der Passwörter angeben
key slot 0 unlocked.
Das Passwort wurde akzeptiert.
Enter new password for key slot: neues Passwort
Neues Passwort eingeben.
sudo cryptsetup luksDelKey /dev/sda1 1
Im Beispiel wird der KeySlot 1 auf der Partition /dev/sda1 gelöscht.
Zusätzlich (z.B. wenn man nicht mehrfach Schlüssel eingeben möchte) ist die Verwendung von Keyfiles (Dateien die den Zugangschlüssel enthalten bzw. als solcher dienen) möglich. Auch bei automatisierten Backups bietet sich diese Vorgehensweise an.
Die Keyfiles sollte man allerdings sehr gut absichern, es bietet sich die Ablage auf dem ersten verschlüsselten Laufwerk an. Die Dateien sollte ausschließlich root lesen können (chmod 700 keyfile1.key und chown root keyfile1.key)!
sudo dd if=/dev/urandom of=/root/keyfile1.key bs=256 count=1
Hiermit wird ein 256 Bit großes Keyfile aus Zufallswerten erzeugt. Der Speicherort ist hier /root/keyfile1.key, er sollte auf jeden Fall an einem verschlüsselten Ort gespeichert werden.
sudo cryptsetup luksAddKey /dev/sda1 /root/keyfile1.key
/dev/sda1 ist natürlich nur ein Vorschlag und sollte ggf. angepasst werden, wenn alles stimmt ergibt sich folgende Ausgabe:
Enter any LUKS passphrase: key slot 0 unlocked. Command successful.
Wenn man ganz ohne Passwörter auskommen will, gibt man beim formatieren des Datenträgers nur das Keyfile an:
cryptsetup luksFormat /dev/sda1 /root/keyfile1.key
sudo cryptsetup luksDelKey /dev/sda1 1
In neueren Version ist „luksDelKey“ als veraltet gekennzeichnet und wurde durch luksKillSlot ersetzt:
sudo cryptsetup luksKillSlot /dev/sda1 1
umount /media/stick
Nun sollte man die Datenträger vollständig unzugreifbar machen, sonst könnte ein anderer Benutzer den Datenträger ohne Passworteingabe mounten.
cryptsetup luksClose stick
oder das Shell-Skript (s.u.) benutzen.
Alle Datenträger lassen sich (wenn die jeweiligen Dateisystem bereits ausgehangen sind) mit
dmsetup remove_all
unzugreifbar machen.
http://www.saout.de/tikiwiki/tiki-index.php?page=dumount
Dieses Skript
Die Variablen
müssen an die richtigen Einstellungen angepasst werden.
#!/bin/sh mappername="secure" mpoint="/mnt/secure" if grep $mpoint /etc/mtab > /dev/null; then fuser -m $mpoint > /dev/null || (umount /mnt/secure/; cryptsetup remove $mappername) else echo $mpoint is not mounted! if [ -e /dev/mapper/$mappername ]]; then echo "Removing the mapper " $mappername cryptsetup remove $mappername fi fi
Mit dem Befehl dmsetup kann man schauen, ob verschlüsselte Datenträger vorhanden sind.
dmsetup info
sudo cryptsetup status home
(home ist der mapper-name) oder sehr ausführliche Header-Informationen mit verwendeten key-slots:
sudo cryptsetup luksDump /dev/hda4
.
Optional: Falls man einen RAID-Controller mit Migration-Funktion hat, kann dieser ohne Datenverlust neue Platten einbinden und damit die Kapazität erhöhen (hier z.B. Beispiel 3Ware:
sudo /usr/local/3ware/AMCC/CLI/tw_cli /c10/u0 migrate type=raid5 disk=3 autoverify
Partitionstabelle löschen und neue Partition über neue Gesammtgröße erstellen
sudo fdisk /dev/sda
p #Partitionstabelle anzeigen d #sda1 gelöscht (Daten werden nicht gelöscht sondern der Master boot record (MBR) n #mit den Vorgegebenen Werten eine Partition über die ganze platte erstellt w #Tabelle geschrieben q
cfdisk /dev/sd
Cryptsetup macht macht den resize automatisch:
sudo cryptsetup luksOpen /dev/sda1 sda
Dateisystemcheck muss vorher gemacht werden:
e2fsck -f /dev/mapper/sda1
Das ext3-Dateisystem wird an die neue Größe ausgedehnt:
sudo resize2fs -p /dev/mapper/sda1
optional nochmal checken:
e2fsck -f /dev/mapper/sda1
siehe auch: LUKS Partition vergrößern. (Ohne LVM)
News
Navigation