# Problem beim öffnen von verschlüsselten Partitionen beim boo

## Ocultor

Hi,

Ich wollte auf meinem Rechner ein paar Verzeichnisse verschlüsseln (var, tmp, home).

Das ganze soll mit Cryptsetup-luks funktionieren. Funktioniert auch soweit wenn ich es manuell mache wenn das System gestartet ist.

Beim Booten aber klappt es nicht. Ich werde aufgefordert 3x das Passwort einzugeben und dann kommt die Fehlermeldung: "No key available with this passphrase"

Meine /etc/conf.d/cryptfs sieht folgendermassen aus:

mount=home

source='/dev/hda5'

type=luks

mount=tmp

source='/dev/hda6'

type=luks

mount=var

source='/dev/hda7'

type=luks

Ich habe absolut keine Ahnung woran das liegen könnte vorallem weil es ja funktioniert wenn das System gestartet ist.

Ich hoffe ihr könnt mir helfen

Gruss Ocultor

----------

## blu3bird

Wahrscheinlich hast du wenn die Passwordeingabe kommt noch eine englische Tastatur.

Also ersetzt mal y durch z, ; durch / usw.

----------

## Ocultor

Ich kann es gerade nicht ausprobieren, aber solte es daran liegen, wie könnte ich das ändern?

----------

## Ocultor

OK, gerade ausprobiert und es liegt tatsächlich am Tastaturlayout.

Wenn jemand weiß wie man das ändern kann, wäre das nicht schlecht, wenn nicht ist das auch nicht dramatisch.

Gruss Ocultor

----------

## psyqil

Schau doch mal in /etc/init.d/cryptfs, wenn Du da keymaps hinzufügst, sollte das reichen. Beispiel:

```
depend() {

         need checkroot modules keymaps

}
```

Sollte da before localmount drinstehen, muß das raus, da keymaps erst nachher ausgeführt wird. Da Du /usr nicht verschlüsselst, könnte das funktionieren, aber für explodierende Toaster üernehme ich keine Haftung...  :Razz: 

----------

## shiosai

Hallo,

ich wollte meine Partitionen nun genauso aufsetzen. Gibt es denn eine Möglichkeit, dass man das Passwort nur einmal eingeben muss? In den How-Tos kann ich dazu nichts finden, aber mir scheinen die eh teilweise etwas veraltet, jedes howto hat auch ein anderes selbst gebasteltes init-script. Vieleicht wurde seit dem auch die Unterstützung im Base-Layout stark erweitert? Iist leider alles etwas verwirrend für Anfang... Selbst was das Verschlüsseln von swp angeht gibt es Differenzen zwischen der Gentoo-Dokumentation und der cryptfs.conf.  :Confused: 

----------

## shiosai

hmm... also entweder:

- gibts hier nicht so viele Luks-Benutzer

- hätte ich einen neuen Thread aufmachen sollen

- verschlüsselt niemand mehrere Partitionen mit dem selben Passwort

- geben alle ihr Passwort immer mehrmals ein

Über eine Antwort wäre ich schon dankbar   :Rolling Eyes: 

----------

## zworK

Bei mehreren verschlüsselten Partitionen mach doch folgendes:

- Verschlüssel die Root Partition oder Partition X mit einem Passwort.

- Lege auf diese Partition ein Keyfile ab.

- Setze dieses Keyfile als Schüssel für die übrigen Partitionen.

- Trage die Partitionen unter /etc/conf.d/cryptfs ein. Die Passwort-Partition am Anfang.

So wird erst die Partition mit Passwortabfrage entschlüsselt und die anderen über ein Keyfile, was dann automatisch geschieht.

----------

## shiosai

Danke.. so eine ähnliche Idee hatte ich auch schon. Ich dachte nur bevor ich irgendwas eigenes rumfrickel, gibts da vieleicht schon eine bestehende Lösung (baselayout?). In meinen Ohren hört sich das Problem recht "common" an. Die restlichen Keys während des Betriebs immer parat zu haben hört sich aber auch etwas nach einem Risiko an - auch wenn jemand, der Zugriff auf die Keys bekommen könnte wohl auch ohne solche wahrscheinlich schon genug anstellen könnte um auf Dauer Zufriff auf die Partitionen zu kommen... 

konsequenterweise könnte man die keys auch gleich auf einen USB-Stick packen. Aber wenn man diese dann zusätzlich per pgp verschlüsselt, hat man vieleicht dann wieder das Problem, dass Passwort öfters eingeben zu müssen.. hmm

EDIT: Man könnte die Key-Partition ja eigentlich auch gleich wieder unmounten, das sollte doch eigentlich gehen...

----------

## zworK

Also wenn eine unbefugte Person Zugang zu den keyfiles bekommt (die sich auf einem verschlüsseltem Medium befinden), liegen ihm eh schon alle anderen Daten offen.

Die ganzen verschlüsselten Partitionen sind dann ja alle seit dem Bootvorgang geöffnet. In diesem Szenario bringt die Verschlüsselung nur Sicherheit, wenn der Rechner aus ist.

Eine einfache "Config-Datei anpassen und fertig"-Lösung ist mir dafür auch nicht bekannt.

USB-Stick wäre eine Variante. Dort könnte man auch einen Luks-Container ablegen, mit den keyfiles drin. Oder halt eine eigene Partition für die Schlüssel.

Ein unmount mit anschließendem luksClose könnte vielleicht so funktionieren:

```
post_mount='umount /mnt/keys; cryptsetup luksClose crypt-keys'
```

Als Option für den letzten Eintrag.

Ums "frickeln" wirst du wohl nach meinem bisherigen Kenntnisstand mit der Materie nicht drumrum kommen. Aber vielleicht hat ja jemand anderes noch einen guten Einfall oder Link.

----------

## dmaus

Nur eine kurze Rückmeldung: Ich habe fast ein Proof of concept für das anvisierte Szenario hinbekommen: 

* wichtige Partitionen (/tmp, swap) werden beim Booten mit Zufallsschlüsseln verschlüsselt

* die Nutzerdaten liegen in mit Keyfiles verschlüsselten cryptsetup-luks-Partitionen vor

* die Keyfiles liegen auf einem mit Kennwort geschütztem cryptsetup-luks container

Das Problem, an dem ich (für heute) gescheitert bin: Die dm-crypt mappgings werden beim Booten vor dem mounten des USB sticks ausgeführt, weshalb alles daran scheiterte, dass der Container mit den Keyfiles nicht geöffnet werden konnte, weil der USB-Stick nicht gemountet war.

Was mal jemand nachschauen könnte:

  1. ob es nicht schon ein Howto für genau dieses Szenario gibt  :Wink: 

  2. wie man sauber das Einbinden des USB-Sticks vor dem dm-crypt mapping hinbekommt. "Sauber" meint dabei: Ohne an den Init-Scripts Veränderungen vorzunehmen.

----------

## shiosai

Hi,

schade, dass es nicht geklappt hat... als ich gerade die Einträge in die cryptfs-Datei geschrieben habe, habe ich mich auch gefragt, wieso er von sich aus zwischendrin die keypartition mounten sollte -  jetzt bestätigst du leider, dasss es wirklich nicht so funktioniert. Nach HowTo hab ich auch schon einiges gesucht... aber irgendwie noch nichts gefunden. Entweder diese Seitenlangen Anleitung wie man das komplette System möglichst umständlich verschlüsselt oder die Leute die die Passphrasen für jede Partition einzeln eingegeben haben.

Vieleicht wäre ein neuer Thread doch angebrachter.. so ausagekräftig ist der Titel hier doch nicht   :Rolling Eyes: 

----------

## dmaus

Hab' grad keine Zeit, das auszuprobieren aber: Das Mounten des USB-Sticks kann man doch durch die "pre_mount" Variable in /etc/conf.d/cryptfs veranlassen.

Heut' abend probier' ich es mal aus -- wenn alles schön klappt, dann kommt das definitiv in das wiki (de.gentoo-wiki.com)

Edit: Korrektur. So einfach geht das nicht. Die Einbinudng von cryptsetup-luks funktioniert nämlich so:

  * aus dem init-script checkfs heraus wird /lib/rcscripts/addons/dm-crypt-start.sh aufgerufen

  * dm-crypt-start.sh legt die mappings an -- die parameter pre_mount und post_mount werden nicht ausgewertet

  * später wird dm-crypt-start.sh ein zweites Mal aufgerufen, diesmal aus dem init-script localmount

  * jetzt werden die zuvor angelegten mappings gemountet, die parameter pre_mount und post_mount ausgeführt

D.h, das Problem besteht vor wie nach darin, dass ein cryptsetup-luks Container mit Keyfiles auf dem USB-Stick nicht verwendet werden kann, weil der USB-Stick zum Zeitpunkt, an dem die mappings angelegt werden nicht gemounted ist. 

Wenn ich das recht überblicke ist das Problem eher grundsätzlicher Natur: Was wir verlangen ist, dass eine cryptsetup-luks Partition/Container geöffnet ("luksOpen") und gemounted wird, bevor alle anderen cryptsetup-luks-Partitionen/Container eingebunden werden.

Es wird also nicht ohne ein eigenes Init-Script gehen, dass vor checkfs ausgeführt wird und:

- den Datenträger mit dem Container einbindet (mount)

und/oder

- den Container/die Partition mit dem Keyfiles öffnet ("luksOpen")

Hic rhodus - hic salta!

----------

## Ocultor

Hi,

Wenn mich nicht mehr alles täuscht gibt es eine Version von dm-crypt-start.sh mit der man USB sticks auf dem die Keys liegen mounten kann. Jedenfalls hab ich in den englischen Foren sowas gelesen in der Zeit, in der ich dieses Thread erstellt habe.

Wemnn ich euch und den Forenbeitrag richtig interpretiere könnte das weiterhelfen (https://bugs.gentoo.org/show_bug.cgi?id=145346)

Da wir aber gerade dabei sind und hier einige sind die tmp und swap mit zufälligem Schlüssel verschlüsseln:

Funktioniert bei mir nicht!

Meine cryptfs:

```
swap=swap

source='/dev/sda5'

#mount=tmp

#source='/dev/sdb3'

#type=luks

#options='-d /dev/urandom'

#pre_mount='mke2fs /dev/mapper/tmp'

#post_mount='chown root:root /tmp; chmod 1777 /tmp'
```

fstab:

```
/dev/mapper/swap    none            swap            sw              0 0

#/dev/mapper/tmp     /tmp    ext2   defaults   0 0
```

Bei der fstab gibts eine Fehlermeldung die ich hier noch nach dem nächsten neustart einfüge.

Bei tmp bleibt der Rechner stehen beim erstellen Partition mit luks

Vielleicht weiß hier grad jemand was los sein könnte?

Danke 

Gruss Heiko[/code]

----------

## dmaus

 *Quote:*   

> Da wir aber gerade dabei sind und hier einige sind die tmp und swap mit zufälligem Schlüssel verschlüsseln:
> 
> Funktioniert bei mir nicht!

 

Bei mir sieht das so aus:

/etc/conf.d/cryptfs

```
### Swap

swap=system-swap

options='-c aes-cbc-essiv:sha256'

source='/dev/hda2'

### Temporaere Dateien

mount=system-tmp

source='/dev/hda5'

options='-d /dev/urandom -c aes-cbc-essiv:sha256'

pre_mount='/sbin/mkfs.xfs ${dev}'

post_mount='chown root:root ${mount_point}; chmod 1777 ${mount_point}'
```

/etc/fstab

```
/dev/mapper/system-swap         swap                    swap            sw      0 0

/dev/mapper/system-tmp          /tmp                    xfs             noatime,nodev,nodiratime,noexec,nosuid,logbufs=8        0 0
```

Dein Problem bei /tmp liegt hier:

```
#type=luks

#options='-d /dev/urandom' 
```

LUKS kann keine Schlüssel über dev/{u}random lesen. Im übrigen ist die Verwendung bei Partitionen, die mit Zufallsschlüsseln erzeugt werden nicht nötig. Das kryptografisch wichtige steckt im Cipher und im Hash -- und nicht im LUKS.

Edit: Yo, das neue dm-start.sh ist wenn ich nicht ganz falsch liegen in sys-fs/cryptsetup-luks.1.0.4 enthalten. Ist halt noch nicht stable.

----------

## shiosai

Also bleibt als einfachste Lösung, das öffnen/mounten der restlichen verschlüsselten Partitionen + das unmounten der key-partition über ein script in local.start zu machen... oder hat jemand vieleicht ne bessere Lösung. Auf 1.04 wollte ich eigentlich auch erst zurückgreifen, wenn es stable ist.

----------

## dmaus

 *Quote:*   

> Also bleibt als einfachste Lösung, das öffnen/mounten der restlichen verschlüsselten Partitionen + das unmounten der key-partition über ein script in local.start zu machen... oder hat jemand vieleicht ne bessere Lösung.

 

Nicht unbedingt: Meine Angabe zum Ablauf der ganze Kiste war nicht korrekt. Das Kommando "pre_mount" führt dm-crypt.sh aus, wenn es durch /etc/init.d/checkfs aufgerufen wird und nachdem es ein mapping angelegt hat.

Aaalos könnte es doch so gehen:

- man schreibt das mount /mnt/usbstick in das pre_mount des ersten Eintrages in /etc/conf.d/cryptfs

=> dm-crypt-start.sh legt öffnet den ersten Eintrag ("luksOpen") und führt pre_mount aus: Der USB-Stick wird gemountet

- jetzt kann ein Eintrag in cryptfs folgen, in dem /mnt/usbstick/keyfiles.container an ein loop-Device gebunden und geöffnet ("luksOpen") wird

- als pre_mount für diesen Eintrag steht ein mount /dev/loop/0 /mnt/keyfiles

- schließlich die Einträge für die Partitionen, die die keyfiles benutzen.

Gleich mal ausprobieren!

Edit: Genau so geht es. Ich habe erfolgreich die cryptsetup-luks Partition /dev/data/test mit einem Keyfile geöffnet, dass sich in einem cryptsetup-luks-Container auf der Partition /dev/data/test-usb befindet.   :Very Happy: 

/etc/conf.d/cryptfs

```
##### /etc/conf.d/cryptfs

### Swap

swap=system-swap

options='-d /dev/urandom -c aes-cbc-essiv:sha256'

source='/dev/hda2'

pre_mount='/bin/mount -t xfs /dev/data/test-usb /mnt/usb'

### Temporaere Dateien

mount=system-tmp

source='/dev/hda5'

options='-d /dev/urandom -c aes-cbc-essiv:sha256'

pre_mount='/sbin/mkfs.xfs ${dev}'

post_mount='chown root:root ${mount_point}; chmod 1777 ${mount_point}'

### Home

mount=crypted-home

source='/dev/data/home'

options=''

type=luks

post_mount=''

### Test-Keyfiles-Container

mount=keyfiles

source='/dev/loop/0'

options=''

loop_file='/mnt/usb/keyfiles.dat'

type=luks

pre_mount='/bin/mount -t xfs /dev/mapper/keyfiles /mnt/keyfiles'

### Test-Keyfile-Part

mount=x-test

source='/dev/data/test'

options='-d /mnt/keyfiles/keyfile'

post_mount='/bin/umount /mnt/keyfiles; /sbin/cryptsetup luksClose keyfiles; losetup -d /dev/loop/0'

type=luks

##### /etc/conf.d/cryptfs
```

Werde mal die Tage einen Beitrag für das Wiki vorbereiten.

----------

## dmaus

Nachtrag: Das mounten der Partition/des Sticks im pre_mount des Swaps zu machen führt dazu, dass auf dem verschlüsselten Swap keine swap-signatur angelegt wird, da das von uns gesetzte pre_mount das "default"-pre_mount für swap überschreibt. Also muss die Zeile pre_mount lauten:

```

pre_mount='mkswap /dev/mapper/system-swap; /bin/mount -t xfs /dev/data/test-usb /mnt/usb

```

Evtl. lässt sich /dev/mapper/system-swap auch durch ${dev} ersetzen -- muss ick mal dm-script-start.sh anschauen.

----------

