# Verschlüsseltes Root

## Yikity

Hallo  :Smile: 

ich kam auf die Idee mein Root zu verschlüsseln, das hat auch geklappt, mit der Minimal CD kann ich das auch mounten, alles gut.

Evtl hab ich was auch nicht richtig verstanden...

Also ich muss ja dann mein Initramfs anpassen das dort das Laufwerk entschlüsselt und gemountet wird. Ich hab wie in der Wiki beschrieben ein neues Ramfs erstellt, die init sieht so aus. Die sleeps sind dazu da damit ich das besser verfolgen kann.

```

#!/bin/busybox sh

# Some useful functions

rescue_shell() {

    echo "Something went wrong. Dropping you to a shell."

    busybox --install -s

    exec /bin/busybox sh

}

# GPG workaround

cp -a /dev/console /dev/tty

# Mount the /proc and /sys filesystems.

mount -t proc none /proc

mount -t sysfs none /sys

busybox --install -s

mdev -s 

echo /bin/mdev > /proc/sys/kernel/hotplug

sleep 10

# root key

mount -t vfat /dev/sdc1 /mnt/flash

sleep 10

# Unlock partition

cryptsetup -d /mnt/flash/ARRAKIS.HSQ luksOpen /dev/sda1 root

sleep 10

# Mount new root 

mount /dev/mapper/root /new-root

sleep 10

# Create swap device

cryptsetup -c twofish -h sha256 -d /dev/urandom create swap /dev/sda2

mkswap /dev/mapper/swap

# umount USB

umount /dev/sdc1

# Unmount old root

umount -l /proc

umount -l /sys

# Start new system

exec switch_root /new-root /sbin/init || rescue_shell

sleep 10

```

Die ersten Fehler gibt es bereits beim Mounten des USB Sticks, ohne "t vfat" bekam ich ein "invalid argument" und mit findet er das gerät nicht  :Sad: 

Mein andere Lösungsansatz ist die vorhandene init aus der vom Genkernel zu bearbeiten, die ist allerdings sehr umfangreich, etwa 700 Zeilen, weis jemand evtl wo ich da meinen Code zum Mounten einfügen kann?

Dann habe ich auch einiges über die Crypttab gelesen, wiewowann wird die denn verarbeitet? 

Vielen dank für die Hilfe! Hoffe jeder versteht mein Problem  :Smile: 

----------

## forrestfunk81

Hast du das Fat-Dateisystem auch fest in den Kernel kompiliert? Als Modul wird das so nicht funktionieren, da ja noch kein Zugriff auf die Festplatte besteht und dementsprechend das Modul noch nicht geladen werden kann. [Edit] Das gilt natürlich auch für das USB-Subsystem und überhaupt alles aus dem Kernel, was du während des initramfs benötigst. [/Edit]

Wenn du dein Swap mit zufälligem Key verschlüsseln willst kannst du das auch in /etc/conf.d/dmcrypt konfigurieren. DMcrypt wird vor dem mounten der fstab ausgeführt.

----------

## Yikity

Ok, du hast vollkommen recht, ich denke das habe ich nicht  :Smile:  ich werde das prüfen!

----------

## Max Steel

 *forrestfunk81 wrote:*   

> Wenn du dein Swap mit zufälligem Key verschlüsseln willst kannst du das auch in /etc/conf.d/dmcrypt konfigurieren. DMcrypt wird vor dem mounten der fstab ausgeführt.

 

Da aber der Kernel bereits /dev/sdc1 (als root) mounten will, wird das (imho) fehlschlagen. (er will ja / verschlüsseln).

Also braucht er die initramfs die ihm das root entschlüsselt, dieses einhängt und dann weitermacht.

----------

## forrestfunk81

 *Max Steel wrote:*   

>  *forrestfunk81 wrote:*   Wenn du dein Swap mit zufälligem Key verschlüsseln willst kannst du das auch in /etc/conf.d/dmcrypt konfigurieren. DMcrypt wird vor dem mounten der fstab ausgeführt. 
> 
> Da aber der Kernel bereits /dev/sdc1 (als root) mounten will, wird das (imho) fehlschlagen. (er will ja / verschlüsseln).
> 
> Also braucht er die initramfs die ihm das root entschlüsselt, dieses einhängt und dann weitermacht.

 

Ja für root benötigt man das initramfs, aber Swap verschlüsseln kann man auch erst später (vor localmount). Außer wenn man Suspend to disk will, dann muss Swap im initramfs gemounted werden, aber das funktioniert dann wiederum nicht mit einem zufälligen Schlüssel.

----------

## Max Steel

 *forrestfunk81 wrote:*   

>  *Max Steel wrote:*    *forrestfunk81 wrote:*   Wenn du dein Swap mit zufälligem Key verschlüsseln willst kannst du das auch in /etc/conf.d/dmcrypt konfigurieren. DMcrypt wird vor dem mounten der fstab ausgeführt. 
> 
> Da aber der Kernel bereits /dev/sdc1 (als root) mounten will, wird das (imho) fehlschlagen. (er will ja / verschlüsseln).
> 
> Also braucht er die initramfs die ihm das root entschlüsselt, dieses einhängt und dann weitermacht. 
> ...

 

Verdammt, das "Swap" hab ich überlesen, sorry.

----------

## Yikity

Wobei das mit dem SWAP nicht so wichtig ist, wenn das Root von sda3 irgendwie eingebunden wird bekomm ich den Rest schon hin. Bin noch auf der Arbeit, später schau ich mal ob vFat im Kernel ist, bzw ich formatiere den Stick mal mit ext3, das sollte ja dann klappen.

----------

## Yikity

vFat ist im Kernel, habe zur Sicherheit den Stick zu ext3 formatiert, leider das selber...

Eine Zwischenfrage hab ich da noch... In dem Wiki Artikel 

http://de.gentoo-wiki.com/wiki/DM-Crypt/Root-Partition_verschl%C3%BCsseln_per_initramfs

wird das mounten per node beschrieben, wenn ich jedoch "file /dev/sdc1" sage kommt bei mir "block special" ohne Zahlen, was soll mir denn das sagen?

Hat jemand das schon erfolgreich mit dem Artikel geschafft?  :Smile:  Ich zerbeiß mir daran noch die Zähne...

----------

## SinoTech

 *Yikity wrote:*   

> 
> 
> [...]
> 
> Eine Zwischenfrage hab ich da noch... In dem Wiki Artikel 
> ...

 

Die Ausgabe wurde wohl mit einer anderen Version des "file" Kommando gemacht. Wenn du die Zahlen brauchst, mach einfach ein "ls -l /dev/GERÄT".

Falls dir "mdev -s" die Gerätedateien nicht anlegt (ich habe es noch nie ausprobiert), kannst du die natürlich auch manuell anlegen.

Cheers,

Sino

----------

## Josef.95

Nur mal als kurzer Hinweis, im aktuellen util-linux Paket ist seit einiger Zeit auch 

```
# lsblk
```

 verfügbar, das gibt eine sehr schöne Baumansicht der Devices, mit vielen Infos  :)

----------

## Yikity

also mittlerweile konnte ich das ext4 als Übeltäter entlarven, obwohl es im kernel ist kann ich ext4 nicht in der initramfs mounten, ist das mount von busybox zu doof dazu? 

Bei mount ohne -t kommt immer invalid argument, mit -t ext4 kommt no such device  :Sad:  also habe ich die platte mal zu ext3 formatiert, damit klappt es spontan.

----------

## Josef.95

Das kommt mir doch sehr bekannt vor, hast du zufällig den CONFIG_EXT4_USE_FOR_EXT23=y Treiber im Kernel aktiv?

----------

## Yikity

hmmm bin leider ein kacknoob  :Smile:  und benutze genkernel... naja und da im Menuconfig habe ich bei ext4 ein * gesetzt damit es im Kernel ist  :Smile:  oder ist dieser haken irgendwo versteckt?  :Smile: 

----------

## Josef.95

Hmm.., ich wollte nur drauf hinweisen das es grade im im Zusammenhang mit einer initrd Probleme geben kann wenn du den EXT4_USE_FOR_EXT23 Treiber im Kernel mit verwendest.

Das Problem ist dann das dein rootfs eventuell nur als ext2 eingebunden wird, oder wenn du in der initrd explizit ext4 angibst, das dann dein rottfs gar nicht erst eingebunden werden kann.

Siehe hierzu auch https://bugs.gentoo.org/318307 und

https://bugzilla.kernel.org/show_bug.cgi?id=15391

Doch wenn du diesen Treiber nicht verwendest, dann wird dein Problem eventuell auch ganz wo anders liegen, sprich überprüfe am besten ob du ihn wirklich mit verwendest.

Siehe zb in der Ausgabe von 

```
zgrep CONFIG_EXT4_USE_FOR_EXT23 /proc/config.gz

oder

grep CONFIG_EXT4_USE_FOR_EXT23 /usr/src/linux/.config
```

----------

