Table of Contents
Hier gibts alles zur Crypto-Schnittstelle des Linux-Device-Mappers, welcher mittels derer nicht nur Software-Raid, sondern auch Crypto-Filesystems verwalten kann.
Vorraussetzungen
Kernel-Config
Natürlich muss Support für den Device Mapper
und das darunterliegende Crypt Target
aktiv sein:
Device Drivers ---> Multi-device support (RAID and LVM) ---> <*> Device mapper support <*> Crypt target support
Zudem muss Support für (zumindest) den gewünschten Cipher-Algorithmus aktiv sein. Die vom aktuellen Kernel unterstützten Ciphers erfährt man mit: cat /proc/crypto Falls die gelieferte Ausgabe nicht befriedigt, nachbessern:
Cryptographic options ---> [...] <*> Blowfish cipher algorithm [...] <*> AES cipher algorithms [...]
Bringt es Vorteile, für den gewünschten Digest-Algorithmus ebenfalls Support im Kernel einzubinden? Schlecht ist es sicher nicht, aber wieso funktioniert es auch ohne?
Software
Generell muss cryptsetup
installiert werden, allerdings ist es sehr zu
empfehlen die Erweiterung LUKS (Linux Unified Key Setup)
zu benutzen,
da diese enorme Sicherheitsvorteile mit sich bringt. Zudem können mehrere
Passwörter verwendet werden, da das Passwort selbst vom eigentlichen Schlüssel
zur Kodierung 'nicht
' abhängt. Klar, dass dadurch ungeahnte Möglichkeiten
entstehen. Unter Gentoo kann cryptsetup
mit der LUKS
-Erweiterung simpel
aus dem Portage installiert werden:
emerge -av cryptsetup-luks
Einrichtung
Exemplarisches Vorgehen:
- Crypto-FS erzeugen mit
create
bzw.luksFormat
- Mapping erzeugen mit
create
bzw.luksOpen
- Formatieren des Mappings mit einem Dateisystem
- Mounten des Mappings, schreiben der Daten, Unmounten des Mappings
- Mapping schließen mit
remove
bzw.luksClose
- GOTO
2.
ESSIV
Richtig geil secure wird das ganze erst mit der essiv
-Erweiterung, allerdings
ist diese nur in Kombination mit LUKS
möglich. Dazu muss ein spezieller Cipher-String beim Erzeugen des Crypto-FS angegeben werden, z.B.:
cryptsetup -c "aes-cbc-essiv:sha256" luksFormat /dev/hda5 crypto_fs
Beispiele
Meist sagt ein Beispiel mehr als tausend Worte
Crypto-Loop
Das geht auch mit:
CONFIG_BLK_DEV_CRYPTOLOOP=y
allerdings ist DM-Crypt einiges sicherer als sein Vorgänger.
Das folgende kleine Beispiel sagt eigentlich alles nötige zum Thema Einrichten:
dd if=/dev/zero of=verysecret.loop bs=52428800 count=1 # erzeugt 50MB Datei
losetup /dev/loop0 verysecret.loop # erzeugt das Loop-Device cryptsetup -c blowfish -y -s 256 luksFormat /dev/loop0 # erzeugt das Crypto-FS -> enter new key -> verify new key cryptsetup luksOpen /dev/loop0 verysecret # öffnet das Crypto-FS -> enter key mkfs.xfs /dev/mapper/verysecret # erzeugt Dateisystem innerhalb des Crypto-FS mount /dev/mapper/verysecret /mnt # Crypto-FS mounten [...] umount /mnt # Crypto-FS unmounten cryptsetup luksClose verysecret # Tür zu!
Crypto-Partition
Hier ein Beispiel zum Erzeugen einer verschlüsselten Partition mit LUKS
,
essiv
, blowfish und einem 256bit langen key.
cryptsetup -y -c "blowfish-cbc-essiv:sha256" -s 256 luksFormat /dev/sda3 -> enter new key -> verify new key cryptsetup luksOpen /dev/sda3 crypt-fs -> enter key => generates the mapping /dev/mapper/crypt-fs mkfs.xfs -f /dev/mapper/crypt-fs mount /dev/mapper/crypt-fs /mnt/crypt-fs [...] umount /mnt/crypt-fs cryptsetup luksClose crypt-fs
Wartung
Key hinzufügen
Dank LUKS werden alle Keys auf dem verschlüsselten Device selbst abgelegt.
Daher benötigt luksAddKey
das 'Physikalische Device
' als Parameter:
cryptsetup luksAddKey <device>
Dann wird das Device geöffnet, dazu muss 'irgendeiner der bestehenden Keys
' eingegeben werden.
Key entfernen
Genauso simpel wie das Hinzufügen eines Keys:
cryptsetup luksDelKey <device> <Slot_Nr>
Die 'Slot_Nr
' wird beim hinzufügen eines Keys angezeigt, der erste Slot hat
die Nummer 0.
Device-Informationen anzeigen
Für Informationen über Verschlüsselung, registrierte Keys, freie Slots, etc.:
cryptsetup luksDump <device>
Devicegröße ändern
Perfekt für den Servereinsatz: 'die Änderung kann online durchgeführt werden
'.
Dieses Feature geht wunderbar Hand in Hand mit lvresize
und xfs_growfs
.
vergrößern
Nach dem Vergrößern des unterliegenden LVM's kann das crypto-fs vergrößert werden, hierzu ist zunächst die neue Größe des Datenträgers in Sektoren von Interesse:
fdisk -ul <devicepath>
von dem beim fdisk
-Aufruf zurückgelieferten Absolutwert muss dann der Offset
des crypto-fs abgezogen werden. Diesen kann man mit den cryptsetup
-Aktionen
status
oder luksDump
erfahren. Die Vergrößerung erfolgt dann so:
cryptsetup --size <size_in_sectors> resize <mapping_name>
Danach kann das im crypto-fs enthaltene Dateisystem vergrößert werden.
verkleinern
Um das crypto-fs zu verkleinern, muss zunächst das enthaltene Dateisystem verkleinert werden.
Danach kann die Größenänderung wie in vergrößern erfolgen.