Keydisk
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
- Voraussetzungen
- Backup der Daten
- Partitionen anlegen
- Schlüsseldiskette erstellen
- Partitionen mit Schlüssel verschlüsseln:
- Dateisystem auf Cryptpartitionen anlegen
- crypttab editieren
- fstab anpassen
- Cryptpartitionen einbinden und Backup zurückspielen
- md5sum vom keyfile erstellen
- Initscript erstellen
- (Optional) Kennwort für root vergeben
- Verzeichnisse anlegen und Berechtigungen anpassen
- Erster Test
Die folgende Anleitung wendet sich an fortgeschrittene Benutzer, die bereits mit der Einrichtung von Dateisystemen vertraut sind.
Voraussetzungen¶
Es wird das Paket cryptsetup (universe) benötigt.
Diese Kernel-Module müssen zum Start geladen sein:
aes
dm-mod
dm-crypt
Die in dieser Anleitung angebenen Gerätedateien /dev/hdXY, /dev/hdXZ usw. stehen als Variablen und sind durch die tatsächliche Bezeichnung der Partitionen (z.B. /dev/hda2, /dev/hda5, /dev/sda3 o.a.) zu ersetzen.
Hinweis:
Es empfielt sich VOR der Durchführung der folgenden Schritte in den Single-User Betrieb (Runlevel 1) zu wechseln und den Xserver sowie alle nicht benötigen Systemdienste zu stoppen. Bis auf den letzten Schritt, für den die Verwendung einer Live-CD zwingend erforderlich ist, können alle Schritte aus dem Runlevel 1 ausgeführt werden.
Backup der Daten¶
Als erstes muss eine Sicherung der Daten unter /var und /home erfolgen. Mit diesen Befehlen werden die Verzeichnisse /var und /home gesichert. Achtung! Den Punkt am Ende des Befehls nicht vergessen:
sudo -s cd /var tar -cpjvf /root/bak_var.tar.bz2 . cd /home tar -cpjvf /root/bak_home.tar.bz2 .
Partitionen anlegen¶
Falls noch nicht vorhanden, jeweils eine separate Partition für /tmp, /var, /swap und /home anlegen. Siehe dazu auch hier.
Wer ganz sicher gehen will, kann vor dem Anlegen des Dateisystems die Partition mit Zufallsdaten beschreiben. So kann ein Angreifer nicht ermitteln, wieviel Prozent der Platte mit Daten belegt und wieviel Prozent noch frei sind. Abhilfe schafft folgender Befehl, der die Partition mit Zufallsdaten auffüllt:
sudo dd if=/dev/urandom of=/dev/hdxY
Weitere Infos sind hier zu finden: Encrypt Your Root Filesystem 🇬🇧
Schlüsseldiskette erstellen¶
Eine leere Diskette einlegen, dann ein ext2-Dateisystem (kein ext3-Dateisystem!)und einen zufällig generierten Schlüssel erzeugen. Aus Sicherheitsgründen ist darauf zu achten, dass das Dateisystem auf der Diskette kein journaling Dateisystem ist.
sudo -s mkfs.ext2 /media/floppy mount /media/floppy cat /dev/random > /media/floppy/keyfile
Hinweis:
Je nach Rechnerleistung kann das erstellen der Keyfile lange Ladezeiten beanspruchen
Partitionen mit Schlüssel verschlüsseln:¶
Nun verschlüsselte Partitionen anlegen (für die Gerätedateien /dev/hdXY bzw. /dev/hdXZ die Geräte-Bezeichnung der /home bzw. /var-Partition angeben)
sudo -s cryptsetup create -d /media/floppy/keyfile home /dev/hdXY cryptsetup create -d /media/floppy/keyfile var /dev/hdXZ
Hinweis:
Der obige Befehl erzeugt je ein neues Mapper-Device pro Cryptdisk (/dev/mapper/xxx), wobei xxx der Bezeichnung entpricht, die bei der Erstellung des Cryptdevices angegeben wurde, in diesem Falle also home und var.
Dateisystem auf Cryptpartitionen anlegen¶
mkfs.ext3 /dev/mapper/home mkfs.ext3 /dev/mapper/var
crypttab editieren¶
Jetzt solle die /etc/crypttab bearbeitet werden [4] und folgende Einträge vorgenommen werden (Gerätedateien wieder entsprechend anpassen):
# <target device> <source device> <key file> <options> swap /dev/hdXW /dev/random swap tmp /dev/hdXV /dev/random tmp home /dev/hdXY /media/floppy/keyfile var /dev/hdXZ /media/floppy/keyfile
Die ersten beiden Einträge erzeugen bei jedem Start jeweils ein mit einem zufälligen Schlüssel verschlüsseltes swap-Dateisystem auf der angegebenen Swap-Partition und ein ext2-Dateisystem auf der angegebenen tmp-Partition. Zu beachten ist, dass diese Partitionen bei jedem Neustart neu formatiert werden, da der Schlüssel jedesmal anders ist. Die letzten zwei Einträge starten die von uns angelegten Cryptpartitionen für /home und /var und lesen dabei den Schlüssel von der Diskette (die Diskette nicht verlieren, sonst kommt man nicht mehr an die Daten ran).
Hinweis:
Evtl. ist es besser die verschluesselten Partitionen mit
cryptsetup -c aes-cbc-essiv:sha256 -y luksFormat /dev/hdXY
die optionen sind nur als Beispiel anzusehen) anzulegen und ein Passwort (fuer den Notfall) anzugeben. Danach kann das Keyfile mit
cryptsetup luksAddKey /dev/hdXY /media/floppy/keyfile
eingebunden werden, dann kann man jederzeit auch wenn die keydisk im Eimer ist wieder an die Daten rankommen. Wenn man noch auf den md5 check des keyfiles verzichten kann und will muss einfach in /etc/default/cryptdisks ein CRYPTDISKS_MOUNT="/media/floppy" angeben. dann kann man das einbinden des Scripts ins init.d getrost vergessen.
fstab anpassen¶
In der Datei /etc/fstab sind die Einträge für /tmp, /var /home und swap entsprechend ergänzen bzw. anpassen [4]:
/dev/mapper/swap swap swap defaults 0 0 /dev/mapper/home /home ext3 defaults 1 2 /dev/mapper/tmp /tmp ext2 defaults 0 0 /dev/mapper/var /var ext3 defaults 1 2
Hinweis:
Das Dateisystem von /home und /var berücksichtigen. Falls ein anderes Dateisystem als ext3 gewählt wurde, muss dies auch in der fstab geändert werden.
Cryptpartitionen einbinden und Backup zurückspielen¶
mount /dev/mapper/home /home mount /dev/mapper/var /var cd /var tar -xpjvf /root/bak_var.tar.bz2 cd /home tar -xpjvf /root/bak_home.tar.bz2
Achtung!
Diese Daten im Backup sind unverschlüsselt und könnten wiederhergestellt werden, wenn das Backup sich auf einem Journaling Dateisystem befindet. Es ist dafür zu sorgen, dass die Backupdateien unter /root anschließend sicher gelöscht (shred) werden. Sicheres Löschen funktioniert übrigens nicht, wenn die Daten sich auf einem Filesystem mit Journalfunktion befinden.
md5sum vom keyfile erstellen¶
An Hand einer Prüfsumme kann das folgende Initscript erkennen, ob sich auf der eingelegten Diskette wirklich der richtige Key befindet.
cd /root md5sum /media/floppy/keyfile > .key_md5sum chmod 400 .key_md5sum
Initscript erstellen¶
Es muss das folgende Initscript erstellt werden [4], das unter /etc/init.d als keymount.sh gespeichert wird:
#!/bin/sh ######################################################################## ## This script is used to mount a floppy disk containing a keyfile ## to decrypt encrypted partitions on startup ## Please make sure to execute it before cryptdisk are started ## (c) 2006 by mdkuser, published under the GPL v2 ######################################################################## case "$1" in start) modprobe floppy if [ ! -e /dev/fd0 ]; then mknod /dev/fd0 b 2 0 chown root:floppy /dev/fd0 chmod 660 /dev/fd0 fi if $( grep -q /media/floppy /etc/mtab ); then umount /media/floppy fi echo -n "waiting for key file media... " mount -o ro /dev/fd0 /media/floppy > /dev/null 2>&1 md5sum -c /root/.key_md5sum > /dev/null 2>&1 retval="$?" while [ ! "$retval" -eq "0" ]; do echo "ERROR: No key file media!" if $( grep -q /media/floppy /etc/mtab ); then umount /media/floppy fi read $a mount -o ro /dev/fd0 /media/floppy > /dev/null 2>&1 md5sum -c /root/.key_md5sum > /dev/null 2>&1 retval="$?" done echo "Key file found." ;; stop) if $( grep -q /media/floppy /etc/mtab ); then umount /media/floppy fi ;; esac exit 0
Dieses Script muss ausführbar gemacht werden:
chmod 755 /etc/init.d/keymount.sh
Danach ist ein symbolischer Link unter /etc/rcS.d zu erzeugen
cd /etc/rcS.d ln -s ../init.d/keymount.sh S27keymount.sh
Hinweis:
Das Keymount Initscript muss VOR dem Initscript cryptdiscs gestartet werden! Der Symlink mit Nummer S27keymount.sh startet das Script unmittelbar vor dem cryptdisc Init Script, evtl. anpassen.
Damit die Diskette nach erfolgreichem Booten wieder entfernt werden kann, ist folgenden Eintrag in /etc/rc.local zu erzeugen:
/etc/init.d/keymount.sh stop
(Optional) Kennwort für root vergeben¶
Dieser Schritt ist optional, aber dafür sicherer, da man sonst ohne Passwortabfrage auf der Rootshell landet, falls die Cryptdisks nicht gestartet werden können.
sudo passwd root
Verzeichnisse anlegen und Berechtigungen anpassen¶
Im leeren Verzeichnis /var auf der Rootpartition (/) sind noch einige Verzeichnisse anzulegen und die Berechtigungen entsprechend zu setzen. Dies ist wichtig, da unter Dapper bei jedem Start unter /var Aktionen ausgeführt werden, bevor die Cryptpartitionen gestartet werden. Hierzu ist es unbedingt notwendig mit einer Live-CD zu arbeiten, um die / Partition zu mounten ohne das /var eingehangen ist, da /var im laufenden Betrieb nicht ausgehangen werden kann.
sudo -s mount /dev/hdXU /mnt mkdir /mnt/var/tmp chmod 1777 /mnt/var/tmp mkdir /mnt/var/lock chmod 1777 /mnt/var/lock mkdir /mnt/var/run chmod 755 /mnt/var/run
Hinweis:
/dev/hdXU ist hier durch die Gerätebezeichnung der Rootpartition (/) zu ersetzen.
Erster Test¶
Nun das System rebooten, Live-CD entfernen und das neu erzeugte Cryptosystem kann getestet werden.
Hinweis:
Es wird an dieser Stelle ausdrücklich darauf hingewiesen, dass der Autor keine Verantwortung für die Richtigkeit und Vollständigkeit dieser Kurzanleitung und auch nicht für eventuell sich daraus ergebende Probleme übernehme. Die hier beschriebene Konfiguration wurde unter Dapper getestet und für funktional befunden und wird auf einer as-is Basis zur Verfügung gestellt, allerdings wurde die vorliegende Dokumentation dazu nachträglich aus dem Gedächtnis heraus aufgeschrieben, es könnten also hier und da noch einige Anpassungen vorzunehmen sein. Benutzung auf eigene Gefahr!