Debian/Ubuntu Home-Directory-Verschlüsselung
Ubuntu-Wiki: http://wiki.ubuntuusers.de/System_verschl%C3%BCsseln
Das ganze System verschlüsseln unter Ubuntu
Das Problem der eindeutigen Zuordnung bei ext. Laufwerken
apt-get install cryptsetup
http://www.andreas-janssen.de/cryptodisk.html#a1
LUKS-Partition vorbereiten Im Folgenden werde ich an einem Beispiel erklären, welche Befehle benötigt werden um eine verschlüsselte Partition mit dm-crypt/LUKS einzurichten und zu verwenden.
Vorbereitung: Es wird eine verfügbare Partition oder ein leeres Logical Volume benötigt. Es ist *nicht* möglich, eine bestehende Partition ohne Verlust aller auf ihr gespeicherten Daten zu verschlüsseln.
Vor der Initialisierung kann die Partition mit Zufallswerten überschrieben werden. Von außen kann man später die verschlüsselten Daten nicht von den leeren Bereichen mit Zufallswerten unterscheiden. Außerdem werden dabei alte noch vorhandene Datenreste überschrieben.
Achtung: Nach einmaligem Überschreiben kann man nicht mehr über ein herkömmliches Datenrettungsprogramm an die Datenreste gelangen, aufwändigere Methoden (bei denen die Festplatte im allgemeinen zerlegt werden muss) können das unter Umständen immer noch! Um noch vorhandene Daten wirklich unwiderruflich zu löschen muss die Partition mehrmals überschrieben werden. Es gibt unterschiedliche Meinungen darüber wie oft das nötig ist, ich gehe hier nicht weiter auf dieses Thema ein.
In meinem Beispiel wird nun die Partition /dev/hda3 mit Zufallswerten überschrieben. Dazu dient /dev/urandom als Quelle:
dd if=/dev/urandom of=/dev/hda3 bs=10M
liest jeweils Blöcke von 10 Megabytes Größe aus /dev/urandom und schreibt diese dann auf die Platte, solange bis die Partition voll ist.
Nachdem die Partition vorbereitet wurde muss sie nun über cryptsetup initialisiert werden. Praktischerweise gibt es ein kleines Skript namens luksformat, welches dieses mit vernünftigen Voreinstellungen für die Verschlüsselung erledigt. Außerdem legt es zusätzlich noch ein Dateisystem auf der Partition an. Da die Partition nur unter Linux benutzt werden soll werde ich das ext3-Dateisystem verwenden:
sirius:~# luksformat -t ext3 /dev/hda3 creating encrypted device on /dev/hda3 WARNING! ======== Daten auf /dev/hda3 werden unwiderruflich überschrieben. Are you sure? (Type uppercase yes): YES
luksformat fragt nach einem Passwort für die Partition, welches insgesamt dreimal eingegeben werden muss. Abschließend entsperrt es die Partition, legt ein ext3-Dateisystem an und sperrt sie dann wieder.
Statt luksformat könnte man auch direkt cryptsetup benutzen, die entsprechenden Befehle wären:
cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 /dev/hda3 cryptsetup luksOpen /dev/hda3 luksformatxxx mkfs.ext3 /dev/mapper/luksformatxxx cryptsetup luksClose /dev/mapper/luksformatxxx
Damit sind die Vorbereitungen angeschlossen und die Partition kann verwendet werden.
Um die Partition nun zu mounten muss sie entsperrt werden. Dabei wird das Passwort oder der Schlüssel angegeben. cryptsetup konfiguriert den Device Mapper entsprechend, so daß dieser die verschlüsselte Partition mit einer Gerätedatei in /dev/mapper verknüpft, welche dann ganz normal mit mount eingehängt werden kann. Der Name dieser Datei ist frei wählbar, zur Übersichtlichkeit benutze ich hda3_crypt:
sirius:~# cryptsetup luksOpen /dev/hda3 hda3_crypt Enter LUKS passphrase: key slot 0 unlocked. Command successful sirius:~# ls /dev/mapper control hda3_crypt
Die Partition ist damit entsperrt. Alle Zugriffe auf /dev/mapper/hda3_crypt laufen nun durch den Device Mapper. Erfolgt ein Schreibzugriff auf hda3_crypt so werden die Daten verschlüsselt und dann auf hda3 gespeichert. Erfolgt ein Lesezugriff auf hda3_crypt wird der passende Datenblock von hda3 gelesen, entschlüsselt und dann ausgegeben. Die Partition kann mit mount eingehängt werden:
sirius:~# mount /dev/mapper/hda3_crypt /mnt sirius:~# mount | grep hda3 /dev/mapper/hda3_crypt on /mnt type ext3 (rw)
Wie man sehen kann benötigt mount keine Informationen über die Verschlüsselung, es verwendet einfach das vom Device Mapper erstellte Gerät wie eine normale Partition.
Nach dem Entsperren kann man über dieses Gerät auf alle Daten auf der Partition zugreifen. Möchte man die Partition vorübergehend nicht mehr verwenden kann man sie sperren - dazu wird sie ausgehängt und anschließend die Device-Mapper-Verknüpfung gelöscht:
sirius:~# umount /mnt sirius:~# cryptsetup luksClose /dev/mapper/hda3_crypt sirius:~# ls /dev/mapper control
Auf die oben beschriebene Art und Weise kann man die verschlüsselten Partitionen von Hand aktivieren und deaktivieren. Auf die Dauer ist das aber sehr lästig. cryptsetup sieht allerdings eine Möglichkeit vor, Partitionen automatisch beim Hochfahren des Systems zu entsperren. Dazu trägt man diese in der Datei /etc/crypttab ein. Folgende Informationen können dort eingetragen werden:
Der Name der Device-Mapper-Verknüpfung, hier also hda3_crypt
Der Name der verschlüsselten Partition, hier /dev/hda3
Der Pfad zu einer Schlüsseldatei, oder bei Verwendung eines Passwortes stattdessen none
Angaben über die verwendete Verschlüsselung - da diese Informationen bei LUKS im Anfangsbereich der Partition gespeichert werden in diesem Fall einfach nur luks
Die komplette Zeile für das oben genannte Beispiel würde also so aussehen:
# <target name> <source device> <key file> <options> hda3_crypt /dev/hda3 none luks
Beim nächsten Neustart des Systems wird cryptsetup automatisch die Partition entsperren und dabei nach dem Passwort fragen. Um die Partition beim Systemstart automatisch einzuhängen muss nur noch ein Eintrag in der /etc/fstab angelegt werden, zum Beispiel:
/dev/mapper/hda3_crypt /mnt ext3 auto,defaults 0 0
Die Disk kann nicht auch über die UUID eingebunden werden. cryptsetup kennt kein UUID (das wird beim formatieren oder partitionieren des Laufwerks vergeben).
Daher sollte man bei ext. USB-Laufwerken über die Hotplug-Rules anhand der Seriennummer gehen: usb-rules . Die Seriennummer ist unabhängig von der Partition und steht schon vor dem mounten fest.
Die UUID (nicht Seriennummer) würde man so rausbekommen:
sudo blkid
Im vorangegangenen Beispiel wurde ein Passwort zum Entsperren der verschlüsselten Partition benutzt. Der Debian-Installer kann ebenfalls nur verschlüsselte Partitionen mit Passwörtern einrichten (oder, im Falle von Swap, mit Zufallsschlüsseln).
Alternativ kann man aber auch eine Datei, zum Beispiel auf einem USB-Stick, als Schlüssel verwenden. Während man bei der Benutzung von Passwörtern diese (für jede verschlüsselte Partition) beim Hochfahren eintippen muss, bleibt einem bei Schlüsseldateien diese Arbeit erspart - man muss nur dafür sorgen, daß auf den Schlüssel zugegriffen werden kann (zum Beispiel indem der USB-Stick eingesteckt wird).
Wie oben geschrieben kann man für eine LUKS-Partition bis zu acht Passwörter oder Schlüssel verwenden. Vom Debian-Installer oder von luksformat angelegte Partitionen können also mit einer Schlüsseldatei nachgerüstet werden. Die dazu nötigen Schritte lassen sich mit cryptsetup erledigen. Zunächst einmal muss aber eine Schlüsseldatei erstellt werden. Sie sollte nicht zu klein sein (unsicher), aber auch nicht zu groß (lange Dauer beim Entsperren). Ich verwende eine vier kilobyte große Datei:
sirius:~# dd if=/dev/urandom of=/media/usb/key bs=4k count=1 1+0 Datensätze ein 1+0 Datensätze aus 4096 Bytes (4,1 kB) kopiert, 0,0018383 Sekunden, 2,2 MB/s
Als nächstes muss der Schlüssel der LUKS-Partition hinzugefügt werden. Dabei wird das bestehende Passwort eingegeben und damit dann der Datenschlüssel dechiffriert. Dann wird er durch die Schlüsseldatei neu chiffriert und in einer freien Speicherstelle gesichert:
cryptsetup luksAddKey /dev/hda3 /media/usb/key Enter any LUKS passphrase: key slot 0 unlocked. Command successful
Nun kann testweise die Partition mit dem neuen Schlüssel statt dem Passwort entsperrt werden:
sirius:~# cryptsetup luksOpen /dev/hda3 hda3_crypt --key-file /media/usb/key key slot 1 unlocked. Command successful
Damit kann die Partition ähnlich wie mit einem Passwort manuell entsperrt werden. Dieser Vorgang lässt sich aber auch über die crypttab automatisieren. An dieser Stelle kommt nun diekeyfile-Option ins Spiel. Aus dem vorherigen Beispiel wird:
# <target name> <source device> <key file> <options> hda3_crypt /dev/hda3 /media/usb/key luks
Das ist allerdings noch nicht alles. cryptsetup muss angewiesen werden, das Medium mit dem Schlüssel vor dem Abarbeiten der crypttab zu mounten. Dazu muss es einen Eintrag für das Medium in der /etc/fstab geben, außerdem muss die der Mountpunkt in /etc/default/cryptdisks eingetragen werden:
CRYPTDISKS_MOUNT="/media/usb"
Nach dem Entsperren aller verschlüsselten Partitionen wird das Medium automatischwieder ausgehängt. Zur Sicherheit kann nun noch die initial ram disk neu gebaut werden:
update-initramfs -u
Das Passwort kann auch weiterhin als Ersatz beibehalten (oder mit cryptsetup luksDelKey entfernt) werden.
Ist der USB-Stick mit dem Schlüssel eingesteckt, fährt das System ohne Benutzereingaben hoch und entsperrt alle in der crypttab eingetragenen Partitionen selbstständig. Diese Konfiguration funktioniert für alle Partitionen außer der Root-Partition. Da auf dieser Partition gerade die zum Entsperren notwendigen Programme liegen sind hier einige weitere Maßnahmen notwendig.
DATEN VERSCHLÜSSELN mit DM-Crypt für Linux http://www.anon-web.de/daten_verschluesseln_dm-crypt_1.htm 1. Benötigte Software DM-Crypt ist seit Version 2.6.4 fester Bestandteil des Linux-Kernels und somit in allen aktuellen Distributionen enthalten. Es nutzt den Device-Mapper. Das Tool cryptsetup (mit LUKS Support!) kann zum Erstellen, Öffnen und Schließen der verschlüsselten Container eingesetzt werden. Aktuelle Distributionen enthalten es: Debian GNU/Linux im Packet „cryptsetup“, SuSE-Linux im Packet „util-linux-crypto“. Für OpenSuSE 10.0 und älter bietet das Packman-Repository → ein aktuelles Packet mit LUKS Support.
Einige Distributionen installieren das Tool unter dem Namen cryptsetup-luks. Die im folgenden beschrieben Befehlen sind dann entsprechend anzupassen. Besser wäre es, einen Link zu erstellen. Dann funktionieren auch die Scripte „mount.crypt“ und „umount.crypt“ aus der Sammlung pam-mount. # ln -s /usr/sbin/cryptsetup-luks /sbin/cryptsetup Die Sammlung pam-mount enthält Scripte, welche das Öffnen und Schließen verschlüsselter Container vereinfachen. Aktuelle Distributionen enthalten es. Benötigt wird mindestens die Version 0.13. Von der Pam-Mount Website → kann ein aktuelles Source-Archiv heruntergeladen werden, welches für nahezu alle Distributionen passt.
Das Tool sudo vereinfacht die Nutzung der pam-mount Scripte. Die Nutzung von „sudo“ ist in verschiedenen Distributionen sehr unterschiedlich. Während Ubuntu es für fast alles nutzt, was mit root-Rechten ausgeführt wird, muss man unter SuSE-Linux das Paket „sudo“ erst installieren und evtl. konfigurieren.
In der Datei „/etc/sudoers“ wird festgelegt, wer welches Kommando mit root-Rechten ausführen darf. Die folgende Zeile erlaubt es allen Nutzern, verschlüsselte Container einzubinden und wieder zu schließen. %users ALL=NOPASSWD: /sbin/mount.crypt, /sbin/umount.crypt Die Datei ist mit dem Kommando „visudo“ als „root“ zu editieren. Für alle, die mit dem Editor vi nicht vertraut sind, ein kurzer Ablauf einer Session: Nach dem Start von „visudo“ wechselt man mit der Taste <i> in den Editiermodus. Der Editiermodus wird mit der Taste <ESC> wieder verlassen. Anschließend wird die Datei mit „:w <ENTER>“ gespeichert. Der Editor wird mit „:w <ENTER>“ beendet. 2. Gedanken zum Passwort An Stelle von „Passwort“ sollte man vielleicht die Bezeichnung „Passphrase“ bevorzugen. Sie suggeriert, dass es auch ein wenig länger sein darf und dass Leerzeichen durchaus erlaubt sind.
Eine gute Passphrase sollte leicht merkbar aber schwer zu erraten sein. Außer Buchstaben sollte sie auch Zahlen und Sonderzeichen enthalten und etwa 20 Zeichen lang sein. Soetwas schüttelt man nicht einfach aus dem Ärmel. Wie wäre es mit folgender Phrase: „das geht nur %mich% _AN_“ Oder als noch brauchbare Kurzform: „dgn%m%_A_“ Die LUKS-Erweiterung von „cryptsetup“ erlaubt es, bis zu 8 Passwörter zum Öffnen eines Containers zu nutzen. Damit ist es möglich, mehreren Nutzern den Zugriff mit einem eigenen Passwort zu erlauben.
Soll ein verschlüsselter Container mit dem Login eines Nutzers automatisch geöffnet werden, muss eines der 8 möglichen Passwörter mit dem Login-Passwort des Nutzers identisch sein. Login-Manager wie KDM oder GDM können das eingegebene Passwort an das pam-mount Modul weiterreichen. Dieses Feature kann beispielsweise für ein verschlüsseltes /home genutzt werden.
WICHTIG: bei Änderung des Login-Passwortes muss auch das Paswort für den Container geändert werden. Sie werden nicht automatisch synchronisiert.
3. Verschlüsselten Container erstellen Zum Aufwärmen soll zuerst die Erstellung einer verschlüsselten Containerdatei beschrieben werden. Für die Erstellung eines Containers sind immer root-Rechte erforderlich. Zuerst ist ein leeres Image zu erstellen. Im Beispiel wird es unter dem Dateinamen „geheim.img“ im aktuellen Verzeichnis erstellt. Der Parameter „count“ legt die Größe in MByte fest. Anschließend ist das Image als Loop-Device einzubinden: # dd if=/dev/zero of=geheim.luks bs=1M count=100 # losetup /dev/loop5 geheim.luks Die Dateiendung kann beliebig gewählt werden, ich würde aber „.luks“ empfehlen, um die Orientierung zu erleichtern. Die ersten 2 MByte sind mit Zufallswerten zu füllen. Das Füllen der gesamten Datei würde sehr lange dauern und ist nicht nötig: # dd if=/dev/urandom of=/dev/loop5 bs=1M count=2 Anschließend erfolgt die LUKS-Formatierung mit der Festlegung der Verschlüsselung. Die Option -y veranlaßt eine doppelte Abfrage des Passwortes: # cryptsetup luksFormat -c aes-cbc-essiv:sha256
Das formatierte Device wird dem Device-Mapper unterstellt. Dabei wird das zuvor eingegebene Passwort abgefragt. Der <name> kann frei gewählt werden. Unter /dev/mapper/<name> wird später auf den verschlüsselten Container zugegriffen: # cryptsetup luksOpen /dev/loop5 <name> Das verschlüsselte Volume wird mit Nullen gefüllt, die verschlüsselt nicht von Zufallszahlen zu unterscheiden sind. Besser wäre es wahrscheinlich, Zufallszahlen zu verwenden und statt „/dev/zero“ als Input „/dev/random“ zu nutzen, ddas dauert jedoch deutlich länger: # dd if=/dev/zero of=/dev/mapper/<name> Ein Dateisystem wird auf dem Volume angelegt: # mkfs.ext3 /dev/mapper/<name> Das Volume ist nun vorbereitet und wird wieder geschlossen: # cryptsetup luksClose <name> Die Containerdatei wird ausgehängt: # losetup -d /dev/loop5 Soll eine gesamte Partition verschlüsselt werden (Festplatte oder USB-Stick), entfallen die Schritte 1 und 8. Das in den Schritten 2-7 als Beispiel genutzte Device „/dev/loop5“ ist durch die Partition zu ersetzen, beispielsweise „/dev/hda5“ oder „/dev/sdb1“. Außerdem sollte ein Backup der Daten zuvor erfolgen.
4. Passwörter verwalten Mit root-Rechten ist es möglich, bis zu 7 zusätzliche Passwörter für das Öffnen eines Containers festzulegen oder einzelne Passwörter wieder zu löschen.
Für das Hinzufügen eines Passwortes zu der verschlüsselten Imagedatei „geheim.img“ im aktuellen Verzeichnis ist diese zuerst einzuhängen, beispielsweise als „/dev/loop5“. Dieser Schritt entfällt für Partitionen: # losetup /dev/loop5 geheim.luks Das Hinzufügen eines Passwortes und damit eines neuen Keyslots erfolgt mit folgendem Kommando, wobei als <device> beispielsweise „/dev/loop5“ für eine eingebundene Imagedatei oder „/dev/hda5“ für eine Festplattenpartition anzugeben ist: # cryptsetup luksAddKey <device> Ein Keyslot und das zugehörige Passwort können mit folgendem Kommando wieder entfernt werden: # cryptsetup luksDelKey <device> <slot> Als <slot> ist die Nummer des Keyslots anzugeben, eine Zahl zwischen 0..7. Es ist also nötig, sich zu merken, welches Passort auf welchem Keyslot gelegt wurde.
5. Container öffnen/schließen Das Öffnen einer Containerdatei auf der Kommadozeile erfordert drei Schritte als „root“. Als erstes ist die verschlüsselte Imagedatei einzuhängen. Dieser Schritt entfällt für Partitionen. Im zweiten Schritt ist das verschlüsselte Device dem Device-Mapper zu unterstellen. Der Name kann dabei frei gewählt werden. Im dritten Schritt kann es mit „mount“ in das Dateisystem eingehängt werden, beispielsweise nach „/mnt“. # losetup /dev/loop5 geheim.luks # cryptsetup luksOpen /dev/loop5 <name> # mount /dev/mapper/<name> /mnt Das Schließen des Containers erfolgt in umgekehrter Reihenfolge: # umount /mnt # cryptsetup luksClose <name> # losetup -d /dev/loop5 5.1 Etwas kürzer mit mount.crypt Die Sammlung pam-mount enthält zwei Scripte, welche die Arbeit mit verschlüsselten Containern vereinfachen. Wurde außerdem „sudo“ entsprechend konfiguriert, stehen die folgenden Kommandos jedem Nutzer zur Verfügung.
Die verschlüsselte Imagedatei „geheim.luks“ im aktuellen Verzeichnis könnte mit folgender Befehlszeile unter „/mnt“ in das Dateisystem eingehängt werden: > sudo /sbin/mount.crypt geheim.luks /mnt -o loop Eine verschlüsselte Partition (beispielsweise /dev/hda5) kann mit folgendem Kommando geöffnet werden: > sudo /sbin/mount.crypt /dev/hda5 /mnt Geschlossen wird der Container mit folgendem Komando: > sudo /sbin/umount.crypt /mnt
6. Container komfortabel beim Login öffnen Mit Hilfe des Modules pam-mount ist es möglich, das Anmeldepasswort eines Nutzers zu nutzen, um standardmäßig beim Login einen oder mehrere Container zu öffnen. Insbesondere für verschlüsselte „/home“ Partitionen ist dies sinnvoll und komfortabel.
Folgende Konfigurationen sind für einen Crypto-Login anzupassen: PAM-Konfiguration: Dem PAM-Dämon ist mitzuteilen, dass er das Modul „mount“ zu verwenden hat und das Login-Paswort zu übergeben ist. In den Dateien „/etc/pam.d/xdm“, „/etc/pam.d/kdm“ oder „/etc/pam.d/gdm“ sind folgende Zeilen nach dem letzten session Eintrag hinzuzufügen: auth optional pam_mount.so use_first_pass session optional pam_mount.so use_first_pass pam-mount Modul: Das Modul wird in der Datei „/etc/security/pam_mount.conf“ konfiguriert. Das Source-Archiv enthält im Verzeichnis conf eine Vorlage.
In dieser Datei sind die Kommandos für das Ein- und Aushängen verschlüsselter Volumes zu konfigurieren (bei mir in Zeile 102). Sollen verschlüsselte Partitionen beim Login eingebunden werden (z.B. als „/home“) sind folgende Zeilen einzutragen: cryptmount /sbin/mount.crypt %(VOLUME) %(MNTPT) Werden verschlüsselte Image-Dateien genutzt, z.B. als $HOME für einzelne Nutzer, ist die Option „-o loop“ für das Einbinden hinzuzufügen: cryptmount /sbin/mount.crypt %(VOLUME) %(MNTPT) -o loop Außerdem ist am Ende der Datei hinzuzufügen, welche Volumes bei Anmeldung geöffnet werden sollen. Im ersten Beispiel wird für alle Mitglieder der Gruppe „users“ die Partition „/dev/hda4“ als /home eingebunden.: volume users crypt - /dev/hda4 /home - - - Das zweite Beispiel zeigt die Einbindung einer verschlüsselten Containerdatei als $HOME für den User „pitschie“: volume pitschie crypt - /geheim.luks /home/pitschie - - - WICHTIG: die vier Minuszeichen nicht unterschlagen! login.defs: Um zu gewährleisten, dass die eingehängten Volumes nach dem Abmelden auch wieder geschlossen werden, ist in der Datei „/etc/login.defs“ folgende Option zu setzen: CLOSE_SESSIONS yes fstab: Da beim Booten beispielsweise das Verzeichnis „/home“ nicht mehr eingebunden werden soll, ist der entsprechende Eintrag in der Datei „/etc/fstab“ zu löschen.
5. Container öffnen/schließen (Basic)
6. Container öffnen/schließen (Login) > swap und /tmp verschlüsseln 8. Debian komplett verschlüsseln
7. swap und /tmp verschlüsseln Das /tmp-Verzeichnis und der SWAP Bereich können unter Umständen persönliche Informationen enthalten, die im Verlauf der Arbeit mit dem Laptop dorthin ausgelagert wurden.
Beide Bereiche können im Bootprozess als neue verschlüsselte Partitionen mit einem zufälligen Passwort initialisiert und eingebunden werden. Mit dem Ausschalten des Rechners ist das Passwort verloren und ein Zugriff auf diese Daten nicht mehr möglich.
Achtung: Suspend-to-RAM und Suspend-to-Disk funtionieren mit einer verschlüsselten SWAP-Partition noch nicht. Die Community arbeitet jedoch an diesem Problem. 6.1 Debian GNU/Linux Debian und Ubuntu enthalten ein Init-Script, welches eine einfache Verschlüsselung der swap und /tmp Bereiche ermöglicht, wenn diese auf einer eigenen Partition liegen.
In der Datei „/etc/crypttab“ sind die folgenden Zeilen hinzuzufügen, wobei „/dev/hda5“ und „/dev/hda8“ durch die jeweils genutzten Partitionen zu ersetzen sind: cryptswp /dev/hda5 /dev/urandom swap crypttmp /dev/hda8 /dev/urandom tmp In der Datei „/etc/fstab“, welche die beim Bootprozess zu mountenden Partitionen enthält, sind die Einträge für swap und /tmp anzupassen: /dev/mapper/cryptswp none swap sw 0 0 /dev/mapper/crypttmp /tmp ext2 defaults 0 0 Anschließend ist der Rechner neu zu booten und beide Partitionen sind verschlüsselt.
5. Container öffnen/schließen (Basic)
6. Container öffnen/schließen (Login) 7. swap und /tmp verschlüsseln > Debian komplett verschlüsseln
8. Debian GNU/Linux komplett verschlüsseln
In einem komplett verschlüsselten Sytem sind sowohl die Daten als auch die Systemkonfiguration und Software verschlüsselt. Die folgende Anleitung wurde mit Debian 4.0 (etch) getestet, sie sollte auch mit den Ubuntus funktionieren. Für SuSE und Red Hat sind Anpasungen nötig.
Da kein Rechner von einem verschlüsselten Dateisystem booten kann, liegen der Bootloader und die initrd auf einem unverschlüsselten USB-Stick, der sicher aufzubewahren ist. Eine komlette Verschlüsselung ist ein tiefer Eingriff, man verbindet es am besten mit einer Neuinstallation. Platte partitionieren Für die Umsetzung dieses HowTo benötigt man 4 Partitionen, zwei Vorschläge für die Partitionierung einer 80 GB Festplatte:
ohne WINDOWS
mit WINDOWS
/dev/hda1 WINDOWS
/dev/hda2 Erweiterte Partition
/dev/hda1 /dev/hda5 Root (10-13GB)
/dev/hda2 /dev/hda6 swap (1-2GB)
/dev/hda3 /dev/hda7 /tmp (4 GB)
/dev/hda4 /dev/hda8 /home (Rest)
Ich benötige WINDOWS nicht und verwende im folgenden die erste Partitionierung. Debian installieren Die Installation von Debian oder Ubuntu erfolgt zuerst einmal auf die später für „/home“ genutzte Partition „/dev/hda4“ und wird später in die verschlüsselte Root-Partition verschoben. Bei der Installation sind keine(!!!) User anzulegen. Auch die Pakete „yaird“, „cryptsetup“ und „pammount“ sind zu installieren. Verschlüsseln der Root-Partition Wie unter 3. Container erstellen → beschrieben, wird die zukünftige Root-Partition verschlüsselt. Anschließend wird das System in die neue Root-Partition kopiert: # mkdir /cryptroot # mount.crypt /dev/hda1 /cryptroot # cd / # cp -ax bin etc dev home lib media opt root sbin usr var /cryptroot USB-Stick vorbereiten Der USB-Stick soll alles nötige für das Booten des Rechners enthalten. Nachdem er am Rechner angeschlossen wurde, kann man mit folgendem Kommando feststellen, unter welcher Device-Kennung er zu finden ist: # ls /dev/sd?1 Das letzte Device in der Liste ist der USB-Stick, wenn die Festplatte eine IDE-Platte ist, findet man den Stick als „/dev/sda1“, hat man eine SCSI- oder SATA-Platte, ist der Stick meist unter „/dev/sdb1“ zu finden. Ich verwende im folgenden „/dev/sda1“.
Dieser Stick wird erst einmal neu formatiert, anschließend eingebunden, der Inhalt von „/boot“ wird auf den Stick kopiert und ein symbolischer Link ist anzulegen, damit „grub-install“ nicht durcheinander kommt. # mkfs.ext2 /dev/sda1 # mount /dev/sda1 /mnt # cp -ax /boot/* /mnt # cd /mnt # ln -s . boot Einige kleine Anpassungen sind in der Grub-Konfiguration nötig. In der Datei „/mnt/grub/device.map“ ist folgender Eintrag erforderlich: (hd0,0) /dev/sda In der Datei „/mnt/grub/menu.lst“ sind alle Einträge für den Kernel auf „kernel (hd0,0)“ zu ändern. Abschließend ist der Bootloader Grub im Master Boot Record des USB-Sticks zu installieren: # grub-install –root-directory=/mnt /dev/sda Danach kann der USB-Stick wieder entfernt werden. Das neue System vorbereiten Jetzt ist es Zeit, in das verschlüsselte System wechseln und die fehlenden Mountpoints anzulegen: # chroot /cryptroot # mkdir -p /boot /proc /sys /tmp /mnt # mount -t proc proc /proc # mount -t sysfs sysfs /sys # mount /dev/sda1 /boot Da beim Booten des Systems die verschlüsselten Partitionen für ROOT, SWAP und TMP geöffnet werden sollen, sind die beiden Dateien „/etc/crypttab“ cryptroot /dev/hda1 none luks,cipher=aes-cbc-essiv:sha256 cryptswp /dev/hda2 /dev/urandom swap crypttmp /dev/hda3 /dev/urandom tmp und „/etc/fstab“ anzupassen: /dev/mapper/cryptroot / ext3 defaults,errors=remount-ro 0 1 /dev/mapper/cryptswp none swap sw 0 0 /dev/mapper/crypttmp /tmp ext2 defaults 0 0 Um von einem verschlüsselten Root-dateisystem booten zu können, müssen die nötigen Module in der initrd enthalten sein und das virtuelle Device „/dev/mapper/cryptroot“ muss als Root eingebunden werden. Es ist also eine neue initrd zu generieren. Als Vorbereitung sind in der Datei „/etc/mkinitrd/modules“ folgende Zeilen hinzuzufügen:
aes-i586 sha256
Folgendes Kommando erzeugt eine neue initrd: # yaird -o /boot/initrd Anschließend kann der Rchner neu gebootet werden. Dabei ist im BIOStabular des Rechners die Bootreihenfolge anzupassen. Als erstes ist vom USB-Stick zu booten. An zweiter Stelle steht die Festplatte, wenn auch WINDOWS genutzt werdn soll. Alle weiteren Geräte können deaktiviert werden. Die Kennzeichnung des USB-Sticks ist in fast jedem BIOS unterschiedlich. Übliche Bezeichnungen sind „Generic Storage Device“ oder „Removable Drivers“. User anlegen Nachdem das System erfolgreich wieder hochgekommen ist, kann die letzte Partition /dev/hda4 verschlüsselt werden (siehe Container erstellen →) und als „/home“ eingebunden werden. Es können die User angelegt werden usw.
Die Partition „/dev/hda4“ wird nicht beim Booten geöffnet, sondern wenn sich ein User am System anmeldet (siehe Container öffnen/schließen (Login) →). Die Login-Passwörter der User sind auch als Schlüssel zum Öffnen der Partition „/dev/hda4“ hinzuzufügen (siehe Passwörter verwalten →). Damit ist die Zahl der möglichen User auf 8 begrenzt, das sollte in der Regel kein Problem sein.
Quelle1)
# <target device> <source device> <key file> <options> $CRYPTODEVICE /dev/$DEVICE none luks,check=ext2,retry=5
/dev/mapper/$CRYPTDEVICE $MOUNT auto defaults 0 0
cryptsetup luksAddKey /dev/$DEVICE
Dazu musst du das Passwort eines schon vorhandenen Schlüssels eingeben. Analog dazu kannst du mit luksDelKey ein Schlüssel wieder entfernen.
Mit dmsetup info lassen sich benutzte devicemappings anzeigen. Taucht hier ein Teil als ACTIVE auf, so hat jedermensch darauf Zugriff (auch wenn es nicht gemountet ist, könnte - wer die nötigen Rechte hat - das Teil ohne passendes Cryptokennwort mounten) - es ist in diesem Zustand quasi entschlüsselt!
Deswegen immer nach dem unmounten, das mapping entfernen:
umount $MOUNT cryptsetup luksClose $CRYPTODEVICE
Du kannst alle mappings gleichzeitig entfernen mit:
dmsetup remove_all