Vollverschlüsselte Debian Installation auf Hetzner VServer installieren

Um hier mal wieder ein wenig Schwung in die Bude zu bringen und da ich eh grad mal wieder eine meiner Kisten neu aufsetzen muss, kommt hier nun die quasi live mitgeschriebene Anleitung wie man auf einem Hetzner VServer eine vollverschlüsselte Debian Installation aufsetzt.

Vorweg sind noch einige Dinge zu beachten:

Zuallererst sollte der Server in das Rescue System gebootet werden. Dazu klickt man im robot auf den entsprechenden VServer in der Serverliste und wählt den Reiter "Rescue" aus, notiert sich das root-Passwort und startet den Server neu.

Sobald der Server ins Rescuesystem gestartet ist sollte man die wichtigsten Netzwerkdaten sichern. Dazu notiert man sich die Ausgaben der folgenden Befehle.

cat /etc/resolv.conf
hostname
cat /etc/network/interfaces
route -n

Als nächstes werden die Partitionen angelegt. Wir benötigen eine 1GB große Partition für /boot und eine, den Rest der Platte belegende Partition für das verschlüsselte /-Verzeichnis.

Die /boot-Partition formatieren wir mit ext3.

# mkfs.ext3 /dev/vda1

Die verschlüsselte Partition erstellen wir mit folgenden Befehlen.

# cryptsetup luksFormat /dev/vda2
# cryptsetup luksOpen /dev/vda2 cda
# mkfs.ext4 /dev/mapper/cda2

Merkt euch das Passwort, welches ihr bei cryptsetup angebt gut, sehr gut! Solltet ihr das Passwort vergessen, könnt ihr euch von den Daten auf dieser Partition verabschieden.

Sollten irgendwelche speziellen Optionen für die Verschlüsselung gewünscht werden, so müssen diese beim Ausführen von cryptsetup luksFormat mit angegeben werden.

Am Ende sollte das Ganze ungefähr so aussehen:

# parted -l

Model: Linux device-mapper (crypt) (dm)
Disk /dev/mapper/cda2: 84.9GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  84.9GB  84.9GB  ext4


 Model: Virtio Block Device (virtblk)
 Disk /dev/vda: 85.9GB
 Sector size (logical/physical): 512B/512B
 Partition Table: msdos

 Number  Start   End     Size    Type     File system  Flags
  1      32.3kB  1024MB  1024MB  primary  ext3         boot
  2      1024MB  85.9GB  84.9GB  primary

Der nächste Schritt wäre das debootstrappen des Debian-Systems. Hierzu sind ein paar vorbereitende Schritte notwendig.

Zunächst einmal sollten die erstellten Dateisysteme eingehangen werden.

# mount /dev/mapper/cda2 /mnt
# mkdir /mnt/boot
# mount /dev/vda1 /mnt/boot

Die folgenden Schritte installieren Debootstrap in ein temporäres RAM-Drive um keine Spuren auf dem Rescue System zu hinterlassen. Wem das alles zu nervig ist, der kann auch das im Rescue vorinstallierte Debootstrap nutzen.

# mount -t tmpfs none /tmp
# cd /tmp
# wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.59_all.deb
# ar -xf debootstrap_1.0.59_all.deb
# tar xJf data.tar.xz
# tar xzf control.tar.gz

Mit folgendem Befehl wird die Integrität des heruntergeladenen Pakets überprüft. Es sollte keine Ausgabe liefern.

# cat md5sums | cut -d " " -f 3 | xargs md5sum $1 > md5sums.local; diff md5sums md5sums.local

Damit das heruntergeladene Paket auch in unserem temporären Verzeichnis ausgeführd werden kann muss die Variable "DEBOOTSTRAP_DIR" in ./usr/bin/debootstrap wie folgt angepasst werden:

DEBOOTSTRAP_DIR=/usr/share/debootstrap

wird zu

DEBOOTSTRAP_DIR=/tmp/usr/share/debootstrap

Weiter geht es mit dem Import der Debian-GPG-Schlüssel. Diese werden benötigt um die Echtheit der heruntergeladenen Pakete zu bestätigen.

# wget --no-check-certificate https://ftp-master.debian.org/keys/archive-key-7.0.asc
# gpg --import archive-key-7.0.asc

Nun kann das eigentliche System installiert werden.

# ./usr/sbin/debootstrap --keyring=/root/.gnupg/pubring.gpg --arch amd64 wheezy /mnt/ http://ftp2.de.debian.org/debian

Für die nächsten Schritte muss in das soeben installierte Debian gewechselt werden.

# mount -t proc none /mnt/proc
# mount -o bind /dev /mnt/dev
# mount -t tmpfs none /mnt/tmp
# mount -o bind /sys /mnt/sys
# LANG=C chroot /mnt /bin/bash

In den letzten Schritten geht es um die Konfiguration. Ein guter erster Schritt wäre das Setzen eines root-Passwortes mittels

# passwd

Als nächstes kommen die Netzwerkeinstellungen. In folgende Dateien sollten die Werte eingetragen werden, die am Anfang der installation gesichert wurden.

/etc/hostname
/etc/hosts
/etc/resolv.conf
/etc/network/interfaces

Auch sollte bootlogd aktiviert werden.

# echo 'BOOTLOGD_ENABLE=Yes' > /etc/default/bootlogd

Die Dateien /etc/crypttab, /etc/fstab und /etc/apt/souces.list sollten wie aussehen wie folgt:

#  cat /etc/crypttab 
cda2/dev/vda2 none luks

#  cat /etc/fstab
/dev/vda1/bootlogdext3noatime02
/dev/mapper/cda2/cda2ext4noatime,defaults,errors=remount-root01

# cat /etc/apt/sources.list
deb http://ftp.de.debian.org/debian/ wheezy main non-free contrib
deb-src http://ftp.de.debian.org/debian/ wheezy main non-free contrib
deb http://security.debian.org/ wheezy/updates main non-free contrib
deb-src http://security.debian.org/ wheezy/updates main non-free contrib
deb http://ftp.de.debian.org/debian/ wheezy-updates main non-free contrib
deb-src http://ftp.de.debian.org/debian/ wheezy-updates main non-free contrib

Jetzt werden die letzten Pakete installiert/aktualisiert sowie die Zeitzone, Systemsprache und Tastaturlayout eingestellt.

GRUB sollte nach /dev/vda installiert werden.

# aptitude update && aptitude -y upgrade
# aptitude -y install locales && dpkg-reconfigure locales
# dpkg-reconfigure tzdata
# aptitude -y install linux-image-amd64 ssh grub-pc pciutils psmisc cryptsetup dropbear busybox

Als letzter Schritt muss nun noch der Remote Unlock eingerichtet werden.

Hierfür wird die Datei /etc/initramfs-tools/initramfs.conf im editor geöffnet und die Zeile "DEVICE=" wie folgt geändert.

DEVICE=eth0
IP=Server-IP::Gateway-IP:Netmask:Hostname:eth0:off
DROPBEAR=y

Die einzutragenden Werte sind den anfänglich gemachten Notizen zu entnehmen.

Die Konfiguration wird mittels

update-initramfs -u -k all

übernommen.

Wer sich mittels ssh-Zertifikat anmelden möchte, sollte seinen public key in die Datei /etc/initramfs-tools/root/.ssh/authorized_keys eintragen.

Die Dateien id_rsa und id_rsa.pub in /etc/initramfs-tools/root/.ssh/ sollten danach vom Server gelöscht werden.

Jetzt kann das System neugestartet werden.

# update-grub
# exit
# reboot

Der Server sollte nach dem Neustart bei der Passwortabfrage für das cryptodevice stoppen. Entweder gibt man das Passwort über die Remotekonsole des robots ein oder man loggt sich per ssh in das dropbear/busybox Minimalsystem ein und gibt das Passwort mittels folgendem Befehl ein:

# echo -n "Passwort" > /lib/cryptsetup/passfifo

Sonderzeichen sollten hierbei mit "\" escaped werden.

Danach sollte das installierte Debian booten.

Beachtet bitte, dass sich die ssh fingerprints von der busybox und dem richtigen System unterscheiden.

Viel Spaß mit eurem neuen, verschlüsselten Debian.


2014-03-19 17:21 debian encryption linux