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 gesamte 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
systemctl restart cryptsetup.target
neu starten 1).
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
.
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 ext4 sollte die Installation so aussehen:
sudo luksformat -t ext4 /dev/sda1
Erstelle verschlüsselte Partition auf /dev/sda1... WARNING! ======== Hiermit überschreiben Sie Daten auf »/dev/sda1« unwiderruflich. Are you sure? (Type uppercase yes): YES Passphrase eingeben: Passphrase wiederholen: Bitte zum verifizieren das Passwort erneut eingeben Geben Sie die Passphrase für »/dev/sda1« ein: mke2fs 1.42.13 (17-May-2015) Ein Dateisystems mit 488377856 (4k) Blöcken und 122101760 Inodes wird erzeugt. UUID des Dateisystems: ed9576ad-a5db-476d-9874-e58da239f6b5 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 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
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 luksFormat /dev/sda1
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.
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)
pvresize --setphysicalvolumesize 40G /dev/sda1