Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Verschlüsseltes Gentoo mit cryptsetup-luks und ohne initrd
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation
View previous topic :: View next topic  
Author Message
doedel
Guru
Guru


Joined: 05 Feb 2006
Posts: 542
Location: DK

PostPosted: Mon Oct 30, 2006 5:07 pm    Post subject: Verschlüsseltes Gentoo mit cryptsetup-luks und ohne initrd Reply with quote

Ich habe schon einige Howtos dazu durchgearbeitet, aber Anfangs kam ich mit der initrd nicht wirklich zurecht und schliesslich will man ja alles mal selber gemacht haben, also habe ich dies auch getan und gleich das Howto hier geschrieben.
Ich hoffe man kann es gebrauchen.

Ausgangssituation:
Bei mir sah es so aus:
/dev/hda1 /boot (ab 15MB, meine hat 60MB)
/dev/hda2 /swap
/dev/hda3 / (ein installiertes und funktionierendes Gentoo)
/dev/hdc1 [frei]

Das ganze geschah aus dem schon laufenden Gentoo heraus. Sicher lässt sich das auch mit einer LIVE-CD machen (die 2006.1er hat glaube ich sogar Portage mit drin), aber damit habe ich mich nicht mit befasst, kann es ja noch mal machen (oder einer von euch). Es basiert auf einem 2.6er Kernel (im Moment 2.6.17-gentoo-sources), ich weiss allerdings nicht, ob es mit einem 2.4er auch tut. Darunter? Evtl. noch mit dem 2.4er, aber alles andere wage ich zu bezweifeln.

1. Kernel

Zuerst schaut ihr ob euer Kernel folgendes eingebaut hat:

(Ich habe einfach alle Algiorhythmen fest eingebaut, so kann keiner fehlen, aber fühlt euch frei, zu experimetieren und auszuprobieren)
Code:

$ cd /usr/src/linux
$ make menuconfig

--> Cryptographic Options
   --> Alles <*>
--> Device Drivers
   --> Block Devices
     <*> Loopback Device Support
     <*>   Cryptoloop Support
   --> Multi Device Support (RAID and LVM)
     <*> Device Mapper Support
     <*>   Crypt Target Support


Dann natürlich noch eure Dateisysteme, aber das werde ich hier nicht beschreiben, das sollte von vornherein schon klar sein.

Dann speichert ihr eure Konfiguration beim Verlassen von menuconfig und baut euren Kernel:
Code:

$ make bzImage && make modules && make modules_install
$ mount /boot
$ cp arch/i386/boot/bzImage /boot/gentoo-crypt

So, der Kernel wäre fertig, auf zum nächsten Schritt.

2. /boot bearbeiten

Nun bekommt /boot ein Mini-Gentoo verpasst, das zuerst bootet, das verschlüsselte Root-Device mountet, chrootet und dann bootet als wäre es nicht verschlüsselt.
Mein Mini-Linux mit Kernel und Grub hat 6.5MB, also müsste eine Boot-Partition von 12-15MB auf jeden Fall reichen.
Code:

$ ROOT="/boot" USE="make symlinks" emerge -av sys-apps/busybox sys-fs/device-mapper sys-fs/cryptsetup-luks

Nun erstellt ihr die /init-Datei.
Code:

$ touch /boot/init
$ chmod +x /boot/init
$ nano /boot/init

Jetzt seid ihr im Editor Nano und könnt bequem per c&p folgende Init einfügen.
Code:

#!/bin/ash

# Einstellungen fuer das init-script
ROOT_DEV=/dev/hdc1
NEW_ROOT=/mnt/new_root
NEW_ROOT_BOOT=/mnt/new_root/boot
NEW_ROOT_INIT=/sbin/init
PROC_DIR=/proc
MAPPER_DIR=/dev/mapper
ERR_SHELL=/bin/ash
# Ende Einstellungen

clear
echo " Dies ist ein Linux System mit verschluesseltem Root-Device."
echo
echo " * Setze umask .."
umask 022
echo " * Mounte /proc .."
mount -t proc none $PROC_DIR
echo " * Erstelle Ramdisk fuer " $MAPPER_DIR " .."
mount -t tmpfs none $MAPPER_DIR
echo " * Richte " $MAPPER_DIR "/control ein .."
cp /dev/control $MAPPER_DIR
echo " * Mounte Dateisysteme .."
cryptsetup luksOpen $ROOT_DEV root
mount /dev/mapper/root $NEW_ROOT -o rw
echo "   - $NEW_ROOT"
mount --bind / $NEW_ROOT_BOOT
mount -t tmpfs none /etc
cat /proc/mounts > /etc/mtab
mount -o remount,ro $NEW_ROOT
mount -o remount,rw /dev/root
umount /etc
echo "   - $NEW_ROOT_BOOT"
echo " * Starte init.."
exec <dev/console >dev/console 2>&1
exec chroot $NEW_ROOT $NEW_ROOT_INIT

echo " *** INIT KONNTE NICHT GESTARTET WERDEN !!! ***"
echo " * Versuche eine Shell zu starten (" $ERR_SHELL ") .."
exec $ERR_SHELL


# WICHTIG!!! HIER AUF KEINEN FALL KOMMENTARZEICHEN ENTFERNEN!! DIES IST ZUM ANLEGEN NEUER MAPPINGS!!! (BEISPIEL)
#
#   /bin/cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hdc1
#   /bin/cryptsetup luksOpen /dev/hdc1 root
#   mke2fs /dev/mapper/root
#   mkdir /new_root
#   mount /dev/mapper/root /new_root
#
# [ENDE]


Bei "#Einstellungen" muss eigentlich nur ROOT_DEV angepasst werden. Der Rest bleibt im Normalfall so, ich habe das allerdings als Variablen gemacht, falls man mal was ändern will (sinnlose Spielereien), dass man dann nicht das Script immer durchgucken muss, wo man nun was ändern muss.
Speichern --> init fertig.

Nun werden alle nötigen Verzeichnisse in /boot angelegt
Code:

$ mkdir /boot/dev
$ mkdir /boot/dev/mapper
$ mkdir /boot/proc
$ mkdir /mnt/new_root

Und jetzt die nötigen dev-Nodes kopiert. Um dies zu tun muss auf dem "Install-Linux" cryptsetup-luks und device-mapper installiert sein, sowie der Kernel muss wie oben angepasst sein.
Code:

$ emerge -av cryptsetup-luks device-mapper

Jetzt die Nodes.
Code:

$ cp /dev/console /boot/dev/
$ cp /dev/null /boot/dev
$ cp /dev/mapper/control /boot/dev     (NUR NACH /dev!!! wird vom script beim booten geändert, aber jetzt erst nach /dev!)
$ cp /dev/hd* /boot/dev
bzw
$ cp /dev/sd* /boot/dev


Jetzt wird Grub eingerichtet.
Code:

$ nano /boot/grub/menu.lst

Dies ist meine menu.lst, natürlich anpassen, aber nur die root= option, wenn es bei euch anders sein sollte.
Code:

timeout 10
splashimage /grub/splash.xpm.gz

title Gentoo verschluesselt
      root(hd0,0)
      kernel /gentoo-crypt root=/dev/hda1 init=/init

title Gentoo Rescue
      root (hd0,0)
      kernel /gentoo-crypt root=/dev/hda3


So, das wäre geschafft, also auf zum Erstellen der verschlüsselten Partition und Installation von Gentoo mit einem stage3-Archiv.

3. Verschlüsseln und Installieren

Wie ihr vielleicht anhand des Beispiels in dem Init-Script schon gesehen habt, wird die Partition so verschlüsselt:

Code:

DARAN DENKEN, DASS MAN DIE RICHTIGE PARTITION EINSTETZT!!
cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hdc1
cryptsetup luksOpen /dev/hdc1 root             
mke2fs /dev/mapper/root
mkdir /mnt/gentoo
mount /dev/mapper/root /mnt/gentoo

und schwupps habt ihr sie gemountet und könnt Gentoo installieren.
Das werde ich hier aber nur so nötig wie möglich beschreiben, da man sowas schon können sollte... Wenn man mal im Handbuch spitzeln will, ab hier gehts los http://www.gentoo.org/doc/de/handbook/handbook-x86.xml?part=1&chap=5 . ABER teilweise ist es hier etwas anders wie im Handbuch und sollte auch so wie hier beschrieben gemacht werden!!
Code:

$ date MMDDhhmmYYYY
$ cd /mnt/gentoo
$ wget http://distfiles.gentoo.org/releases/x86/current/stages/stage3-i686-2006.1.tar.bz2
$ wget http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2
$ tar xvfjp stage3-i686-2006.1.tar.bz2
$ tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr
(make.conf anpassen, use-flags usw...)
$ nano /etc/make.conf
$ cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
$ mount -t proc none /mnt/gentoo/proc
$ mount -o bind /dev /mnt/gentoo/dev
$ chroot /mnt/gentoo /bin/bash
$ env-update && source /etc/profile

So, nun ist man im neuen Gentoo, weiter, hopphopp! Bald sind wir fertig!
Code:

$ emerge --sync
$ cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
$ USE="-doc symlink" emerge -av gentoo-sources

Ab hier wirds ein klein bisschen haarig (aber nur ganz wenig) und anders wie im Handbuch.
Der Kernel vom Hostsystem muss genau der gleiche sein, wie der vom neuen System!!! Und keine Jammereien, wenn ihr Module nicht verwenden könnt! Ich habe euch gewarnt...
(In einem anderen Terminal, ohne chroot!!!)
Code:

$ cp /usr/src/linux/.config /mnt/gentoo/root/kconf
$ cd /usr/src/linux
$ make menuconfig
   Load an alternate configuration file
       /root/kconf
   OK
  Exit und speichern
$ make modules && make modules_install

So, hier ists immer noch anders! Die fstab kann so übernommen werden (teilweise, ist aber beschrieben), die alte am besten löschen (also die aus dem Stage3 Archiv).
Code:

$ rm /etc/fstab
$ nano /etc/fstab

Code:

/dev/mapper/root   /   auto   noatime   1 1
proc   /procproc   defaults   0 0
shm   /dev/shm   tmpfs   nodev,nosuid,noexec   0 0

So, weiter mit dem Netzwerk (Im Handbuch Step 8.b)
Code:

$ nano /etc/conf.d/net
$ rc-update add net.eth0 default
$ nano /etc/hosts

und nun weiter mit den restlich Kleinigkeiten...
Code:

$ passwd  (root-pw setzen)
$ nano /etc/rc.conf
$ nano /etc/conf.d/keymaps
$ nano /etc/conf.d/clock

Noch ein paar Kleinigkeiten emergen...
Code:

$ emerge -av syslog-ng vixie-cron device-mapper cryptsetup-luks
$ rc-update add syslog-ng default
$ rc-update add vixie-cron default
$ emerge -av dhcpcd   (wenn man netz per dhcp hat)
$ emerge -av rp-pppoe (wenn man sich ins netz einwählen muss)

Jetzt noch die nötigen Dateisystem Tools, bei ext2/ext3 braucht man nix, ansonsten Step 9.e

Den Bootloader haben wir schon, also noch wie in Step 11 beschrieben, einen User anlegen.

Nun das ganze umounten.

Code:

$ exit
$ cd
$ umount /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo


So. Fertig. Erst mal recken, strecken, eine rauchen und dann geniessen :)

4. Zusätzliche Datenpartition

Um eine zusätzliche Partition miteinzubinden, benötigt es lang nicht mehr soviel Arbeit wie die Gentoo-Installation.
Ich werde hier nur den Weg mit Passwort beschreiben, da ich nichts von keyfiles halte, wenn diese in die falschen Hände gelangen, bringt das alles ja nichts ;).
Zuerst wird die Partition verschlüsselt:
Code:

$ cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hdX
$ cryptsetup luksOpen /dev/hdX daten

Nun wird diese formatiert:

Ich verwende für Datenpartitionen immer den Parameter -m 0, das heisst, dass nichts für den Superuser reserviert wird. Ich denke, dass dies nur auf der /-Part. etwas ausmacht, aber wenn ich da falsch liege, sagt es mir!
Code:

$ mke2fs -j -m 0 /dev/mapper/daten

und anschliessend gemountet:
Code:

$ mkdir /home/USER/daten
$ mount /dev/mapper/daten /home/USER/daten
(natürlich den eigenen Benutzer eintragen anstelle von USER)

jetzt wird das ganze für den User beschreibbar gemacht:
Code:

$ chmod +rw /home/USER/daten
$ chown USER /home/USER/daten

So das wärs fürs erste, jetzt noch ein init-script um das ganze beim Booten machen zu lassen. (Also das mounten..)

Code:

#!/sbin/runscript

start() {
  ebegin "Mounte verschlüsselte Partition"
  cryptsetup luksOpen /dev/hdX daten
  mount /dev/mapper/daten /home/USER/daten
  eend $?
}

stop() {
  ebegin "umounten der verschlüsselten Partition"
  umount /dev/mapper/daten
  cryptsetup luksClose /dev/mapper/daten
  eend $?
}


Dieses initscript wird nun nach /etc/init.d/mount_crypt gespeichert und mit
Code:

$ chmod +x /etc/init.d/mount_crypt

ausführbar gemacht und so zum default-runlevel hinzugefügt:
Code:

$ rc-update add mount_crypt default


So, fertig :)
Das sollte natürlich auch funktionieren wenn man es nach /home/USER mountet, also als home-Verzeichnis, habe ich aber nicht versucht.

5. Swap

Ich habe es natürlich auch selber versucht, aber das war nicht wirklich das Gelbe vom Ei. Ich habe diesen Schritt vom Gentoo-Wiki übernommen und möchte ihn deshalb hier verlinken.

http://de.gentoo-wiki.com/DM-Crypt#Swap-Partition_verschl.C3.BCsseln

6. Zum Schluss

Meine Quellen für dieses Howto waren:
http://www.gentoo.org/doc/de/handbook/handbook-x86.xml
http://gentoo-wiki.com/SECURITY_System_Encryption_DM-Crypt_with_LUKS
http://de.gentoo-wiki.com/Mini-Gentoo
http://de.gentoo-wiki.com/DM-Crypt#Swap-Partition_verschl.C3.BCsseln
Vielen Dank an diejenigen, die diese Howtos und das Handbuch geschrieben haben, sowie an alle die in irgendeiner Weise damit zu tun haben.

Und hier noch ein Thread dazu: http://forums.gentoo.org/viewtopic-t-511797.html


Bugs/TODO:
1. Als zweiten Bootloader LILO, was für AMD-64 user leider entfällt (mich juckts net, grub rockz :P)
2. Vielleicht ein Howto schreiben, wie man dies von einer LIVE-CD auf eine frische Platte bastelt.

Änderungen:
1. /boot kann mit neuem init script fürs Mini-Linux beschrieben werden.
2. Dateisystemcheck funzt nun auch, device-mapper und crypt-setup-luks fehlten auf verschlüsseltem System -> fstab "1 1" für root-dev.
3. Swap hinzugefügt
4. Datenpartition hinzugefügt (ich denke mal, seit diesem Schritt und Swap ist es auch 100% benutzbar ;) obwohl es natürlich auch andere Howtos und Wege gibt)
_________________
i5 Gentoo | Phenom II Gentoo | i7 Gentoo
http://krumeltee.wordpress.com/ -> Embedded-/AVR32-Linux, AVR, ..., ...
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum