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 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 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 ===== 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 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 resize 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 [[DM-Crypt#vergrößern|vergrößern]] erfolgen. ====== Links ====== [[http://www.saout.de/tikiwiki/tiki-index.php|Wiki des dm-crypt - Autors]] \\ [[http://luks.endorphin.org/dm-crypt|Site des LUKS - Autors]] \\ http://gentoo-wiki.com/SECURITY_Encrypting_Root_Filesystem_with_DM-Crypt_with_LUKS \\