Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:festplattenverschlüsselung [2009/02/07 18:05] – st | linux:festplattenverschlüsselung [2023/10/26 08:04] (aktuell) – [dauerhaft beim Booten mounten] st | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Festplattenverschlüsselung mit Luks ====== | ||
+ | Festplattenverschlüsselung, | ||
+ | Die einzelnen Schritte beziehen sich in diesem Kapitel alle auf LUKS (falls nicht anders angegeben). | ||
+ | |||
+ | ===== technische Hintergründe ===== | ||
+ | |||
+ | **Technisch** wird grundsätzlich eine Zwischenschicht installiert, | ||
+ | |||
+ | Nötige Kernelmodule: | ||
+ | - '' | ||
+ | - '' | ||
+ | - '' | ||
+ | |||
+ | Wenn man einen aktuellen Prozessor (Pentium und auf aufwärts + kompatible) einsetzt sollte man aus Geschwindigkeitsgründen immer statt aes das Modul " | ||
+ | |||
+ | 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** ('' | ||
+ | |||
+ | Bei [[linux: | ||
+ | |||
+ | {{ linux: | ||
+ | |||
+ | |||
+ | Eine **Verschlüsselung auf Datei- oder Verzeichnisebene ** lässt sich mit GNU PG (PGP) erreichen, Zusatzprogramme wie [[http:// | ||
+ | |||
+ | |||
+ | :!: Mit [[software: | ||
+ | |||
+ | :!: Eine gute und für Windows und Linux erhältliche Alternative ist [[Software: | ||
+ | |||
+ | ^ Datenträgerverschlüsselung | ||
+ | | ^ dateiweise ^ komplettes Dateisystem ^ | ||
+ | | Kernelspace | eCryptfs (experimentell) | dm-crypt, dm-crypt/ | ||
+ | | Userspace | CryptoFS, EncFS | | | ||
+ | |||
+ | |||
+ | ===== Zugriff von einer Live-CD ===== | ||
+ | |||
+ | Von einer [[ubuntu: | ||
+ | |||
+ | <code bash> | ||
+ | #!/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 / | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Warum Datenträgerverschlüsselung? | ||
+ | Datenträgerverschlüsselung kann in vieler Hinsicht Sinn machen: | ||
+ | |||
+ | * Niemand soll meine Daten lesen können. | ||
+ | * Es soll nicht möglich sein nachzuweisen, | ||
+ | * Niemand soll gezielt verschlüsselte Daten manipulieren können. | ||
+ | * Niemand soll nachweisen können, dass ich in letzter Zeit bestimmte Daten geschrieben habe. | ||
+ | |||
+ | 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/ | ||
+ | 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 (" | ||
+ | |||
+ | Auch die Auslagerungspartition sollte verschlüsselt sein, da hier sensible Informationen ausgelagert sein könnten. | ||
+ | |||
+ | :!: TIP: Die " | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Links ===== | ||
+ | * [[windows: | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== dm-crypt ==== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | === LUKS === | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== loop-AES (veraltet) ==== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== andere Ansätze ==== | ||
+ | * [[wpde> | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Verschlüsselung bei Luks ===== | ||
+ | |||
+ | * CBC | ||
+ | * gut erforscht, zuverlässig | ||
+ | * anfällig gegen " | ||
+ | * ab [[linux: | ||
+ | * LRW: | ||
+ | * sollte prinzipiell schneller als CBC sein, auf dem [[ubuntu: | ||
+ | * sicherer (als CBC) | ||
+ | * seit längerem unterstützt (ab [[linux: | ||
+ | |||
+ | ==== verschlüsselte Datenträger öffnen ==== | ||
+ | Der Zugriff erfolgt über einen sog. " | ||
+ | |||
+ | - **den Container/ | ||
+ | - **mit Passwort**: <code bash> | ||
+ | - **mit Keyfile**: <code bash> | ||
+ | - das **Dateisystem mounten**: < | ||
+ | |||
+ | |||
+ | === dauerhaft beim Booten mounten === | ||
+ | Wenn in der Datei ''/ | ||
+ | < | ||
+ | # <target name> <source device> | ||
+ | home / | ||
+ | </ | ||
+ | dann reicht: | ||
+ | mount / | ||
+ | Wenn man beim booten das Passwort falsch eingegeben hat, kann man die Abfrage durch den Befehl | ||
+ | |||
+ | systemctl restart cryptsetup.target | ||
+ | neu starten ((früher / | ||
+ | |||
+ | :!: Bei der Verwendung von Key-Files trägt man in der ''/ | ||
+ | < | ||
+ | # <target name> <source device> | ||
+ | home / | ||
+ | </ | ||
+ | den Dateinamen und Pfad in der 3. Spalte ein (im Beispiel ''/ | ||
+ | |||
+ | :!: Wenn man (wie es jetzt eigentlich aktuell ist) anstatt der alten Angabe von /dev/sda2 die sich nicht änderbare UUID für [[wpde> | ||
+ | - muss man diese mit '' | ||
+ | - diese Zeile in die crypttab eintragen: | ||
+ | < | ||
+ | NAME / | ||
+ | </ | ||
+ | Die UUID (fbbb34d4-06b9-40d6-84ee-ad714579fcc6) muss natürlich durch die passende ersetzt werden. | ||
+ | |||
+ | === Passwort remote bei vollverschlüsseltem System eingeben === | ||
+ | |||
+ | [[https:// | ||
+ | ==== Anlegen eines verschlüsselten Datenträgers ==== | ||
+ | |||
+ | Hier wird kurz die Einrichtung eines verschlüsselten USB-Stick besprochen, der unter den verschiedenen Betriebssystem gleichmaßen angesprochen werden kann. | ||
+ | |||
+ | === luksformat wrapper === | ||
+ | |||
+ | Wenn man nicht alle Schritte manuell durchführen will, hilft auch das Perl-Skript ''/ | ||
+ | |||
+ | Der Aufruf erfolgt nach folgendem Muster: < | ||
+ | |||
+ | Für die 1.SATA-Festplatte und Formatierung mit ext4 sollte die Installation so aussehen: | ||
+ | |||
+ | <code bash> | ||
+ | < | ||
+ | Erstelle verschlüsselte Partition auf / | ||
+ | |||
+ | WARNING! | ||
+ | ======== | ||
+ | Hiermit überschreiben Sie Daten auf »/ | ||
+ | |||
+ | Are you sure? (Type uppercase yes): YES | ||
+ | Passphrase eingeben: | ||
+ | Passphrase wiederholen: | ||
+ | Bitte zum verifizieren das Passwort erneut eingeben | ||
+ | Geben Sie die Passphrase für »/ | ||
+ | mke2fs 1.42.13 (17-May-2015) | ||
+ | Ein Dateisystems mit 488377856 (4k) Blöcken und 122101760 Inodes wird erzeugt. | ||
+ | UUID des Dateisystems: | ||
+ | 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: | ||
+ | Inode-Tabellen werden geschrieben: | ||
+ | Das Journal (32768 Blöcke) wird angelegt: erledgt | ||
+ | Die Superblöcke und die Informationen über die Dateisystemnutzung werden | ||
+ | geschrieben: | ||
+ | </ | ||
+ | |||
+ | |||
+ | === manuelle Einrichtung === | ||
+ | |||
+ | Wenn man die **Schritte manuell** eingeben will, dann geht ab hier los; die ausführliche Version gibts auf dieser Seite: [[http:// | ||
+ | Bei mir ist der Stick das Gerät /dev/sda1 (unverschlüsselt) und sda2 (verschlüsselt), | ||
+ | |||
+ | |||
+ | - < | ||
+ | - den Container/ | ||
+ | - das **Dateisystem fat32 anlegen** (damit alle Betriebssysteme schreibunterstützung haben): < | ||
+ | - das **Dateisystem mounten**: < | ||
+ | - Änderungen vornehmen (Dateien kopieren, ändern, ...) | ||
+ | |||
+ | === Passwörter hinzufügen / entfernen === | ||
+ | |||
+ | * **Passwörter hinzufügen**: | ||
+ | < | ||
+ | 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. | ||
+ | |||
+ | * **Passwörter entfernen**: | ||
+ | < | ||
+ | Im Beispiel wird der KeySlot 1 auf der Partition /dev/sda1 gelöscht. | ||
+ | |||
+ | ==== Keyfiles hinzufügen / entfernen ==== | ||
+ | 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 ('' | ||
+ | |||
+ | * **Keyfile erzeugen**: | ||
+ | < | ||
+ | Hiermit wird ein 256 Bit großes Keyfile aus Zufallswerten erzeugt. Der Speicherort ist hier ''/ | ||
+ | * **Keyfile hinzufügen**: | ||
+ | /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. | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Wenn man ganz ohne Passwörter auskommen will, gibt man beim formatieren des Datenträgers nur das Keyfile an: | ||
+ | cryptsetup luksFormat /dev/sda1 / | ||
+ | |||
+ | * **Keyfiles entfernen** geht allgemein anhand des Keyslots (wie oben): < | ||
+ | |||
+ | |||
+ | |||
+ | ==== Datenträger auswerfen ==== | ||
+ | - Dateisystem aushängen: < | ||
+ | - den verschlüsselten Datenträger aus dem den Mapper entfernen: < | ||
+ | |||
+ | :!: Alle Datenträger lassen sich (wenn die jeweiligen Dateisystem bereits ausgehangen sind) mit < | ||
+ | |||
+ | === Shell-Skript zum Auswerfen eines verschlüsselten Dateisystems === | ||
+ | http:// | ||
+ | |||
+ | Dieses Skript | ||
+ | * wirft den Datenträger aus (unmount) | ||
+ | * entfernt den " | ||
+ | |||
+ | Die Variablen | ||
+ | - mappername | ||
+ | - mpoint | ||
+ | müssen an die richtigen Einstellungen angepasst werden. | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | |||
+ | mappername=" | ||
+ | mpoint="/ | ||
+ | |||
+ | if grep $mpoint /etc/mtab > /dev/null; then | ||
+ | fuser -m $mpoint > /dev/null || (umount / | ||
+ | else | ||
+ | echo $mpoint is not mounted! | ||
+ | if [ -e / | ||
+ | echo " | ||
+ | cryptsetup remove $mappername | ||
+ | fi | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | ==== Informationen anzeigen ==== | ||
+ | |||
+ | Mit dem Befehl dmsetup kann man schauen, ob verschlüsselte Datenträger vorhanden sind. | ||
+ | * Informationen über sämmtliche (verschlüsselte und eingehangene) Datenträger< | ||
+ | * Informationen über einzelne (verschlüsselte und eingehangene ) Datenträger: | ||
+ | < | ||
+ | oder sehr ausführliche Header-Informationen mit verwendeten key-slots: | ||
+ | < | ||
+ | |||
+ | ==== verschlüsselte Datenträger vergrößern ohne LVM ==== | ||
+ | |||
+ | Optional: Falls man einen RAID-Controller mit Migration-Funktion hat, kann dieser ohne Datenverlust neue Platten einbinden und damit die Kapazität erhöhen. | ||
+ | |||
+ | * fdisk (bei Partitionen bis 2 TB):< | ||
+ | p # | ||
+ | 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 # | ||
+ | q | ||
+ | </ | ||
+ | * bei GPT-Partitionen funktioniert cfdisk:< | ||
+ | |||
+ | Cryptsetup macht macht den resize automatisch: | ||
+ | sudo cryptsetup luksOpen /dev/sda1 sda | ||
+ | Dateisystemcheck muss vorher gemacht werden: | ||
+ | e2fsck -f / | ||
+ | Das ext3-Dateisystem wird an die neue Größe ausgedehnt: | ||
+ | sudo resize2fs -p / | ||
+ | optional nochmal checken: | ||
+ | e2fsck -f / | ||
+ | |||
+ | siehe auch: [[http:// | ||
+ | |||
+ | |||
+ | ==== verschlüsselte Datenträger verkleinern ==== | ||
+ | |||
+ | <code bash> |