Ubuntu LTS Server 16.04 RAID1, LUKS, LVM
Inhaltsverzeichnis
- 1 Ziel dieser Installation
- 2 Installation Linux Ubuntu 16.04
- 2.1 Installation starten
- 2.2 Manuelle Partitionierung für Software-RAID1
- 2.3 Installation fertigstellen
- 3 Systemstart
- 4 KeyStorage auf USB-Memory-Stick erstellen
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.
Die Installation wird hier in deutscher Sprache durchgeführt.
Die Option Ubuntu Server installieren wird ausgewählt.
Der Vorschlag Deutschland wird angenommen.
Anstattdessen wird die deutsche Tastetur eingestellt. Weiterhin wird:
- die Tastaturbelegung Deutsch ausgewählt.
- der Computername ausgewählt
- der Benutzername für den administrative Benutzer eingegeben
- das Passwort für diesen festgelegt
Danach folgt die Abfrage, ob die Home-Partition verschlüsselt werden soll.
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
Nach Auswahl Manuelle Partitionierung erhält man die Ansicht der installierten Datenträger, die bisher noch nicht partitioniert sind.
Es wird der erste Datenträger ausgewählt.
Partitionstabelle
Mit Auswahl von Ja wird die 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
Hiermit wird eine neue Partition erstellt. Diese Partition wird die Boot-Partition werden.
Boot-Partition
Die Größe 512MB ist groß genug, um verschiedene Vorversionen der Linux-Boot-Dateien aufzubewahren.
Es handelt sich um eine primäre Partition.
Hier kann frei entschieden werden, an welche Position der Festplatte die Partition abgelegt wird. In diesem Fall wurde der Anfang ausgewählt.
In diesem Schritt wird das Dateisystem der neuen Partition festgelegt. Hier wird physical volume für RAID ausgewählt und das Bootflag gesetzt.
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
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.
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.
Als Dateisystem wird wieder physikalischen Volume für RAID ausgewählt.
Nun werden die Schritte ab LUKS-Partition für den zweiten Datenträger wiederholt.
Die LUKS-Partitionen wurden nun auf beiden Datenträgern erstellt, so dass nun die RAID-Konfiguration folgt.
RAID-Konfiguration
In diesem Schritt wird Software-RAID konfigurieren ausgewählt.
Die Abfrage nach Speicherung der Partitionstabellen wird mit Ja beantwortet.
Danach kann ein neues RAID-Gerät erstellt werden.
Um die beiden Datenträger in einen RAID-Verbund zu integrieren, wird [| RAID1] ausgewählt.
Es wird der Vorschlag 2 beibehalten, denn es werden zwei Datenträger (Partitionen) für das RAID1-Array verwendet.
Ein Reserve-Datenträger ist nicht vorgesehen, also wird die vorgeschlagene 0 unverändert übernommen.
Hiermit wird das erste RAID1-Gerät erstellt. Es besteht aus den beiden Boot-Partitionen sda1 und sdb1.
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.
Die verbleibenden Datenträger sda2 und sdb2 werden hier ausgewählt und damit zum Verbund des zweiten RAID1-Gerätes zusammengefasst.
Die RAID-Konfiguration wird nun mit Fertigstellen abgeschlossen.
Dateisystem auf RAID-Gerät für Boot-Partition 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.
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
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
Hiermit wird der verschlüsselte Datenträger konfiguriert.
Sollte die Bestätigung für die Speicherung der Partitions-Informationen auftreten, ist sie mit Ja zu beantworten.
Es wird nun ein neues verschlüsseltes Volume angelegt.
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.
Danach kann die Konfiguration des verschlüsselten Datenträgers abgeschlossen werden.
Im Anschluss daran wird die Passphrase für den verschlüsselten Datenträger eingegeben und wiederholt.
LVM-Konfiguration
Nun wird der Logical Volume Manager gestartet.
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
Es wird nun eine neue Volume Group erstellt...
...Und der Name festgelegt.
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
Nun werden die Logical Volumes für die Linux-Partitionen Swap, Root (die Wurzel /, nicht das Verzeichnis /root) und /srv erstellt.
Die zugrunde liegende, eben angelegte Volume Group wird ausgewählt.
Als erstes Logisches Volume wird Swap angelegt. Es handelt sich hierbei um den Datenträger, auf dem die Swap-Partition gespeichert wird.
Die Größe des LV Swap sollte der Größe des Arbeitsspeichers entsprechen.
Es folgt die Erstellung eines weiteren Logischen Volumes. Als Volume Group wird wieder die vorhandene VG ausgewählt.
Hier wird der Name des LV für die Root-Partition eingegeben.
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.
Nun wird nochmals ein neues Logisches Volume angelegt, um ein Speichermedium für die separierte /srv-Partition zu erstellen.
Der Name für das Logische Volume der /srv-Partition wird eingegeben.
Da auf diesem Server keine weiteren LV geplant sind, wird der verfügbare Rest der gesamten Datenträger genutzt.
Die LVM-Konfiguration wird nun abgeschlossen.
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.
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.
Für das Logical Volume LvRoot wird als Dateisystem ext4 ausgewählt und der Einbindungspunkt / (Wurzel) festgelegt.
Um die Eigenschaften des Logical Volumes LvSrvData festzulegen, wird der entsprechende Eintrag ausgewählt.
Als Dateisystem wird ebenfalls ext4 ausgewählt. Der Einbindungspunkt ist hier das Linux-Verzeichnis /srv.
Nun wird das letzte LV ausgewählt.
Für das Logical Volume LvSwap wird das Dateisystem Auslagerungsspeicher (Swap) ausgewählt.
Die Partitionierung kann nun abgeschlossen werden.
Installation fertigstellen
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.
Zu empfehlen ist die Durchführung automatischer Sicherheits-Updates. Dadurch werden keine laufenden Dienste unterbrochen. Der Server erhält jedoch trotzdem wichtige Sicherheits-Updates.
Die Auswahl der zu installierenden Komponenten findet nun statt.
Mit dem Neustart wird die Installation abgeschlossen.
Systemstart
Nach dem Systemstart erfolgt nun die 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.





































































