Um was geht's?Mit Ubuntu (7.04 Feisty Fain) alle Festplatten eines PC verschlüsseln, so das man nur noch per USB-Stick oder CD booten kann. Bootbare MMC- oder SD-Karten sollten ebenfalls funktionieren (ungetestet)
Nicht für Anfänger geeignet!
Vor- & Nachteile:
- Niemand kann Sie nach dem Passwort erpressen. Sie kennen es nicht :-)
- Brute-force-Methoden sind sehr aufwendig, denn im Keyfile befindet sich kein Wort, auch keine wilde Reihenfolge von Buchstaben, sondern nur zufällige Bits.
- Wenn der USB-Stick defekt ist oder verloren geht, sind alle Daten auf dem Rechner nicht mehr zu erreichen!
- Für Desktop-Systeme, die immer wieder neu gestartet werden, nicht zu empfehlen, schliesslich läßt man aus Faulheit den USB-Stick am Rechner und hat damit nichts gewonnen.
Was brauchen wir:
Eine Installations-CD oder DVD mit Ubuntu/Kubuntu oder ähnliches. Debian wär auch möglich.
(Feisty Fain 7.04 oder Etchy Edge 6.10)
Einen PC, :-) der von einem USB-Stick booten kann!
Einen bootbaren (!) USB-Stick, min. 32MB.
Cryptsetup-luks ab Version 1.0.5, da dort das Keyscript benutzt wird.
Ich habe die Kubuntu-DVD 6.10 Edgy Eft benutzt und dann über Netzwerk auf Feisty Fain 7.04 hochgerüstet.
Mit einer Feisty Fain-CD/DVD sollte es ebenso ablaufen, allerdings gibt es dort keine hdX mehr.
Warnung: Im Kernel 2.6.20.15 (ab dem .16er scheint es wieder zurück geändert worden zu sein) ändern sich teilweise die Zuordnungen der Festplatten,. Es gibt kein hdX mehr, nur noch sdX. Man muss also alle Einstellungen entsprechend korrigieren (grub/menu.lst, fstab, crypttab)
(dies gilt scheinbar nicht für uralte Systeme, die nur PATA-Ports kennen)
Wir beginnen: Systeminstallation
| Achtung, alle Daten werden bei der Partitionierung der Festplatte vernichtet! Tun Sie dies nur, wenn Sie diese Daten nicht mehr benötigen oder auf andere Medien gesichert haben! |
Wir booten von der CD/DVD und lassen das System normal installieren.
Bei der Einrichtung der Partitionen nehmen wir mindestens 3 Stück:
1. /boot (/dev/sda1) etwa 50MB
2. / (/dev/sda2) mindestens 2 GB, hierher kommt später die Swap-Partition.
3. (/dev/sda3) der Rest, hier kommt später die verschlüsselte Root-Partition hin.
man kann natürlich noch eine 4. Partition für /home (/dev/sda4) einrichten, ganz nach Geschmack.
Nach der Installation wird das System neu gestartet. Und es geht weiter:
Platten verschlüsseln
(sudo -s bringt uns in eine root-Shell, ansonsten ist jedem Befehl ein sudo voran zu stellen)
Wir installieren folgende Programme:
apt-get install cryptsetup dmsetup hashalot
(dmsetup ist ab feisty im Grundsystem, etch-Benutzer müssen es nachinstallieren)
Nun erzeugen wir unser Keyfile:
mkdir /boot/keys
dd if=/dev/random of=/boot/keys/sda3.key bs=1 count=32
Wer eine hda4 eingerichtet hat, sollte sich dafür ebenfalls ein keyfile erzeugen:
mkdir /etc/keys
dd if=/dev/random of=/etc/keys/sda4.key bs=1 count=32
Wir kopieren uns dieses Keyfile mit in /boot/keys/, um bei einem Crash auf sda3 trotzdem noch auf sda4 zugreifen zu können. cp /etc/keys/sda4.key /boot/keys/
Nun laden wir die Module
modprobe dm_crypt
modprobe aes_i585 (uralte Rechner nehmen hier nur aes)
modprobe sha256
und erzeugen unsere verschlüsselten Partitionen
cryptsetup luksFormat /dev/sda3 /boot/keys/sda3.key
die Sicherheitsabfrage muss mit YES beantwortet werden.
Partition ins System einbinden
cryptsetup -d /boot/keys/sda3.key luksOpen /dev/sda3 sda3
Wenn alles geklappt hat meldet cryptsetup folgendes:
key slot 0 unlocked.
Command successful.
für hda4:
cryptsetup luksFormat /dev/sda4 /etc/keys/sda4.key
die Sicherheitsabfrage muss mit YES beantwortet werden.
Partition ins System einbinden
cryptsetup -d /etc/keys/sda4.key luksOpen /dev/sda4 sda4
Damit ist die verschlüsselte Partition aktiviert und wir können sie formatieren:
mkfs.ext3 /dev/mapper/sda3
mkfs.ext3 /dev/mapper/sda4
und mounten:
mount /dev/mapper/sda3 /mnt
Die sda4 müssen wir in die sda3 mounten:
mkdir /mnt/home
mount /dev/mapper/sda4 /mnt/home
Config-Dateien anpassen
Nun müssen wir ein paar Config-Dateien verändern und danach kopieren wir alles auf die verschlüsselte Partition.
Als erstes ergänzen wir /usr/share/initramfs-tools/hooks/cryptoroot
am Ende nach
copy_exec /sbin/cryptsetup /sbin
copy_exec /sbin/dmsetup /sbin
kommt
mkdir ${DESTDIR}/keys
cp /boot/keys/sda3.key ${DESTDIR}/keys/
Das Keyfile für die /home-Partition verbleibt in /etc/keys/.
Dieses veränderte Script sollte man sich gut sichern und bei einem Update von Initramfs-Tools schauen, ob es noch vorhanden ist, sonst wird das Keyfile nicht in die initrd.img kopiert und man hat große Mühe wieder an seine Platte zu kommen!
Nun müssen wir ein Keyscript erstellen.
vi /etc/keys/showkey
ROOTKEY="$1"
/bin/cat $ROOTKEY
Bei den Rechten bin ich mir nicht sicher. Nachdem ich die Datei auf 777 und User:Group auf den eingerichteten User gesetzt hab, lief es erst. (Über ne Info wieso und was genau sein muss wäre ich dankbar)
nun müssen wir noch die /etc/crypttab und /etc/fstab anpassen.
/etc/crypttab:
# <target name>
sda3 /dev/sda3 /keys/sda3.key luks,keyscript=/etc/keys/showkey,cipher=aes-cbc-essiv:sha256
sda4 /dev/sda4 /etc/keys/sda4.key
#cswap /dev/sda2 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,check=/bin/true
Die Swap-Partition müssen wir erstmal ausklammern, schließlich ist das derzeit unser root-Verzeichnis.
/etc/fstab:
# /etc/fstab: static file system information.
# <filesystem>
/dev/sda2 /mnt ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
/dev/mapper/sda3 / ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
/dev/mapper/sda4 /home ext3 nouser,defaults,atime,auto,rw,dev,exec,nosuid 0 2
#/dev/mapper/cswap none swap sw 0 0
Alle anderen Einträge lassen wir unberührt.
Kopieren
mit cp -avx / /mnt kopieren wir nun unser komplettes System auf die verschlüsselte Plartition.
Weitere Config-Dateien anpassen
in /boot kommt nun Arbeit
Den vorhandenen Kernel kopieren wir uns zur Sicherheit
(die Versionnummern werden sich sicherlich unterscheiden)
cd /boot
cp vmlinuz-2.6.17-10-generic vmlinuz-2.6.17-10-kopie
cp System.map-2.6.17-10-generic
nun erzeugen wir ein Bootimage mit unserem Key.
update-initramfs -u ALL
und lassen Grub ein neues Startmenü bauen
update-grub
mit vi /boot/grub/menu.lst ändern wir unser Bootsystem
(Versionsnummer entsprechend anpassen!)
title Ubuntu, kernel 2.6.17-10-generic
root (hd0,0)
kernel /vmlinuz-2.6.17-10-generic root=/dev/mapper/sda3 cryptroot=/dev/sda3 ro quiet locale=de_DE
initrd /initrd.img-2.6.17-10-generic
quiet
boot
#der 3. Eintrag
title Ubuntu, kernel 2.6.17-10-kopie
root (hd0,0)
kernel /vmlinuz-2.6.17-10-kopie root=/dev/sda2 ro quiet locale=de_DE
initrd /initrd.img-2.6.17-10-kopie
quiet
boot
Wichtig ist, das die /boot heraus genommen werden.
danach editieren wir /etc/fstab zurück (nicht die /mnt/etc/fstab !)
# /etc/fstab: static file system information.
# <filesystem> <mountpoint>
/dev/sda2 / ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
#/dev/mapper/sda3 /mnt ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
#/dev/mapper/sda4 /mnt/home ext3 nouser,defaults,atime,auto,rw,dev,exec,nosuid 0 2
Nun können wir zur sda2 im Notfall noch booten.
Neustart
Damit steht einem Neustart nichts mehr im Weg.
Nach dem erfolgreichen Neustart befinden wir uns auf der verschlüsselten Partition als / (und haben die verschlüsslte sda4 unter /home)
Swap aktivieren
Da alles geklappt hat streichen wir den Eintrag von sda2 in /etc/fstab und entfernen das # vor dem Eintrag für die Swap-Partiton.
umount /dev/sda2 lässt die zukünftige Swap-Partition aus dem System verschwinden.
Nun fdisk /dev/sda aufrufen und mit "t" "2" "82" "w" den Partitionseintrag von sda2 auf Swap-Partition ändern.
mit /etc/init.d/cryptdisk start binden wir /dev/sda2 als /dev/mapper/cswap ein.
mkswap /dev/mapper/cswap erezugt nun eine Swap-Partition und swapon -a aktiviert diese.
mit free sollte man nun die aktivierte Swap-Partiton sehen
total used free shared buffers cached
Mem: 1555596 1516112 39484 0 151544 837324
-/+ buffers/cache: 527244 1028352
Swap: 2562356 0 2562356
(die Werte werden anders sein, es darf in der letzten Zeile aber keine 0 0 0 stehen)
Der Bootstick
Nun müssen wir noch unseren Boot-Stick einrichten und die Boot-Partition auf der Festplatte vernichten, den dort liegt derzeit völlig ungeschützt unser Keyfile!
| Achtung, alle Daten werden bei der Partitionierung des USB-Sticks vernichtet! Tun Sie dies nur, wenn Sie diese Daten nicht mehr benötigen oder auf andere Medien gesichert haben! |
Mit fdisk /dev/<usb-stick>zb. sdc löschen wir die derzeitige Partitionierung (d) und stellen den Stick auf Linux (p & t 83) und bootfähig (a) um (w). (fdisk -l zeigt alle vorhandene Laufwerke an, damit man sein USB-Stick findet.)
Nun formatieren wir den Stick:
mkfs -t ext2 /dev/<usb-stick-partition>
Und binden ihn in System ein:
mount /dev/<usb-stick-partition> /mnt
Kopieren nun das Boot-Verzeichnis auf den Stick:
mount /dev/sda1 /boot
cp -avx /boot/* /mnt
Nehmen den Stick und die erste Partition aus dem System und mounten den Stick als /boot.
umount /dev/sda1
umount /dev/<usb-stick-partition>
mount /dev/<usb-stick-partition> /boot
Den Bootloader auf den Stick installieren.
grub-install --root-directory=/ /dev/<usb-stick>
Nun können wir unser System neu starten.
/dev/sda1 leeren
Wenn alles geklappt hat, können wir nun /dev/sda1 löschen:
shred -v /dev/sda1
überschreibt die Partiton 25 mal mit sinnlosen Werten. Dadurch sollten die Keyfiles dort nicht mehr zu finden sein.
Das wars!
Fehler oder Anregungen übers Feedback zusenden oder als Kommentar anhängen.
Nun noch eine Boot-CD herstellen und diese sehr sehr gut verstecken, falls der USB-Stick mal abhanden kommt.
Booten von CD


