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: Select all
$ 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.
Code: Select all
$ make bzImage && make modules && make modules_install
$ mount /boot
$ cp arch/i386/boot/bzImage /boot/gentoo-crypt
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: Select all
$ ROOT="/boot" USE="make symlinks" emerge -av sys-apps/busybox sys-fs/device-mapper sys-fs/cryptsetup-luks
Code: Select all
$ touch /boot/init
$ chmod +x /boot/init
$ nano /boot/init
Code: Select all
#!/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]
Speichern --> init fertig.
Nun werden alle nötigen Verzeichnisse in /boot angelegt
Code: Select all
$ mkdir /boot/dev
$ mkdir /boot/dev/mapper
$ mkdir /boot/proc
$ mkdir /mnt/new_root
Code: Select all
$ emerge -av cryptsetup-luks device-mapper
Code: Select all
$ 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
Code: Select all
$ nano /boot/grub/menu.lst
Code: Select all
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
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: Select all
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
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/h ... t=1&chap=5 . ABER teilweise ist es hier etwas anders wie im Handbuch und sollte auch so wie hier beschrieben gemacht werden!!
Code: Select all
$ 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
Code: Select all
$ emerge --sync
$ cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
$ USE="-doc symlink" emerge -av gentoo-sources
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: Select all
$ 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
Code: Select all
$ rm /etc/fstab
$ nano /etc/fstab
Code: Select all
/dev/mapper/root / auto noatime 1 1
proc /procproc defaults 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
Code: Select all
$ nano /etc/conf.d/net
$ rc-update add net.eth0 default
$ nano /etc/hosts
Code: Select all
$ passwd (root-pw setzen)
$ nano /etc/rc.conf
$ nano /etc/conf.d/keymaps
$ nano /etc/conf.d/clock
Code: Select all
$ 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)
Den Bootloader haben wir schon, also noch wie in Step 11 beschrieben, einen User anlegen.
Nun das ganze umounten.
Code: Select all
$ exit
$ cd
$ umount /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
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: Select all
$ cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hdX
$ cryptsetup luksOpen /dev/hdX daten
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: Select all
$ mke2fs -j -m 0 /dev/mapper/daten
Code: Select all
$ mkdir /home/USER/daten
$ mount /dev/mapper/daten /home/USER/daten
(natürlich den eigenen Benutzer eintragen anstelle von USER)
Code: Select all
$ chmod +rw /home/USER/daten
$ chown USER /home/USER/daten
Code: Select all
#!/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 $?
}
Code: Select all
$ chmod +x /etc/init.d/mount_crypt
Code: Select all
$ rc-update add mount_crypt default
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 ... 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_ ... _with_LUKS
http://de.gentoo-wiki.com/Mini-Gentoo
http://de.gentoo-wiki.com/DM-Crypt#Swap ... 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
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
