HOWTO: Gentoo Vollverschlüsselung mit Cryptsetup und initramfs, bei der Installation
Diese Howto beschreibt eine Vollverschlüsselung eines Gentoo-Systems bei der Installation, als 32-Bit-Desktop-System, sie lässt sich allerdings zu großen Teilen auch auf Servern anwenden, jedoch nicht remote. Klären wir erst einmal die Frage: “Warum Gentoo?” Gentoo ist im Moment mein persönlicher Favorit bei den Linux-Distributionen, nicht nur weil einige Dinge einfacher gestaltet sind, wie zum Beispiel die Einbindung von Start- und Stopscripten, sondern auch weil installierte Systemdienste,Beispiel: Samba, nicht wie bei Debian automatisch gestartet werden, und dabei eventuelle Sicherheitslücken aufmachen, Beispiel: Standardport bei SSH.
ACHTUNG: Diese Anleitung erfordert grundlegende Linux-Kenntnisse, zum Beispiel Dateien editieren, ausführbare Dateien starten und Archive entpacken.
Vorbereitung:
Wir benötigen mindestens eine die Gentoo-LiveCD mit 700MB, da wir gnupg benötigen.
AUSNAHME: falls jemand sein System mit Hilfe eines USB-Sticks starten will und kein weiteres Passwort eingeben will, brauch man nur die ca. 50 mb-Große minimalCD.
Es wäre auch möglich eine statische Ausführbare von gpg auf einem Usbstick zu haben.
Desweiteren ist es sinnvoll das Handbuch von gentoo.de (http://www.gentoo.de/doc/de/handbook/handbook-x86.xml?full=1) aufzuhaben, sinnvollerweise sogar auf einem anderen Rechner, Copy’n'Paste spart viel Zeit
Booten von CD:
SInd alle Daten auf dem Rechner gesichert, falls nötig, kann die LiveCd gebootet werden.
Wenn dann “boot:” steht, “gentoo nox” eingeben, das startet die gentooLiveCD, ohne X zu starten, welches bei der großen Cd und der DVD dabei ist.
Sollte bis zum Prompt vergessen worden sein die Keymap festzulegen kann dies durch Andern der KEYMAP-Variable auf
KEYMAP=”de”
Um die deutsche Tastatur zu aktivieren:
# /etc/init.d/keymaps restart
Nun ist es an der Zeit den SSH-server zu starten, um einen Konfigurationsvorteil zu erlangen
:
# /etc/init.d/sshd start
Damit auch jemand verbinden kann sollte das root-Passwort gesetzt werden:
# passwd
Nun geht es ans Partitionieren:
# fdisk /dev/hda
Nachdem man seine Partitionen persönlich angepasst hat (fÃ?¼r genaue Schritte bitte im Handbuch nachschlagen.), können wir mit dem crypten und formatieren anfangen:
# mke2fs /dev/hda1 # Hier wird die boot-Partition formatiert
# mkswap /dev/hda2 # selbsterklärend ...
# swapon /dev/hda2 # ''
da das Keyfile irgendwo gespeichert werden muss, eignet sich die boot-Partition hervorragend dafür, deshalb mounten wir diese und erstellen den key:
# mount /dev/hda1 /mnt/gentoo/
# dd if=/dev/urandom count=100 | gpg --symmetric -a --cipher-algo aes > /mnt/gentoo/key.gpg
Danach muss die root-Partition formatiert, die boot partition kurz entmountet werden und alle Partitionen gemountet werden:
# gpg --decrypt /mnt/gentoo/key.gpg | cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/hda3 #hier wird die Partition gecryptet
# gpg --decrypt /mnt/gentoo/key.gpg | cryptsetup luksOpen /dev/hda3 root # die partition wird geöffnet, geöffnete cryptpartitionen finden sich dann unter /dev/mapper/*
# mke2fs -j /dev/mapper/root # ext3 wird erstellt
# umount /mnt/gentoo/ # unmounten der boot-Partition
# mount /dev/mapper/root /mnt/gentoo/
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /mnt/gentoo/boot/
Auf gehts zur eigentlichen Installation:
# cd /mnt/gentoo/
Jetzt wie im Handbuch beschrieben die stage3- und portage-Archive laden, danach entpacken
# Siehe Handbuch!
Danach wird das Herzstück gentoos konfiguriert:
# nano -w /mnt/gentoo/etc/make.conf
Hier auch wieder das Handbuch konsultieren, oder Erfahrung haben. Das ist eine meiner Configs:
TIPP: man kann gleich die USE-Flags eintragen, ich hab das nach dem chrooten vergessen .. ist nicht nett
TIPP2: Wenn man SYNC und GENTOO_MIRRORS auskommentiert, bzw weglässt, benutzt Gentoo den schnellsten
den es finden kann.
______________________________________________________________________________________________________
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /etc/make.conf.example for a more detailed example.
CFLAGS="-O2 -march=prescott -pipe"
CXXFLAGS="${CFLAGS}"
# This should not be changed unless you know exactly what you are doing. You
# should probably be using a different stage, instead.
CHOST="i686-pc-linux-gnu"
MAKEOPTS="-j3"
INPUT_DEVICES="keyboard mouse synaptics"
VIDEO_CARDS="fglrx radeon"
LINGUAS="de"
#SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
#GENTOO_MIRRORS="http://ftp.uni-erlangen.de/pub/mirrors/gentoo "
USE="ssl sse sse2 mmx dvd ffmpeg mpeg mad wxwindows aac dts a52 ogg flac theora
oggvorbis matroska freetype bidi xv gnutls stream vlm httpd cdda vcd cdio live fglrx X
kde -svga -gnome qt3 qt4 -dlloader -voodoo -3dnow -3dfx -nvidia "
PORTDIR="/usr/portage"
_______________________________________________________________________________________________________
Kopieren wir noch schnell die DNS-Infos, sonst haben wir kein Internet
# cp -L /etc/resolv.conf /mnt/gentoo/etc/
CHROOTen:
Mounten wir noch die benötigten pseudofilesystems
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
und betreten die neue Umgebung:
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1"
jetzt befinden wir uns in dem Neuen System, das als erstens über die aktuellen Pakete informiert werden muss:
# emerge --sync
“emerge portage” nicht vergessen wenn es erforderlich wird!!!
Hier legen wir fest, dass es ein Desktop-Rechner wird, näheres im Handbuch:
# ln -snf /usr/portage/profiles/default-linux/x86/2007.0/desktop /etc/make.profile
Dann erstellen wir uns noch die Lokalisierungen:
# nano -w /etc/locale.gen
# locale-gen
und legen die Zeitzone fest:
# cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
Wichtig ist hier dass die Uhrzeit richtig geht und auch vernünftig eingestellt wird:
# nano /etc/conf.d/clock
CLOCK="local"
TIMEZONE="Europe/Berlin" # das "#" von Timezone nicht vergessen zu entfernen!
dann das Datum stellen.
KERNELKONFIGURATION:
# cd /usr/src/
Da man bei dem Gentoo-eigenen Kernel nachdem emerge –depclean die alten Sourcen gelöscht hat den neuen Kernel in jedem Fall bauen muss, da sonst einige KernelabhÃ?¤ngigen Anwendungen nicht mehr installiert werden können, empfehle ich die Kernelsourcen von kernel.org (http://kernel.org).
Hier die Vorgehensweise am Beispiel des 2.6.23.14er Kernel:
# wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.14.tar.bz2
# tar xfvj linux-2.6.23.14.tar.bz2
Danach muss noch der symbolische Link erstellt werden:
# ln -s linux-2.6.23.14 linux
Nachdem die Kernelsourcen entpackt wurden und der link erstellt wurde können wir mit der Kernelkonfoguration anfangen:
# cd linux
# make menuconfig
folgende Teile müssen für die Verschlüsselung im Kernel aktiv sein:
NICHT ALS MODULE!
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers --->
[*] Multiple devices driver support (RAID and LVM) --->
<*> Device mapper support
[ ] Device mapper debugging support
<*> Crypt target support
Cryptographic API --->
<*> SHA1 digest algorithm
<*> SHA256 digest algorithm
<*> SHA384 and SHA512 digest algorithms
<*> LRW support (EXPERIMENTAL)
<*> Blowfish cipher algorithm
<*> Twofish cipher algorithm
<*> Twofish cipher algorithms (i586)
<*> Serpent cipher algorithm
--- AES cipher algorithms
<*> AES cipher algorithms (i586)
Wenn alles eingestellt ist, möglichst ohne Module, kann die menuconfig verlassen werden und:
# make && make modules_install
ausgeführt werden. Wer ntfs-formatierte Festplatten mit schreibzugriff benutzen möchte, sucht in der /usr/src/linux/.config nach FUSE und stellt die entsprechende Variable auf =y.
Nach dem Kompilieren muss der Kernel noch auf die Boot-Partition kopiert werden:
# cp arch/i386/boot/bzImage /boot/kernel-2.6.23.14
Nun muss die fstab angepasst werden:
# nano -w /etc/fstab
/dev/hda1 /boot ext2 noauto,noatime 1 2
/dev/mapper/root / ext3 noatime 0 1
/dev/mapper/swap none swap sw 0 0
der Rest kann persönlich angepasst werden.
Ab jetzt darf das Handbuch ab der fstab bis einschließlich
9.e. Netzwerktools
durchgegangen werden (HINWEIS: /etc/conf.d/clock wurde schon geändert.)
Danach müssen für die Vollverschlüsselung benötigte Software installiert werden
# emerge -av cryptsetup-luks
jedoch kommen hier blockierte Pakete :
These are the packages that would be merged, in order:Calculating dependencies… done!
[ebuild N ] dev-libs/libgpg-error-1.5 USE=”nls” 364 kB
[ebuild N ] sys-fs/device-mapper-1.02.22-r5 USE=”(-selinux)” 186 kB
[ebuild N ] dev-libs/libgcrypt-1.2.4 USE=”nls -bindist -idea” 993 kB
[ebuild N ] sys-fs/cryptsetup-luks-1.0.4-r3 USE=”nls -build -dynamic (-selinux)” 300 kB
[blocks B ] <sys-fs/udev-115-r1 (is blocking sys-fs/device-mapper-1.02.22-r5)Total: 4 packages (4 new, 1 block), Size of downloads: 1,842 kB
!!! Error: The above package list contains packages which cannot be installed
!!! at the same time on the same system.For more information about Blocked Packages, please refer to the following
section of the Gentoo Linux x86 Handbook (architecture is irrelevant):http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?full=1#blocked
diese müssen mit emerge -uav <programmname> geupdatet werden, in diesem Fall:
# emerge -uav udev
Hiernach darf man
# etc-update
nicht vergessen.
Auch sollte man sich merken, welche config-Dateien neu geändert werden müssen.
# emerge -av cryptsetup-luks
Nun sollte die Überprüfung
# ldd /bin/cryptsetup
“not a dynamic executable” ergeben.
Nun muss gnupg installiert werden. da die version 2.0.7 keine statische version möglich ist muss eine ältere Version installiert werden:
# USE="static" emerge -av =gnupg-1.4.7-r1
Der Test:
# ldd /usr/bin/gpg
sollte “not a dynamic executable” ergeben.
Als letztes Werkzeug muss noch busybox installiert werden, auch wieder statisch:
# USE="static" emerge -av busybox
Und wieder soll der Test:
# ldd /bin/bb
“not a dynamic executable” ergeben.
Damit die root-Partition entschlüsselt werden kann, müssen verwendete Programme in eine initrd geladen werden. Erforderliche Elemente werden mir diesen Befehlen erstellt und kopiert:
mkdir /root/initramfs
cd /root/initramfs
mkdir {bin,dev,mnt,new-root,proc,sys}
mknod --mode=0660 dev/null c 1 3
mknod --mode=0600 dev/console c 5 1
cp /bin/busybox.static bin/busybox
cp /usr/bin/gpg bin/
cp /bin/cryptsetup bin/
cd bin
ln -s busybox sh
ln -s busybox mount
als nächstes muss das init-script erstellt werden:
# cd /root/initramfs
# nano -w init
Vorsicht: rufen Sie niemals direkt “busybox –install -s” in Ihrem System auf
Hierdurch werden innerhalb von /bin und /sbin symbolische Links auf “busybox” erstellt, die Ihr System durcheinanderbringen.
Innerhalb der Datei /init ist der Befehl ungefährlich, solange diese während des boot-Vorgangs innerhalb einer “gekapselten” Umgebung gestartet wird
#!/bin/sh
export PATH=/bin
umask 0077
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t tmpfs tmpfs /dev
busybox --install -s
mdev -s
echo /bin/mdev > /proc/sys/kernel/hotplug
while ! mount -n -o ro /dev/hda1 /mnt ; do # "key.gpg" liegt in der root-Partition
sleep 2
done
# tty fix
rm /dev/tty
ln -s /dev/console /dev/tty
while [ ! -e /dev/mapper/root ] ; do
sleep 2
gpg --quiet --homedir / --logger-file /dev/null --decrypt /mnt/key.gpg | cryptsetup luksOpen /dev/hda3 root
done
mount /dev/mapper/root /new-root
cryptsetup -c blowfish -h sha256 -d /dev/urandom create swap /dev/hda2
mkswap /dev/mapper/swap
echo > /proc/sys/kernel/hotplug
umount -l /mnt /proc /sys /dev
exec switch_root /new-root /sbin/init
Nun muss noch das init-script ausfürhbar gemacht werden:
# chmod 755 /root/initramfs/init
und das initrd-image gebaut werden:
# cd /root/initramfs
# find . | cpio --quiet -o -H newc | gzip > /boot/initramfs-crypt
Als nächstes wird grub installiert und die config-Datei erstellt:
# emerge -av grub
# nano -w /boot/grub/grub.conf
# Welcher Eintrag standardmäig gebootet werden soll. 0 ist der Erste, 1 ist der Zweite usw.
default 0
# Wie viele Sekunden gewartet werden soll, bevor der Standardeintrag gebootet wird.
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title=gentoo-2.6.23.14 (root encrypted)
root (hd0,0)
kernel /boot/kernel-2.6.23.14 root=/dev/hda3
initrd /boot/initramfs-crypt
Nun muss noch grub auf der entsprechenden Festplatte installiert werden:
# grep -v rootfs /proc/mounts > /etc/mtab
# grub-install --no-floppy /dev/hda
AUF IN DAS NEUE SYSTEM
# exit
# cd
# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
# cryptsetup luksClose root
# reboot
Und dann viel Spass mit dem System: Änderungen, Vorschläge und sonstiges als Kommentar
Mit bestem Dank an schon existierende Howtos von denen ich abgeschrieben habe
EDIT 21.01.08 : Copy’n'Paste-Kompatibilität wieder hergestellt!
EDIT 16.04.08 : Fehler behoben, Sonderzeichen normalisiert
7 Comments
Jump to comment form | comments rss [?] | trackback uri [?]