Verschlüsseltes (Etch)-System mit USB-Stick starten

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
xontero
Beiträge: 6
Registriert: 12.04.2007 20:03:30

Verschlüsseltes (Etch)-System mit USB-Stick starten

Beitrag von xontero » 12.04.2007 20:19:56

Hallo,

ich habe eine folgense Idee; Ich möchte mein Debian-System so einrichten, dass es beim booten/starten einen Keyfile vom USB-Stick benutzt um die Platten zu mounten.
Ich habe es geschafft das System so mit LVM zu installieren, dass es beim Starten nach einer Passphrse fragt (ich weiß man kann es einfach vom Installer machen, aber ich habe es so manuell geschafft).

Ich habe versucht mit dem installer bissle rumzuspielen, habe bei der verschlüsselung zufälligen Schlüssel verwendet, aber ich weiß nicht wo der zufällige Schüssel gespeichert wird. Das ergebniss war, dass der Rechner beim booten anhält un mir sagt, dass er auf das Mounten von der LVM-Partition wartet mit dem Wurzelverzeichniss.

Ich weiß nciht, ob ich diese Funktionalität mit dem zufälligem Schlüssel falsch verstanden habe, aber ich dachte es macht ein Keyfile. Nichts desto trotz, selbst wenn ich es falsch gemacht habe, kann mir jemand helfen und einen weg zeigen, am besten so, dass alles wärend der installation einrichten kann, vielleicht im expert Modus.

(Was mcih noch gerne interessieren würde, welche verschlüssungsmethode ich verwenden soll, da gibt es so viele Möglichkeiten)(Und dm-crypt oder AES-loopback oder so).

Danke.

Benutzeravatar
uljanow
Beiträge: 529
Registriert: 20.09.2005 21:14:00

Re: Verschlüsseltes (Etch)-System mit USB-Stick starten

Beitrag von uljanow » 12.04.2007 20:50:49

xontero hat geschrieben: Ich habe versucht mit dem installer bissle rumzuspielen, habe bei der verschlüsselung zufälligen Schlüssel verwendet, aber ich weiß nicht wo der zufällige Schüssel gespeichert wird. Das ergebniss war, dass der Rechner beim booten anhält un mir sagt, dass er auf das Mounten von der LVM-Partition wartet mit dem Wurzelverzeichniss.
Ich schätze mal ein zufälliger Schlüssel ist nur sinnvoll, wenn man swap oder /tmp verschlüsselt, die eh keinen Neustart überleben.

Benutzeravatar
Incom
Beiträge: 417
Registriert: 09.11.2003 13:35:27
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Paderborn
Kontaktdaten:

Beitrag von Incom » 12.04.2007 22:37:23

Ich würde dm-crypt und luks verwenden, da kannst du in der /etc/default/cryptdisks angeben dass ein bestimmtes device (zb dein usb-stick) vor dem entschlüsseln der partitionen gemountet wird. So kannst du als Keyfile einfach eine Datei vom Usb-Stick verwenden.
Hab das hier und es läuft recht problemlos.

Gruß,
Incom

PS: Eventuell hilft dir http://wiki.debianforum.de/Sicherheit
Du suchst eine Schritt-für-Schritt Anleitung? Dann schau im Wiki nach!

Benutzeravatar
uljanow
Beiträge: 529
Registriert: 20.09.2005 21:14:00

Beitrag von uljanow » 12.04.2007 22:45:10

Incom hat geschrieben:Ich würde dm-crypt und luks verwenden, da kannst du in der /etc/default/cryptdisks angeben dass ein bestimmtes device (zb dein usb-stick) vor dem entschlüsseln der partitionen gemountet wird. So kannst du als Keyfile einfach eine Datei vom Usb-Stick verwenden.
Gilt das auch für ein verschlüsseltes "/", dessen keys dann z.B. auf einem USB-Stick liegen ?

peyote
Beiträge: 241
Registriert: 11.10.2003 19:00:42

Beitrag von peyote » 12.04.2007 22:50:30

Incom hat geschrieben:Ich würde dm-crypt und luks verwenden, da kannst du in der /etc/default/cryptdisks angeben dass ein bestimmtes device (zb dein usb-stick) vor dem entschlüsseln der partitionen gemountet wird. So kannst du als Keyfile einfach eine Datei vom Usb-Stick verwenden.
Ist es eigentlich auch möglich direkt vom USB-Stick bzw.einer CD zu booten um danach dann die komplett verschlüsselte Festplatte (incl./boot Partition) zu entschlüsseln und das Linuxsystem von dieser zu starten?
Wobei es schick wäre nicht nur die /boot Partition einfach auf die CD auszulagern, sondern nach dem Linuxstart via CD den Kernel von der Festplatte "nachzuladen", dann könnte man nämlich diesen Kernel updaten ohne eine neue CD zu benötigen.
Vorteil dieser Lösung wäre auch, dass man bei physikalischem Zugriff auf den Rechner nicht einfach den Kernel in der /boot Partition der Festplatte patchen könnte, sodass z.B. ein Keylogger aktiv wird.

Benutzeravatar
Incom
Beiträge: 417
Registriert: 09.11.2003 13:35:27
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Paderborn
Kontaktdaten:

Beitrag von Incom » 12.04.2007 23:03:15

uljanow hat geschrieben:
Incom hat geschrieben:Ich würde dm-crypt und luks verwenden, da kannst du in der /etc/default/cryptdisks angeben dass ein bestimmtes device (zb dein usb-stick) vor dem entschlüsseln der partitionen gemountet wird. So kannst du als Keyfile einfach eine Datei vom Usb-Stick verwenden.
Gilt das auch für ein verschlüsseltes "/", dessen keys dann z.B. auf einem USB-Stick liegen ?
Auf einem verschlüsseltem / gibt es afaik auch kein /etc, so dass das da nicht so einfach geht.

Ipeyote hat geschrieben:st es eigentlich auch möglich direkt vom USB-Stick bzw.einer CD zu booten um danach dann die komplett verschlüsselte Festplatte (incl./boot Partition) zu entschlüsseln und das Linuxsystem von dieser zu starten?
Wobei es schick wäre nicht nur die /boot Partition einfach auf die CD auszulagern, sondern nach dem Linuxstart via CD den Kernel von der Festplatte "nachzuladen", dann könnte man nämlich diesen Kernel updaten ohne eine neue CD zu benötigen.
Vorteil dieser Lösung wäre auch, dass man bei physikalischem Zugriff auf den Rechner nicht einfach den Kernel in der /boot Partition der Festplatte patchen könnte, sodass z.B. ein Keylogger aktiv wird.
Prinzipiell müsste man von einem USB-Stick oder einer CD booten können (machen ja die ganzen Live-CDs), allerdings denke ich nicht dass man den Kernel nachladen kann. Zum Entschlüsseln muss ja schon ein Kernel da sein.

Gruß,
Incom
Du suchst eine Schritt-für-Schritt Anleitung? Dann schau im Wiki nach!

peyote
Beiträge: 241
Registriert: 11.10.2003 19:00:42

Beitrag von peyote » 12.04.2007 23:14:10

Incom hat geschrieben:...
Prinzipiell müsste man von einem USB-Stick oder einer CD booten können (machen ja die ganzen Live-CDs), allerdings denke ich nicht dass man den Kernel nachladen kann. Zum Entschlüsseln muss ja schon ein Kernel da sein.

Gruß,
Incom
Ja, man hätte ja 2 Kernel einen von der CD mit welchem man die Festplatte entschlüsseln könnte. Der 2te Kernel, den man bei Bedarf auch updaten kann läge auf der Festplatte (verschlüsselt).
Nachladen könnte evtl. mit kexec klappen. (siehe z.B. http://packages.debian.org/unstable/admin/kexec-tools).
Soweit der Plan... obs klappen kann weiss ich leider auch nicht ;)

Benutzeravatar
Incom
Beiträge: 417
Registriert: 09.11.2003 13:35:27
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Paderborn
Kontaktdaten:

Beitrag von Incom » 12.04.2007 23:24:27

Wär bestimmt mal interessant sowas zu versuchen (falls es nicht schon irgendwer gemacht hat), allerdings fehlt mir dafür im Moment definitiv die Zeit.

Gruß,
Incom
Du suchst eine Schritt-für-Schritt Anleitung? Dann schau im Wiki nach!

Benutzeravatar
uljanow
Beiträge: 529
Registriert: 20.09.2005 21:14:00

Beitrag von uljanow » 13.04.2007 00:17:45

Ich habs nicht getestet, aber die Schritte müssten doch sein:
- Das Live Medium am besten ROM starten um die verschlüsselte / lesbar zu machen
- dann den 2. Kernel in den Speicher laden und bei der cmdline root= anpassen. z.B. so

Code: Alles auswählen

kexec -l /root/vmlinuz --initrd=/root/initrd.img --append="root=/dev/sda1 ..." 
- /root unmounten und rebooten

Code: Alles auswählen

kexec -e
Man müsste dann aber das Passwort 2x eingeben.

xontero
Beiträge: 6
Registriert: 12.04.2007 20:03:30

Beitrag von xontero » 13.04.2007 00:31:35

Incom hat geschrieben:Ich würde dm-crypt und luks verwenden, da kannst du in der /etc/default/cryptdisks angeben dass ein bestimmtes device (zb dein usb-stick) vor dem entschlüsseln der partitionen gemountet wird. So kannst du als Keyfile einfach eine Datei vom Usb-Stick verwenden.
Hab das hier und es läuft recht problemlos.

Gruß,
Incom
Hmm, wenn man das System mit einer passphrase verschluesselt, kommt beim starten eine Aufforderung die Passphrase inezutippen.

D.h. irgendwas führt irgendwas aus, damit diese abfrage kommt, sei es grub oder irgendwas in der unverschlüsselten /boot partition, kann diesem irgendwas nicht sagen, dass er stattdessen einen Keyfile benutzt?

Un noch was, wenn ich eine Partition mit einer Passphrse verschlüsselt habe, kann ich es nachher in eine Keyfile verschlüsselung umwandeln?

Danke

peyote
Beiträge: 241
Registriert: 11.10.2003 19:00:42

Beitrag von peyote » 13.04.2007 01:24:12

uljanow hat geschrieben:Ich habs nicht getestet, aber die Schritte müssten doch sein:
- Das Live Medium am besten ROM starten um die verschlüsselte / lesbar zu machen
- dann den 2. Kernel in den Speicher laden und bei der cmdline root= anpassen. z.B. so

Code: Alles auswählen

kexec -l /root/vmlinuz --initrd=/root/initrd.img --append="root=/dev/sda1 ..." 
- /root unmounten und rebooten

Code: Alles auswählen

kexec -e
Man müsste dann aber das Passwort 2x eingeben.
Ja, so ungefähr sollte es doch hoffentlich funktionieren.
Die 2-malige Eingabe des Passworts könnte man sich ja evtl. schenken, wenn man das in einer initrd unterbringt. Die ist ja dann sowieso verschlüsselt.

Benutzeravatar
Incom
Beiträge: 417
Registriert: 09.11.2003 13:35:27
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Paderborn
Kontaktdaten:

Beitrag von Incom » 13.04.2007 10:05:09

xontero hat geschrieben:Hmm, wenn man das System mit einer passphrase verschluesselt, kommt beim starten eine Aufforderung die Passphrase inezutippen.

D.h. irgendwas führt irgendwas aus, damit diese abfrage kommt, sei es grub oder irgendwas in der unverschlüsselten /boot partition, kann diesem irgendwas nicht sagen, dass er stattdessen einen Keyfile benutzt?
Ja, kann man auch aber dann muss man das anders als mit den mitgelieferten Scripten machen
xontero hat geschrieben:Un noch was, wenn ich eine Partition mit einer Passphrse verschlüsselt habe, kann ich es nachher in eine Keyfile verschlüsselung umwandeln?
Wenn du luks verwendest geht das.

Gruß,
Incom
Du suchst eine Schritt-für-Schritt Anleitung? Dann schau im Wiki nach!

hotshot
Beiträge: 2
Registriert: 16.04.2007 18:13:25

Beitrag von hotshot » 16.04.2007 18:25:35

Du hast mir mehr oder weniger die Wörter aus den Fingern gesogen.

Ich habe auf meinem Notebook die root und swap Partition verschlüsselt mit LUKS. Die boot Partition ist unverschlüsselt, dass ganze funzt auch soweit ganz wunderbar. Ich habe nun einen weiteren Key hinzugefügt, der in einem Keyfile abgelegt ist. Dieses Keyfile möchte ich unverschlüsselt auf der boot partition ablegen und automatisch einlesen, wenn ich den Rechner hochfahre. Das das keinen Sinn macht ist mir auch klar: Wenn ich zuhause bin, hängt eine USB Platte dran und davon soll der Rechner booten, von unterwegs bootet er von der lokalen disk, auf der das Keyfile natürlich nicht abgelegt ist.
Mit geht's hautpsächlich nur darum, dass wenn mein Notebook gestohlen wird, dass nicht jeder auf die Daten zugreiffen kann.

Ich denke, dass müsste irrgendwie mit der initrd abgewickelt werden (das luks beim booten das keyfile nimmt). Ich habe noch folgendes gefunden:

http://nl.gentoo-wiki.com/SECURITY_Encr ... _with_LUKS

Da wird etwas detailierter auf den bootvorgang eingegangen, aber wie ich das nun in mein System reinbringe, ist mir ein Rätsel.


gruss

xontero
Beiträge: 6
Registriert: 12.04.2007 20:03:30

Beitrag von xontero » 18.04.2007 16:14:28

Hallo,

da ich nciht alleine mit dieser Idee bin, möchte ich mich nochmal an alle wenden, vielleicht weiß jemand wenigstens bisslewas.

Habe bei mir auch ausprobiert einen Keyfile hinzuzufügen, klappte auch, aber ich weiß nicht wo, bzw. was in der partition /boot ich verändernmuss, damit er mich nicht nach einer Passphrase fragt, sondern eine Keyfile benutz, sei es auf der boot Partition oder auf einem USB-Stick, vorausgesetzt ich kann es davor mounten lassen, bevor er zu diem Punkt kommt.

Ich meine wo steht es, was der Rechner am anfang machen soll, vielleicht kann man da ansetzen?

Danke vielmals.

PS: Vielleicht sollte dieser Thread in die Scriptig-Abteilung

Benutzeravatar
uljanow
Beiträge: 529
Registriert: 20.09.2005 21:14:00

Beitrag von uljanow » 18.04.2007 16:29:15

xontero hat geschrieben:Ich meine wo steht es, was der Rechner am anfang machen soll, vielleicht kann man da ansetzen?
Wenn die root-Partition verschlüsselt ist, wird das script unter /usr/share/initramfs-tools/scripts/local-top/cryptroot ausgefürt. Da gibt es auch eine gleichnamige Datei die während der initrd-Erstellung ausgeführt wird. Oder einfach

Code: Alles auswählen

man initramfs-tools

xontero
Beiträge: 6
Registriert: 12.04.2007 20:03:30

Beitrag von xontero » 18.04.2007 16:52:18

Danke, für die schnelle Antwort, sieht vielversprechend aus, ist halt schwierig für mich, da ich noch ncie was mitscrpts gemacht habe (das einzige in die richtung wr ein pre-down eintrag in die /etc/networks/interfaces um wol einzuschalten).

Falls ich es schaffe :roll: , dann werde ich es melden, hotshot. :)

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von goeb » 18.04.2007 17:07:55

Evtl. hilft dir das weiter: http://www.debian-administration.org/articles/428.

MfG, goeb

xontero
Beiträge: 6
Registriert: 12.04.2007 20:03:30

Beitrag von xontero » 18.04.2007 20:18:58

Danke, ich werde es aber mit dem initramfs-tools versuchen, da es in der Debian, als default drin ist.

hotshot
Beiträge: 2
Registriert: 16.04.2007 18:13:25

Beitrag von hotshot » 19.04.2007 00:35:31

Heureka! :lol:

Keine Ahnung, wieso ich das übersehen habe mit dem cryptroot script, aber das ist logischerweise die Lösung:

Irrgendwo im Script /usr/share/initramfs-tools/scripts/local-top/cryptroot müssen die Zeilen wie folgt geändert werden (bei mir ab Zeile 152 [Ubuntu 6.10]), wichtig ist die -d option mit der Angabe des Keyfiles. (das ich z.B. mit "head /dev/urandom >/home/test/luks.key" erstellt habe):

Code: Alles auswählen

# prepare commands
if /sbin/cryptsetup isLuks $cryptsource > /dev/null 2>&1; then
        cryptcreate="/sbin/cryptsetup -d luks.key luksOpen $cryptsource $crypttarget"
else
        cryptcreate="/sbin/cryptsetup -c $cryptcipher -s $cryptsize -h $crypthash -d luks.key create $crypttarget $cryptsource"
fi
und im File /usr/share/initramfs-tools/hooks/cryptroot sollte fast am Schluss noch das Key file kopiert werden, was natürlich vom Pfad und Filenamen her mit dem oben angegebenen korrespondieren muss (option -d):

Code: Alles auswählen

# Allow the correct keymap to be loaded if possible
if [ -e /bin/loadkeys -a -r /etc/console/boottime.kmap.gz ]; then
        copy_exec /bin/loadkeys /bin/
        cp /etc/console/boottime.kmap.gz $DESTDIR/etc/
fi

cp /home/test/luks.key ${DESTDIR}/luks.key

# Done
exit 0
In dem Beispiel heisst das Key File luks.key und ist im /home/test/ Verzeichnis abgelegt. Achte darauf das keine Backup Files in den Verzeichnissen der alten Files vom Editor zurückbleiben (z.B. "cryptroot~").

Danach natürlich noch das image erstellen lassen mit "update-initramfs -u ALL" und rebooten. Falls es nicht intelligent ist, das iniramfs auf der normalen Bootpartition zu erstellen, weil sie im gleichen System ist (also nicht USB oder so), so kann das auch mit "mkinitramfs -o /home/test/initrd.img-2.6.17-11-generic" in ein anderes Verzeichnis erstellt werden.


Kurz noch zur Erklärung:

Das key File muss nirrgens auf der /boot Partition abgelet werden, da es mittels dem hook-Script in das initrd image eingepackt wird, zusammen mit dem ersten Script, dass ich oben beschrieben habe, dieses wird beim booten ausgeführt.

Ich habe das alles im VMWare getestet, was natürlich razfatz ging, da ich bei einem fehler wieder den snapshot retournieren konnte. Wer vor dem boot noch sicher sein möchte, ob das image korrekt gebaut wurde und auch das luks.key am richtigen Ort ist, kann folgendes machen:

mkdir /tmp/initramfs
cd /tmp/initramfs
gunzip -c -9 /boot/initrd.img-2.6.17-11-generic | cpio -i -d -H newc --no-absolute-filenames

Das ganze müsste dann in etwa so aussehen:

Code: Alles auswählen

root@test-desktop:/tmp# mkdir /tmp/initramfs
root@test-desktop:/tmp# cd /tmp/initramfs
root@test-desktop:/tmp/initramfs# gunzip -c -9 /boot/initrd.img-2.6.17-11-generic  | cpio -i -d -H newc --no-absolute-filenames
32058 blocks
root@test-desktop:/tmp/initramfs# ls -altr
total 48
drwxr-xr-x 12 root root 4096 2007-04-15 20:08 scripts
drwxr-xr-x  2 root root 4096 2007-04-15 20:08 modules
drwxr-xr-x  4 root root 4096 2007-04-15 20:08 lib
-rwxr-xr-x  1 root root 2749 2007-04-15 20:08 init
drwxr-xr-x  3 root root 4096 2007-04-15 20:08 conf
drwxr-xr-x  2 root root 4096 2007-04-15 20:08 bin
drwxrwxrwt  5 root root 4096 2007-04-15 20:08 ..
drwxr-xr-x  3 root root 4096 2007-04-15 20:08 usr
drwxr-xr-x  2 root root 4096 2007-04-15 20:08 sbin
-rw-r--r--  1 root root 1024 2007-04-15 20:08 luks.key
drwxr-xr-x  4 root root 4096 2007-04-15 20:08 etc
drwxr-xr-x 10 root root 4096 2007-04-15 20:08 .
root@test-desktop:/tmp/initramfs# grep "luks.key" scripts/local-top/cryptroot 
        cryptcreate="/sbin/cryptsetup -d luks.key luksOpen $cryptsource $crypttarget"
        cryptcreate="/sbin/cryptsetup -c $cryptcipher -s $cryptsize -h $crypthash -d luks.key create $crypttarget $cryptsource"
root@test-desktop:/tmp/initramfs# 
luks.key ist hier im "root" dir...


viel spass

cu

Antworten