Ubuntu LTS Server 16.04 RAID1, LUKS, LVM

Aus ISSB Wiki
Wechseln zu: Navigation, Suche

Ziel dieser Installation

  • Es wird ein Server installiert, dessen System vollverschlüsselt wird. Das bedeutet, die Daten (Home-, System- und Bewegungsdaten, wie /var und /srv) des Servers liegen verschlüsselt vor, jedoch nicht die Boot-Partition.
  • Die Partition /srv soll separat als eine eigene Partition auf einem Logical Volume extrahiert werden, um später die Größe ohne größeren Aufwand variieren zu können.
  • Der Server muss mittels geeigneten Schlüssels entsperrt werden können. Als Schlüssel-Speicher wird ein USB-Memory-Stick verwendet, der bei Systemstart in einen USB-Slot eingesteckt und nach erfolgreichem Start abgezogen werden muss.

Installation Linux Ubuntu 16.04

Die Installation und Konfiguration von Linux Ubuntu LTS Server 16.04 wird auf den Ubuntu-Webseiten gut dokumentiert. Bei einfacher Installation ohne spezielle Anforderungen verläuft die Installation auch selbsterklärend und fehlerfrei.

Hier wird jedoch die Konfigurations-Variante beschrieben, wie Ubuntu LTS Server 16.04 mit RAID1, LUKS (cryptsetup) und LVM ausgestattet wird und zusätzlich verschiedene verschlüsselte Partitionen mittels USB-Memory-Stick entschlüsselt werden können.

Die Beschreibung der Einrichtung eines USB-Schlüssels auf der folgenden Ubuntu-Webseite funktioniert nur, wenn eine einzige Partition mit dem USB-Key entschlüsselt wird: https://wiki.ubuntuusers.de/System_verschl%C3%BCsseln/Entschl%C3%BCsseln_mit_einem_USB-Schl%C3%BCssel/

Die Abarbeitung der crypttab wird unter Ubuntu 16.04 durch systemd nicht fehlerfrei durchgeführt. Die Script-Dateien derivedkey oder keyscript.sh wurden unter Ubuntu 14.04 durch upstart noch fehlerfrei abgearbeitet.

Bsp. für crypttab (bis Ubuntu 14.04):

# /etc/crypttab
# <target name>	<source device>	<key file>	<options>
# Die Swap-Partition
VGSysData-LVSwap_crypt /dev/mapper/VGSysData-LVSwap /dev/urandom cipher=aes-xts-plain64,size=256,swap,discard

# Die System-Partition /root
#VGSysData-LVSysData_crypt UUID=2f33439e-fcf2-5303-b3db-9ad337a9daf6 none luks,keyscript=/sbin/keyscript.sh
VGSysData-LVSysData_crypt UUID=2f33439e-fcf2-5303-b3db-9ad337a9daf6 none luks,tries=3,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh

# Die System-Partition /srv
#VGWorkData-LVWorkData_crypt UUID=57bd7c07-47d5-4f64-af5c-bc2fa46c7bc9 VGSysData-LVSysData_crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived
VGWorkData-LVWorkData_crypt UUID=57bd7c07-47d5-4f64-af5c-bc2fa46c7bc9 none luks,tries=3,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh

# Die interne Festplatte
EncDriveInt UUID=7894caa0-c051-4116-bba5-6274543bd227 none luks,tries=3,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh

Mit der hier beschriebenen Installationsanleitung wird das Problem umgangen, in dem eine Volume Group verschlüsselt wird, auf der sich verschiedene Logical Volumes befinden (u. a. auch Swap und /srv).


Installation starten

Nach Start der Installation und Durchführung der ersten Schritte gelangt man zum Punkt Partitionierung der Festplatte(n). Voreingestellt ist die automatische Partitionierung. Hier wird die Manuelle Partitionierung ausgewählt.

Für die Installation wurde die Sprache Deutsch ausgewählt

Die Installation wird hier in deutscher Sprache durchgeführt.

Ubuntu Server installieren

Die Option Ubuntu Server installieren wird ausgewählt.

Deutrsche Sprache beibehalten
Deutschland auswählen

Der Vorschlag Deutschland wird angenommen.

Tastaturmodell-Erkennung nicht durchführen
Deutsche Tastatur einstellen

Anstattdessen wird die deutsche Tastetur eingestellt. Weiterhin wird:

  1. die Tastaturbelegung Deutsch ausgewählt.
  2. der Computername ausgewählt
  3. der Benutzername für den administrative Benutzer eingegeben
  4. das Passwort für diesen festgelegt

Danach folgt die Abfrage, ob die Home-Partition verschlüsselt werden soll.

Home-Partition nicht verschlüsseln

Die Home-Partition wird hier nicht verschlüsselt, denn es wird das System komplett verschlüsselt. Ausgeschlossen von Verschlüsselung wird die Boot-Partition.

Manuelle Partitionierung für Software-RAID1

Manuelle Partitionierung auswählen

Nach Auswahl Manuelle Partitionierung erhält man die Ansicht der installierten Datenträger, die bisher noch nicht partitioniert sind.

Partitionstabelle auf beiden Datenträgern anlegen

Es wird der erste Datenträger ausgewählt.

Partitionstabelle

Partitionstabelle anlegen

Mit Auswahl von Ja wird die Partitionstabelle auf dem ersten Datenträger angelegt.

Partitionstabelle auf dem ersten Datenträger angelegt

Dieser Schritt wird später mit dem zweiten Datenträger wiederholt. Nun wird der Freie Speicher des ersten Datenträgers ausgewählt, um eine Partition zu erstellen.

Partitionen

Neue Partition erstellen

Hiermit wird eine neue Partition erstellt. Diese Partition wird die Boot-Partition werden.

Boot-Partition

Größe der Boot-Partition festlegen

Die Größe 512MB ist groß genug, um verschiedene Vorversionen der Linux-Boot-Dateien aufzubewahren.

Primäre Partition anlegen

Es handelt sich um eine primäre Partition.

Partition an den Anfang der Festplatte legen

Hier kann frei entschieden werden, an welche Position der Festplatte die Partition abgelegt wird. In diesem Fall wurde der Anfang ausgewählt.

Dateisystem für neue Partition festlegen

In diesem Schritt wird das Dateisystem der neuen Partition festgelegt. Hier wird physical volume für RAID ausgewählt und das Bootflag gesetzt.

Boot-Partition auf erstem Datenträger angelegt, nun folgt der zweite Datenträger

Nach Fertigstellung der Boot-Partition auf dem ersten Datenträger folgt nun die Wiederholung der Schritte ab Partitionstabelle für den zweiten Datenträger.


LUKS-Partition

Boot-Partitionen auf beiden Datenträgern erstellt, nun LUKS-Partition erstellen

Nachdem die Boot-Partitionen auf beiden Datenträgern erstellt wurden, folgen nun die verschlüsselten LUKS-Partitionen.

Nach Auswahl des Freien Speichers (siehe Bild) wird eine neue Partition erstellt, die wiederum primär ist und an den Anfang der Festplatte (hinter die Boot-Partition) positioniert wird.

Größe der verschlüsselten Partition festlegen

Es folgt die Festlegung der Größe der verschlüsselten Partition. Wird hier nicht der verfügbare Rest des Datenträgers verwendet, sollte bedacht werden, dass auf dieser Partition die Swap-, Root- und die /srv-Partition geplant sind. Die Swap-Partition sollte der Größe des Arbeitsspeichers entsprechen. Dir Größe der Root-Partition wird mit mindestens 8GB festgelegt. Die /srv-Partition stellt den notwendigen Platz zur Verfügung, der für bereitgestellte Dienste benötigt wird.

Dateisystem für verschlüsselte Partition festlegen

Als Dateisystem wird wieder physikalischen Volume für RAID ausgewählt.

LUKS-Partition auf zweitem Datenträger erstellen

Nun werden die Schritte ab LUKS-Partition für den zweiten Datenträger wiederholt.

LUKS-Partitionen auf beiden Datenträgern erstellt

Die LUKS-Partitionen wurden nun auf beiden Datenträgern erstellt, so dass nun die RAID-Konfiguration folgt.

RAID-Konfiguration

RAID-Arrays erstellen

In diesem Schritt wird Software-RAID konfigurieren ausgewählt.

Partitionstabellen speichern

Die Abfrage nach Speicherung der Partitionstabellen wird mit Ja beantwortet.

Neues RAID-Array erstellen

Danach kann ein neues RAID-Gerät erstellt werden.

RAID1 auswählen

Um die beiden Datenträger in einen RAID-Verbund zu integrieren, wird [| RAID1] ausgewählt.

Anzahl aktiver Datenträger

Es wird der Vorschlag 2 beibehalten, denn es werden zwei Datenträger (Partitionen) für das RAID1-Array verwendet.

Anzahl der Reserve-Datenträger für RAID1 festlegen

Ein Reserve-Datenträger ist nicht vorgesehen, also wird die vorgeschlagene 0 unverändert übernommen.

Erstes RAID1-Gerät zusammenstellen

Hiermit wird das erste RAID1-Gerät erstellt. Es besteht aus den beiden Boot-Partitionen sda1 und sdb1.

Neues RAID-Array erstellen

Nun wird das zweite RAID1-Gerät erstellt, welches aus den LUKS-Partitionen besteht. Es folgt die Auswahl von RAID1, 2 aktive Geräte, 0 Reserve-Geräte.

Auswahl der verbleibenden Partitionen für zweites RAID1-Gerät

Die verbleibenden Datenträger sda2 und sdb2 werden hier ausgewählt und damit zum Verbund des zweiten RAID1-Gerätes zusammengefasst.

RAID-Konfiguration abschließen

Die RAID-Konfiguration wird nun mit Fertigstellen abgeschlossen.

Dateisystem auf RAID-Gerät für Boot-Partition festlegen

Dateisystem für erstes RAID-Gerät festlegen

Als nächster Schritt wird der erste Datenträger (Gerät 0 Nr. 1 im RAID1) ausgewählt, um das Dateisystem der Boot-Partition festzulegen.

Eigenschaften für Boot-Partition festlegen

Hier wird ext4 als Dateisystem festgelegt. Als Einbindungspunkt wird das Verzeichnis /boot ausgewählt.

Danach wird der zweite Datenträger (Gerät 1 Nr. 1 im RAID1) ausgewählt, um das Dateisystem der LUKS-Partition festzulegen.

Dateisystem auf RAID-Gerät für LUKS-Partition festlegen

Dateisystem des zweiten RAID-Gerätes festlegen

Hier wird physikalisches Volume für Verschlüsselung festgelegt. Der Schlüssel ist hier mit Passphrase eingestellt. Wird hier versehentlich zufälliger Schlüssel ausgewählt, so überleben die Daten den Neustart des Systems nicht.

Im nächsten Schritt wird das verschlüsselte Medium (LUKS-Partition) konfiguriert.

LUKS-Konfiguration

Verschlüsselten Datenträger konfigurieren

Hiermit wird der verschlüsselte Datenträger konfiguriert.

Speicherung mit Ja beantworten

Sollte die Bestätigung für die Speicherung der Partitions-Informationen auftreten, ist sie mit Ja zu beantworten.

Neues verschlüsseltes Volume anlegen

Es wird nun ein neues verschlüsseltes Volume angelegt.

Auswahl des Speichermediums für verschlüsselten Datenträger auswählen

Als Speichermedium für den verschlüsselten Datenträger stehen die beiden erzeugten RAID-Datenträger zur Verfügung. Es wird das zweite RAID1-Gerät (/dev/md1) für die LUKS-Partition ausgewählt.

LUKS-Konfiguratin abschließen

Danach kann die Konfiguration des verschlüsselten Datenträgers abgeschlossen werden.

Festlegen der Passphrase für verschlüsselten Datenträger

Im Anschluss daran wird die Passphrase für den verschlüsselten Datenträger eingegeben und wiederholt.

LVM-Konfiguration

LVM starten

Nun wird der Logical Volume Manager gestartet.

Speicherung wieder mit Ja bestätigen

Die Abfrage zur Speicherung der Partitions-Informationen wird wieder mit Ja beantwortet, so dass im nächsten Schritt eine neue Volume Group ersttellt werden kann.

Volume Group erstellen

Neue Volume Group erstellen

Es wird nun eine neue Volume Group erstellt...

Name für neue VG festlegen

...Und der Name festgelegt.

Medium für neue VG auswählen

Als Gerät für die Volume Group wird der verschlüsselte Datenträger ausgewählt. Er ist gekennzeichnet durch das Suffix _crypt.

Logical Volumes erstellen

Logical Volumes erstellen

Nun werden die Logical Volumes für die Linux-Partitionen Swap, Root (die Wurzel /, nicht das Verzeichnis /root) und /srv erstellt.

VG für LV auswählen

Die zugrunde liegende, eben angelegte Volume Group wird ausgewählt.

Name für LV Swap eingeben

Als erstes Logisches Volume wird Swap angelegt. Es handelt sich hierbei um den Datenträger, auf dem die Swap-Partition gespeichert wird.

Größe des LV Swap angeben

Die Größe des LV Swap sollte der Größe des Arbeitsspeichers entsprechen.

Logical Volumes erstellen

Es folgt die Erstellung eines weiteren Logischen Volumes. Als Volume Group wird wieder die vorhandene VG ausgewählt.

Name des zweiten LVs eingeben

Hier wird der Name des LV für die Root-Partition eingegeben.

Größe der Root-Partition eingeben

Die Größe wird hier mit mindestens 8GB festgelegt. Diese Kapazität von 8GB ist auf einem Server, der evtl. als Virtual Host betrieben wird, völlig ausreichend, wenn das Verzeichnisse /srv (und ggf. /var) auf eine andere Partition gemountet wird.

Neues LV anlegen

Nun wird nochmals ein neues Logisches Volume angelegt, um ein Speichermedium für die separierte /srv-Partition zu erstellen.

Name des LV eingeben

Der Name für das Logische Volume der /srv-Partition wird eingegeben.

Größe des LV festlegen

Da auf diesem Server keine weiteren LV geplant sind, wird der verfügbare Rest der gesamten Datenträger genutzt.

LVM-Konfiguration abschließen

Die LVM-Konfiguration wird nun abgeschlossen.

Bestätigung der Speicherung mit Ja

Um die letzten Aktionen zu speichern, wird die Frage mit Ja beantwortet. In den nächsten Schritten werden die Dateisysteme für die eben angelegten LVs bestimmt.

Dateisystem für LV Root bestimmen

Nun wird für das Logical Volume LvRoot das Dateisystem festgelegt. Dafür wird der Eintrag der Volume Group VgUbuntuSrv Logical Volume LvRoot ausgewählt.

Eigenschaften für LvRoot festlegen

Für das Logical Volume LvRoot wird als Dateisystem ext4 ausgewählt und der Einbindungspunkt / (Wurzel) festgelegt.

Dateisystem für LvSrvData festlegen

Um die Eigenschaften des Logical Volumes LvSrvData festzulegen, wird der entsprechende Eintrag ausgewählt.

Eigenschaften des LvSrvData festlegen

Als Dateisystem wird ebenfalls ext4 ausgewählt. Der Einbindungspunkt ist hier das Linux-Verzeichnis /srv.

Auswahl des letzten Logical Volumes LvSwap

Nun wird das letzte LV ausgewählt.

Dateisystem für LvSwap festlegen

Für das Logical Volume LvSwap wird das Dateisystem Auslagerungsspeicher (Swap) ausgewählt.

Partitionierung abschließen

Die Partitionierung kann nun abgeschlossen werden.

Installation fertigstellen

Eingabe Proxyserver

Ist im angeschlossenen Netzwerk bereits ein DNS-Server und Proxyserver verfügbar, kann der Name des Proxyservers eingegeben werden. Ansonsten entweder die IP-Adresse des Proxyservers oder es findet keine Eingabe statt.

Automatische Sicherheitsupdates durchführen

Zu empfehlen ist die Durchführung automatischer Sicherheits-Updates. Dadurch werden keine laufenden Dienste unterbrochen. Der Server erhält jedoch trotzdem wichtige Sicherheits-Updates.

Es findet die Auswahl der notwendigen Komponenten statt

Die Auswahl der zu installierenden Komponenten findet nun statt.

Installation durch Neustart abschließen

Mit dem Neustart wird die Installation abgeschlossen.

Systemstart

Systemstart - Eingabe der Passphrase

Nach dem Systemstart erfolgt nun die Eingabe der Passphrase.

Systemstart nach Eingabe der Passphrase

Das System startet nach Eingabe der Passphrase. Ziel ist aber, dass der Server bei Bedarf auch über VPN durchgestartet werden kann. Dazu ist es notwendig einen Schlüssel zur Verfügung zu stellen. Der entsprechende Schlüssel kann sich zweckmäßigerweise auf einem eingesteckten USB-Memory-Stick befinden.

KeyStorage auf USB-Memory-Stick erstellen

Prinzipiell kann nun nach folgender Dokumentation vorgegangen werden: https://wiki.ubuntuusers.de/System_verschl%C3%BCsseln/Entschl%C3%BCsseln_mit_einem_USB-Schl%C3%BCssel/

Jedoch wird hier darauf hingewiesen, dass das Mounten der zweiten verschlüsselten Partition fehlerhaft dokumentiert wurde. Der fehlerhafte Abschnitt entfällt in dieser Installation.

Die Schritte der Schlüsselerstellung werden hier zusammengefasst:

# die folgenden Befehle können nicht in einer Scriptdatei ausgeführt werden,
# sondern müssen nacheinander manuell abgearbeitet werden.

# es wurde ermittelt, dass der eingesteckte USB-Memory-Stick /dev/sdc ist.

fdisk -l /dev/sdc
 Disk /dev/sdc: 7,5 GiB, 8004304896 bytes, 15633408 sectors
 Units: sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disklabel type: dos
 Disk identifier: 0x00000000

 Device     Boot Start      End  Sectors  Size Id Type
 /dev/sdc1        2048 15633407 15631360  7,5G 83 Linux
# der Start der ersten Partition auf dem USB-Memory-Stick beginnt bei Sektor 2048,
# Also haben wir theoretisch Platz für eine Schlüsselgröße von max. 2046 Sektoren (2046 * 512 Bytes).

# Schlüssel auf USB-Memory-Stick schreiben und hinter den MBR positionieren
# (hier nur 60 Sektoren: 60 * 512 Bytes)
dd if=/dev/urandom of=/dev/sdc bs=512 seek=1 count=60

# Schlüssel für diesen Server/Stick extrahieren
dd if=/dev/sdc bs=512 count=4 skip=33 of=tempKeyFile.bin

# extrahierten Key zur LUKS-Partition in einen Keyslot einfügen
# (oben festgelegte Passphrase eingeben)
cryptsetup luksAddKey /dev/md1 tempKeyFile.bin

# Disk-ID für /dev/sdc ermitteln
ls -l /dev/disk/by-id
# ...
# ... usb-Generic_STORAGE_DEVICE_XXXXXXXXXXXX-X:0 -> ../../sdc
# ...

# Konfigurationsverzeichnis erstellen
mkdir /etc/decryptkeydevice
# Konfigurationsdatei erstellen
nano /etc/decryptkeydevice/decryptkeydevice.conf

# copy&paste: folgenden Inhalt einfügen:
 DECRYPTKEYDEVICE_SKIPBLOCKS="33"
 DECRYPTKEYDEVICE_READBLOCKS="4"
 DECRYPTKEYDEVICE_BLOCKSIZE="512"
 # mit ls -l ermittelte ID hier einfügen
 DECRYPTKEYDEVICE_DISKID="usb-Generic_STORAGE_DEVICE_XXXXXXXXXXXX-X:0"

# Berechtigung setzen
chmod 640 /etc/decryptkeydevice/decryptkeydevice.conf

# Script erstellen (copy&paste):
nano /etc/decryptkeydevice/decryptkeydevice_keyscript.sh

# Inhalt aus 
# https://wiki.ubuntuusers.de/System_verschl%C3%BCsseln/Entschl%C3%BCsseln_mit_einem_USB-Schl%C3%BCssel/
# unter Abschnitt  /etc/decryptkeydevice/decryptkeydevice_keyscript.sh einfügen.

# Ausführungs-Berechtigung setzen
chmod 750 /etc/decryptkeydevice/decryptkeydevice_keyscript.sh

# crypttab anpassen
nano /etc/crypttab
 #md1_crypt UUID=c51fef85-7f45-4726-abf2-a13256702531 none luks,discard
 md1_crypt UUID=c51fef85-7f45-4726-abf2-a13256702531 none luks,tries=3,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh

# Hook einfügen
nano /etc/initramfs-tools/hooks/decryptkeydevice.hook

# copy&paste: Inhalt einfügen
 #!/bin/sh
 # copy decryptkeydevice files to initramfs
 mkdir -p $DESTDIR/etc/
 cp -rp /etc/decryptkeydevice $DESTDIR/etc/

# Ausführungs-Berechtigung setzen
chmod 750 /etc/initramfs-tools/hooks/decryptkeydevice.hook

# aktuelle initramfs sichern
cp /boot/initrd.img-$(uname -r) /boot/initrd.img-$(uname -r).bak

# initramfs aktualisieren
update-initramfs -k $(uname -r) -c

# System neustarten
reboot

Das System startet nun mit eingestecktem USB-Memory-Stick, ohne dass die Passphrase abgefragt wird.