Aktionen

Ubuntu Server zweite Festplatte mit LUKS verschlüsseln und beim Boot automatisch einbinden sowie Festplatte im laufenden Betrieb vergrößern: Unterschied zwischen den Versionen

Aus znilwiki

K Änderung 15973 von BLinz (Diskussion) rückgängig gemacht.
Markierungen: Rückgängigmachung Zurückgesetzt
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{AchtungBaustelle}}
<!--{{AchtungBaustelle}}-->
<u>'''Changelog:'''</u>
<u>'''Changelog:'''</u>
* 18.05.2026 erste Version
* 18.05.2026 erste Version
Zeile 11: Zeile 11:
Als Clou habe ich - mit Unterstützung von Google Gemini - ein Skript für das Vergrößern der Festplatten auch mit LUKS-Verschlüsselung erstellt.<br>
Als Clou habe ich - mit Unterstützung von Google Gemini - ein Skript für das Vergrößern der Festplatten auch mit LUKS-Verschlüsselung erstellt.<br>
<br>
<br>
Wenn Ihr euch das anseht, seht Ihr das die zweite Festplatte beim Booten dadurch entsperrt wird, das eine Schlüsseldatei im Dateisystem der ersten Festplatte genutzt wird.<br>
Ist das denn sicher? Naja, die Datei liegt im verschlüsselten Dateisystem der ersten Festplatte welches Ihr zuerst entsperren müsst. Ist also so sicher wie die erste Festplatte.<br>
<br>
In dieser ersten Version nutze ich beim Bootlaufwerk LVM, auch wenn ich das sonst nicht tue. Grund ist das ich keinen - noch - einfachen Weg gefunden habe, die Verschlüsselung ohne LVM einzurichten.<br>
So geht es direkt im Setup-Dialog.<br>
Bei der zweiten Festplatte wird auch LVM genutzt - da müsste es ggf. auch ohne gehen wie mir beim erstellen des Artikels aufgefallen ist. Ein Lösung ohne LVM schiebe ich vielleicht noch nach.<br>
----
----
=Hardwarekonfiguration=
=Hardwarekonfiguration=
Für diesen Beitrag nutze ich eine Proxmox-VM mit 2 Festplatten:<br>
Für diesen Beitrag nutze ich eine Proxmox-VM mit 2 Festplatten:<br>
:[[Datei:ClipCapIt-260518-105526.PNG]]<br>
:[[Datei:ClipCapIt-260518-095403.PNG]]<br>
{{code|Hard Disk (scsi0)}} mit '''32GB''' ist dabei die Betriebssystem Festplatte und liegt auf einer NVMe,<br>
{{code|Hard Disk (scsi0)}} mit '''32GB''' ist dabei die Betriebssystem Festplatte und liegt auf einer NVMe,<br>
{{code|Hard Disk (scsi1)}} mit '''512GB''' ist das Datengrab und liegt auf einem RAID5 aus drehenden Festplatten<br>
{{code|Hard Disk (scsi1)}} mit '''512GB''' ist das Datengrab und liegt auf einem RAID5 aus drehenden Festplatten<br>
<br>
'''Wichtig:''' Ich habe in den {{code|System}} Einstellungen der VM diese als {{code|UEFI}} System erstellt:<br>
:[[Datei:ClipCapIt-260518-105201.PNG]]<br>
Dann habt Ihr später bei der Passworteingabe für die verschlüsselte Festplatte dann auch eine deutsche Tastaturbelegung!<br>
Ohne '''UEFI''' müsst ihr beachten, das beim Booten noch die englische Tastaturbelegung aktiv ist!<br>
<br>
<br>
----
----
Zeile 32: Zeile 34:
Diese Verwende ich auch immer in meinen anderen Artikeln.<br>
Diese Verwende ich auch immer in meinen anderen Artikeln.<br>
<br>
<br>
Wichtig bei der Sprachauswahl ist die richtige Tastatur - wenn beim Booten das Passwort für die Verschlüsselung abgefragt wird, ist das gewählte Tastaturlayout aktiv - wichtig für Sonderzeichen und Umlaute im Verschlüsselungspasswort! Das ganze Funktioniert nur wenn es eine UEFI-VM / UEFI System ist.<br>
Wichtig bei der Sprachauswahl ist die richtige Tastatur - wenn beim Booten das Passwort für die Verschlüsselung abgefragt wird, ist das gewählte Tastaturlayout aktiv - wichtig für Sonderzeichen und Umlaute im Verschlüsselungspasswort!<br>
Wenn der Dialog {{code|Begleitete Speicherplatzkonfiguration}} erscheint beachtet folgendes:<br>
Wenn der Dialog {{code|Begleitete Speicherplatzkonfiguration}} erscheint beachtet folgendes:<br>
:[[Datei:ClipCapIt-260518-100642.PNG]]<br>
:[[Datei:ClipCapIt-260518-100642.PNG]]<br>
Zeile 38: Zeile 40:
* Setzt den Haken bei {{code|Die LVM-Gruppe mit LUKS verschlüsseln}}
* Setzt den Haken bei {{code|Die LVM-Gruppe mit LUKS verschlüsseln}}
* Vergebt ein Passwort / eine Passphrase die Ihr dann zukünftig zum entsperren des System beim Booten eingeben müsst
* Vergebt ein Passwort / eine Passphrase die Ihr dann zukünftig zum entsperren des System beim Booten eingeben müsst
{{Hinweis|Achtet beim Passwort auf die Sonderzeichen! Ein '''&''' machte bei mir Probleme in der VM-Konsole. Eigentlich ist die Belegung an dieser Stelle ja Deutsch, bei mir gab es im ersten Anlauf keine Probleme, in den Versuchen danach aber dann doch. Ich habe dann erst ein anderes Kennwort genommen und das gewünschte später als 2. dazu genommen}}
Im der Zusammenfassung sieht das dann so bei mir aus:<br>
Im der Zusammenfassung sieht das dann so bei mir aus:<br>
:[[Datei:ClipCapIt-260518-100642.PNG]]<br>
:[[Datei:ClipCapIt-260518-100642.PNG]]<br>
Zeile 47: Zeile 50:
:[[Datei:ClipCapIt-260518-102100.PNG]]<br>
:[[Datei:ClipCapIt-260518-102100.PNG]]<br>
Wählt Edit:<br>
Wählt Edit:<br>
:[[Datei:ClipCapIt-260518-102100.PNG]]<br>
:[[Datei:ClipCapIt-260519-163257.PNG]]<br>
Und setzt in diesem Dialog den Wert auf das Maximum:<br>
Und setzt in diesem Dialog den Wert auf das Maximum:<br>
:[[Datei:ClipCapIt-260518-102300.PNG]]<br>
:[[Datei:ClipCapIt-260518-102300.PNG]]<br>
Zeile 57: Zeile 60:
Am Ende des Setups erfolgt der erste Reboot - und Ihr müsst zum ersten mal das Passwort zum entsperren eingeben:<br>
Am Ende des Setups erfolgt der erste Reboot - und Ihr müsst zum ersten mal das Passwort zum entsperren eingeben:<br>
:[[Datei:ClipCapIt-260518-103407.PNG]]<br>
:[[Datei:ClipCapIt-260518-103407.PNG]]<br>
<br>
----


 
=Kontrolle nach dem Neustart=
 
Nach dem Reboot habe ich mich angemeldet und bin zum {{code|root}} gewechselt.<br>
 
Meine Mappings sehen nun so aus:<br>
 
df -h
 
Ausgabe:<br>
 
Dateisystem                      Größe Benutzt Verf. Verw% Eingehängt auf
 
tmpfs                              329M  1008K  328M    1% /run
none                              1,0M      0  1,0M    0% /run/credentials/systemd-cryptsetup@dm_crypt\x2d0.service
<span style="background:lightgreen">/dev/mapper/ubuntu--vg-ubuntu--lv  30G    5,2G  23G  19% /</span>
tmpfs                              822M      0  822M    0% /dev/shm
none                              1,0M      0  1,0M    0% /run/credentials/systemd-journald.service
tmpfs                              822M      0  822M    0% /tmp
none                              1,0M      0  1,0M    0% /run/credentials/systemd-resolved.service
/dev/sda2                          2,0G    186M  1,7G  11% /boot
none                              1,0M      0  1,0M    0% /run/credentials/systemd-networkd.service
none                              1,0M      0  1,0M    0% /run/credentials/getty@tty1.service
tmpfs                              165M    8,0K  165M    1% /run/user/1000
Im LVM gibt es nur die eine Volume Group mit der 32G Festplatte:<br>
vgs
Ausgabe:<br>
  VG        #PV #LV #SN Attr  VSize  VFree
  ubuntu-vg  1  1  0 wz--n- 29,98g    0
Die zweite. noch leere Festplatte ist die {{code|/dev/sdb}}:<br>
fdisk -l
Ausgabe:<br>
'''Festplatte /dev/sda: 32 GiB, 34359738368 Bytes, 67108864 Sektoren'''
Festplattenmodell: QEMU HARDDISK
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: 357E98E9-94AA-4982-8244-AB5A910BC31A
'''Gerät      Anfang    Ende Sektoren Größe Typ'''
/dev/sda1    2048    4095    2048    1M BIOS boot
/dev/sda2    4096  4198399  4194304    2G Linux-Dateisystem
/dev/sda3  4198400 67106815 62908416  30G Linux-Dateisystem
<span style="background:lightgreen">'''Festplatte /dev/sdb: 512 GiB, 549755813888 Bytes, 1073741824 Sektoren'''</span>
<span style="background:lightgreen">Festplattenmodell: QEMU HARDDISK</span>
<span style="background:lightgreen">Einheiten: Sektoren von 1 * 512 = 512 Bytes</span>
<span style="background:lightgreen">Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes</span>
<span style="background:lightgreen">E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes</span>
'''Festplatte /dev/mapper/dm_crypt-0: 29,98 GiB, 32192331776 Bytes, 62875648 Sektoren'''
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
'''Festplatte /dev/mapper/ubuntu--vg-ubuntu--lv: 29,98 GiB, 32191283200 Bytes, 62873600 Sektoren'''
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Diese 512G Festplatte möchte ich nun als verschlüsseltes Laufwerk nach {{code|/opt}} mounten.<br>
<br>
----
=Zweite Festplatte verschlüsseln und einbinden=
{{Hinweis|Ich verschlüssle hier direkt das ganze Laufwerk, nicht nur die Partition. Zudem richte ich eine separate LVM Gruppe ein . so kann man diese später auch leichter entfernen oder ersetzen}}
Als {{code|root}}:<br>
cryptsetup luksFormat /dev/sdb
Bestätigen und eine Passphrase festlegen:<br>
WARNUNG!
========
Hiermit werden die Daten auf »/dev/sdb« unwiderruflich überschrieben.
Sind Sie sicher? (Tippen Sie 'yes' in Großbuchstaben): YES
Geben Sie die Passphrase für »/dev/sdb« ein:
Passphrase bestätigen:
Jetzt die verschlüsselte Partition öffnen:<br>
cryptsetup luksOpen /dev/sdb luks_sdb
Ausgabe:<br>
Geben Sie die Passphrase für »/dev/sdb« ein:
Das entschlüsselte Laufwerk steht nun als<br>
/dev/mapper/luks_sdb
zur Verfügung. Die Bezeichnung {{code|luks_sdb}} ist frei wählbar.<br>
<br>
Jetzt können wir {{luks_sdb}} nutzen um es mit LVM zu konfigurieren:<br>
pvcreate /dev/mapper/luks_sdb
vgcreate '''vg_luks_sdb''' /dev/mapper/luks_sdb
lvcreate -n '''lv_opt''' -l100%VG '''vg_luks_sdb'''
mkfs.ext4 /dev/vg_luks_sdb/lv_opt
Der Name der Volume Group {{code|vg_luks_sdb}} und des Logical Volume {{code|lv_opt}} sind wiederum frei wählbar, aber die Pfade/Parameter müsst Ihr dann an eure Bezeichnungen anpassen.<br>
Wir könnten jetzt {{code|lv_opt}} bereits an das leere Verzeichnis {{code|/opt}} mounten, aber wir wollen ja das dies beim booten automatisch geschieht.<br>
<br>
----
=Automatischen Mount beim Start einrichten=
Im Moment wird {{code|/dev/sdb}} nur per Passwort entsperrt.<br>
Wir richten jetzt zusätzlich ein das man das Laufwerk per Schlüssel aus einer Datei entsperren kann.<br>
Zuerst ein Verzeichnis in welchen wir den Schlüssel ablegen. Diese muss auf der bestehenden verschlüsselten Festplatte liegen:<br>
mkdir /etc/luks
Jetzt die Schlüsseldatei. Die enthält nichts weiter als einen String. Der nachfolgende Befehl erzeugt eine 4 Kilobyte große zufällige Datei {{code|luks_sdb.key}},<br>
dd if=/dev/urandom of=/etc/luks/luks_sdb.key bs=512 count=8
Die Datei schützen gegen Zugriff:<br>
chmod 0400 /etc/luks/luks_sdb
Und jetzt die Datei als Entschlüsselungsmethode dem verschlüsselten Laufwerk {{code|/dev/sdb}} hinzufügen:<br>
cryptsetup -v luksAddKey /dev/sdb /etc/luks/luks_sdb.key
Beispielausgabe:<br>
Geben Sie irgendeine bestehende Passphrase ein:
Schlüsselfach 0 entsperrt.
Schlüsselfach 2 erstellt.
Befehl erfolgreich.
0 war das Passwort, nach 2 wurde der Key gespeichert. Unter 1 habe ich eine 2. Passphrase gespeichert.<br>
<br>
----
==Dienst für das Entsperren erstellen==
Jetzt richten wir einen Dienst ein der beim Booten das Laufwerk {{code|/dev/sdb}} mit diesem Key entsperrt:<br>
  nano /etc/systemd/system/decrypt-luks_sdb.service
  nano /etc/systemd/system/decrypt-luks_sdb.service
Inhalt:<br>
<source lang="bash">
<source lang="bash">
[Unit]
[Unit]
Zeile 80: Zeile 188:
Type=oneshot
Type=oneshot
RemainAfterExit=yes
RemainAfterExit=yes
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/sdb luks_sdb --key-file /etc/luks/luks_sdb
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/sdb luks_sdb --key-file /etc/luks/luks_sdb.key
ExecStartPost=/usr/sbin/vgscan ; /usr/sbin/vgchange -ay
ExecStartPost=/usr/sbin/vgscan ; /usr/sbin/vgchange -ay
ExecStop=/usr/sbin/vgchange -a n luks_sdb ; /usr/sbin/cryptsetup luksClose luks_sdb
ExecStop=/usr/sbin/vgchange -a n vg_luks_sdb ; /usr/sbin/cryptsetup luksClose luks_sdb
TimeoutSec=90s
TimeoutSec=90s
</source>
</source>
 
Der Dienst wartet auf die Verfügbarkeit des Gerätes {{code|dev-sdb.devive}}, das wird automatisch vom System zur Verfügung gestellt.<br>
Unter {{code|ExecStart}} wird die Festplatte dann entschlüsselt mit dem erzeugten Key.<br>
{{code|ExecStartPost}} veranlasst den LVM neu nachzusehen ob es da neue Laufwerke gibt und bindet diese ein,<br>
{{code|ExecStop}} hängt das Volume beim herunterfahren wieder aus und beendet den Zugriff
<br>
Den Dienst starten wir jetzt aber nicht und setzen diesen auch nicht auf einen automatischen Start.<br>
Wir richten einen zweiten Dienst ein der dann das Logical Volume mappt, dieser wird den Dienst für die Entschlüsselung dann aufrufen.<br>
<br>
<br>
----
==Dienst für das Mapping / Mounten erstellen==
Für den zweiten Dienst ist es wichtig, wohin wir mounten wollen.<br>
Ich möchte die Festplatte unter
/opt
einhängen. Der Mountpoint muss sich zwingend im Namen des Dienstes widerspiegeln, in diesem Fall muss die Datei<br>
/etc/systemd/system/opt.mount
heißen. Wäre der Mountpoint {{code|/mnt/meineDisk}} so müsste die Datei {{code|/etc/systemd/system/mnt-meineDisk.mount}} heißen!<br>
Wir erstellen also die Datei:<br>
  nano /etc/systemd/system/opt.mount
  nano /etc/systemd/system/opt.mount
mit folgendem Inhalt:<br>
<source lang="bash">
<source lang="bash">
# this systemd unit will mount the LVM logical volume
# this systemd unit will mount the LVM logical volume
# /dev/luks_sdb/opt at /opt
# //dev/vg_luks_sdb/lv_opt at /opt
[Unit]
[Unit]
Description=Mount luks_sdb
Description=Mount lv_luks_sdb
DefaultDependencies=no
DefaultDependencies=no
ConditionPathExists=/opt
ConditionPathExists=/opt
Zeile 98: Zeile 222:
After=decrypt-luks_sdb.service
After=decrypt-luks_sdb.service
[Mount]
[Mount]
What=/dev/luks_sdb/opt
What=/dev/vg_luks_sdb/lv_opt
Where=/opt
Where=/opt
[Install]
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
</source>
</source>
----
==Testen!==
Wir lassen '''systemctl''' die Dienste neu einlesen:<br>
systemctl daemon-reload
und beenden das Logical Volume und entladen das verschlüsselte Laufwerk:<br>
/usr/sbin/vgchange -a n vg_luks_sdb
/usr/sbin/cryptsetup luksClose luks_sdb
Jetzt starten wir zum Test den Dienst für das Mounten:<br>
systemctl start opt.mount
Wenn alles klappt, dauert es ein paar Sekunden und der Prompt kehrt zurück.<br>
Bei<br>
df -h
sieht es nun so bei mir aus:<br>
Dateisystem                      Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs                              329M    1,1M  328M    1% /run
none                              1,0M      0  1,0M    0% /run/credentials/systemd-cryptsetup@dm_crypt\x2d0.service
/dev/mapper/ubuntu--vg-ubuntu--lv  30G    5,2G  23G  19% /
tmpfs                              822M      0  822M    0% /dev/shm
none                              1,0M      0  1,0M    0% /run/credentials/systemd-journald.service
tmpfs                              822M      0  822M    0% /tmp
none                              1,0M      0  1,0M    0% /run/credentials/systemd-resolved.service
/dev/sda2                          2,0G    186M  1,7G  11% /boot
none                              1,0M      0  1,0M    0% /run/credentials/systemd-networkd.service
none                              1,0M      0  1,0M    0% /run/credentials/getty@tty1.service
tmpfs                              165M    8,0K  165M    1% /run/user/1000
'''<span style="background:lightgreen">/dev/mapper/vg_luks_sdb-lv_opt    503G    2,1M  478G    1% /opt</span>'''
Jetzt können wir den Dienst aktivieren:<br>
systemctl enable opt.mount
und das System einmal neu starten und kontrollieren ob es auch noch einem Reboot vorhanden ist.<br>
Das sollte so sein, ich habe eine Weile gebraucht bis ich das hinbekommen hatte - die Lösung war das der Dienst zum entperren auf das Device wartet.<br>
----
=Weitere Passphrasen für das Entsperren angeben=
Wer will kann weitere Passphrasen für das Bootlaufwerk angeben, diese funktionieren dann alle gleichberechtigt.<br>
Kann auch als Trick genutzt werden wenn es Probleme mit der Tastaturbelegung gibt.<br>
Als {{code|root}}<br>
cryptsetup luksAddKey /dev/sda3
Dann fragt er ein bestehendes und dann 2 mal das neue Kennwort ab:<br>
Geben Sie irgendeine bestehende Passphrase ein:
Geben Sie die neue Passphrase für das Schlüsselfach ein:
Passphrase bestätigen:
Und in Zukunft kann auch dieses Kennwort genutzt werden.<br>
<br>
----
=Verschlüsselte Festplatten Festplatten nachträglich vergrößern=
Dazu nutze ich ein Skript das ihr hier findet:<br>
* [[Linux VM Festplatte im laufenden Betrieb vergrößern Universalskript mit und ohne LVM oder LUKS]]
Einfach die Festplatte im Hypervisor vergrößern, egal ob die Boot-Festplatte oder weitere Laufwerke und dann das Skript einmal laufen lassen<br>
<br>
----


=Quellen=
=Quellen=
* https://medium.com/@chandana_33332/howto-setup-a-luks-encrypted-drive-with-lvm-on-linux-f33465383bb8
* https://medium.com/@chandana_33332/howto-setup-a-luks-encrypted-drive-with-lvm-on-linux-f33465383bb8
* https://gemini.google.com/
* https://gemini.google.com/
----
=Kommentare=
<comments />

Aktuelle Version vom 19. Mai 2026, 16:33 Uhr

Changelog:

  • 18.05.2026 erste Version

Vorwort

Ich nutze virtuelle Cloud-Server auch für Backups und war am überlegen ob ich deren Dateisystem verschlüsseln soll.
Dabei habe ich ausprobiert, sowohl die Boot-Festplatte als auch eine zusätzlichen Datenfestplatte zu verschlüsseln.
Beim Start des Systems soll aber nur einmal das Passwort abgefragt werden und danach automatisch alle Festplatten entschlüsselt und in das Dateisystem eingehängt werden.
Da habe ich einen Moment für gebraucht, deshalb habe ich mir wie immer eine Schritt-für-Schritt-Anleitung geschrieben damit ich das später auch noch mal hinbekomme.

Als Clou habe ich - mit Unterstützung von Google Gemini - ein Skript für das Vergrößern der Festplatten auch mit LUKS-Verschlüsselung erstellt.

Wenn Ihr euch das anseht, seht Ihr das die zweite Festplatte beim Booten dadurch entsperrt wird, das eine Schlüsseldatei im Dateisystem der ersten Festplatte genutzt wird.
Ist das denn sicher? Naja, die Datei liegt im verschlüsselten Dateisystem der ersten Festplatte welches Ihr zuerst entsperren müsst. Ist also so sicher wie die erste Festplatte.

In dieser ersten Version nutze ich beim Bootlaufwerk LVM, auch wenn ich das sonst nicht tue. Grund ist das ich keinen - noch - einfachen Weg gefunden habe, die Verschlüsselung ohne LVM einzurichten.
So geht es direkt im Setup-Dialog.
Bei der zweiten Festplatte wird auch LVM genutzt - da müsste es ggf. auch ohne gehen wie mir beim erstellen des Artikels aufgefallen ist. Ein Lösung ohne LVM schiebe ich vielleicht noch nach.


Hardwarekonfiguration

Für diesen Beitrag nutze ich eine Proxmox-VM mit 2 Festplatten:


Hard Disk (scsi0) mit 32GB ist dabei die Betriebssystem Festplatte und liegt auf einer NVMe,
Hard Disk (scsi1) mit 512GB ist das Datengrab und liegt auf einem RAID5 aus drehenden Festplatten


Installation Grundsystem mit Verschlüsselung

Ich installiere hier Ubuntu Server 26.04 LTS, sollte mit anderen Versionen und Systemen wie Debian ähnlich sein.
Dabei wähle ich die Festplattenverschlüsselung direkt im Setup aus.
Das Setup an sich überspringe ich bis zu dem Teil mit der Festplattenauswahl.
Wer genauere Installationsanweisung haben möchte, den Verweise ich auf meine Universalanleitung dazu: Installation Ubuntu 2604 oder Installation Ubuntu 2404
Diese Verwende ich auch immer in meinen anderen Artikeln.

Wichtig bei der Sprachauswahl ist die richtige Tastatur - wenn beim Booten das Passwort für die Verschlüsselung abgefragt wird, ist das gewählte Tastaturlayout aktiv - wichtig für Sonderzeichen und Umlaute im Verschlüsselungspasswort!
Wenn der Dialog Begleitete Speicherplatzkonfiguration erscheint beachtet folgendes:


  • Achtet darauf das die richtige Festplatte ausgewählt ist! Bei mir war die 512G Festplatte vorausgewählt und ich musste händisch zu 32G wechseln
  • Setzt den Haken bei Die LVM-Gruppe mit LUKS verschlüsseln
  • Vergebt ein Passwort / eine Passphrase die Ihr dann zukünftig zum entsperren des System beim Booten eingeben müsst
Hinweis:Achtet beim Passwort auf die Sonderzeichen! Ein & machte bei mir Probleme in der VM-Konsole. Eigentlich ist die Belegung an dieser Stelle ja Deutsch, bei mir gab es im ersten Anlauf keine Probleme, in den Versuchen danach aber dann doch. Ich habe dann erst ein anderes Kennwort genommen und das gewünschte später als 2. dazu genommen

Im der Zusammenfassung sieht das dann so bei mir aus:


Die 512G sind noch unbenutzt, auf den 32G richtet er das LVM-Volume ubuntu-vg mit der Datenpartition ubuntu-lv ein welche er nach / mounted.
Wer sich wundert das da von den 29.980G nur 14.988G im Dateisystem landet:
Ubuntu nimmt - bei der Verwendung von LVM - ab Werk nur den halben verfügbaren Speicher, ganz oben steht unterhalb von ubuntu-vg die Zeile mit

freier Speicherplatz                     14.992G

Um diesen auch zu nutzen, bewegt den Fokus mit den Pfeiltasten auf die Zeile mit ubuntu-lv und rückt Enter:


Wählt Edit:


Und setzt in diesem Dialog den Wert auf das Maximum:


Jetzt sieht die Zusammenfassung so aus:


Der einzige freie Speicherplatz ist nun die 2. Festplatte.
Der Rest des Setups wie gewohnt / gehabt.

Am Ende des Setups erfolgt der erste Reboot - und Ihr müsst zum ersten mal das Passwort zum entsperren eingeben:




Kontrolle nach dem Neustart

Nach dem Reboot habe ich mich angemeldet und bin zum root gewechselt.
Meine Mappings sehen nun so aus:

df -h

Ausgabe:

Dateisystem                       Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs                              329M   1008K  328M    1% /run
none                               1,0M       0  1,0M    0% /run/credentials/systemd-cryptsetup@dm_crypt\x2d0.service
/dev/mapper/ubuntu--vg-ubuntu--lv   30G    5,2G   23G   19% /
tmpfs                              822M       0  822M    0% /dev/shm
none                               1,0M       0  1,0M    0% /run/credentials/systemd-journald.service
tmpfs                              822M       0  822M    0% /tmp
none                               1,0M       0  1,0M    0% /run/credentials/systemd-resolved.service
/dev/sda2                          2,0G    186M  1,7G   11% /boot
none                               1,0M       0  1,0M    0% /run/credentials/systemd-networkd.service
none                               1,0M       0  1,0M    0% /run/credentials/getty@tty1.service
tmpfs                              165M    8,0K  165M    1% /run/user/1000

Im LVM gibt es nur die eine Volume Group mit der 32G Festplatte:

vgs

Ausgabe:

  VG        #PV #LV #SN Attr   VSize  VFree
  ubuntu-vg   1   1   0 wz--n- 29,98g    0

Die zweite. noch leere Festplatte ist die /dev/sdb:

fdisk -l

Ausgabe:

Festplatte /dev/sda: 32 GiB, 34359738368 Bytes, 67108864 Sektoren
Festplattenmodell: QEMU HARDDISK
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: 357E98E9-94AA-4982-8244-AB5A910BC31A

Gerät       Anfang     Ende Sektoren Größe Typ
/dev/sda1     2048     4095     2048    1M BIOS boot
/dev/sda2     4096  4198399  4194304    2G Linux-Dateisystem
/dev/sda3  4198400 67106815 62908416   30G Linux-Dateisystem


Festplatte /dev/sdb: 512 GiB, 549755813888 Bytes, 1073741824 Sektoren
Festplattenmodell: QEMU HARDDISK
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes


Festplatte /dev/mapper/dm_crypt-0: 29,98 GiB, 32192331776 Bytes, 62875648 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes


Festplatte /dev/mapper/ubuntu--vg-ubuntu--lv: 29,98 GiB, 32191283200 Bytes, 62873600 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Diese 512G Festplatte möchte ich nun als verschlüsseltes Laufwerk nach /opt mounten.


Zweite Festplatte verschlüsseln und einbinden

Hinweis:Ich verschlüssle hier direkt das ganze Laufwerk, nicht nur die Partition. Zudem richte ich eine separate LVM Gruppe ein . so kann man diese später auch leichter entfernen oder ersetzen

Als root:

cryptsetup luksFormat /dev/sdb

Bestätigen und eine Passphrase festlegen:

WARNUNG!
========
Hiermit werden die Daten auf »/dev/sdb« unwiderruflich überschrieben.

Sind Sie sicher? (Tippen Sie 'yes' in Großbuchstaben): YES
Geben Sie die Passphrase für »/dev/sdb« ein:
Passphrase bestätigen:

Jetzt die verschlüsselte Partition öffnen:

cryptsetup luksOpen /dev/sdb luks_sdb

Ausgabe:

Geben Sie die Passphrase für »/dev/sdb« ein:

Das entschlüsselte Laufwerk steht nun als

/dev/mapper/luks_sdb

zur Verfügung. Die Bezeichnung luks_sdb ist frei wählbar.

Jetzt können wir Vorlage:Luks sdb nutzen um es mit LVM zu konfigurieren:

pvcreate /dev/mapper/luks_sdb
vgcreate vg_luks_sdb /dev/mapper/luks_sdb
lvcreate -n lv_opt -l100%VG vg_luks_sdb
mkfs.ext4 /dev/vg_luks_sdb/lv_opt

Der Name der Volume Group vg_luks_sdb und des Logical Volume lv_opt sind wiederum frei wählbar, aber die Pfade/Parameter müsst Ihr dann an eure Bezeichnungen anpassen.
Wir könnten jetzt lv_opt bereits an das leere Verzeichnis /opt mounten, aber wir wollen ja das dies beim booten automatisch geschieht.


Automatischen Mount beim Start einrichten

Im Moment wird /dev/sdb nur per Passwort entsperrt.
Wir richten jetzt zusätzlich ein das man das Laufwerk per Schlüssel aus einer Datei entsperren kann.
Zuerst ein Verzeichnis in welchen wir den Schlüssel ablegen. Diese muss auf der bestehenden verschlüsselten Festplatte liegen:

mkdir /etc/luks

Jetzt die Schlüsseldatei. Die enthält nichts weiter als einen String. Der nachfolgende Befehl erzeugt eine 4 Kilobyte große zufällige Datei luks_sdb.key,

dd if=/dev/urandom of=/etc/luks/luks_sdb.key bs=512 count=8

Die Datei schützen gegen Zugriff:

chmod 0400 /etc/luks/luks_sdb

Und jetzt die Datei als Entschlüsselungsmethode dem verschlüsselten Laufwerk /dev/sdb hinzufügen:

cryptsetup -v luksAddKey /dev/sdb /etc/luks/luks_sdb.key

Beispielausgabe:

Geben Sie irgendeine bestehende Passphrase ein:
Schlüsselfach 0 entsperrt.
Schlüsselfach 2 erstellt.
Befehl erfolgreich.

0 war das Passwort, nach 2 wurde der Key gespeichert. Unter 1 habe ich eine 2. Passphrase gespeichert.


Dienst für das Entsperren erstellen

Jetzt richten wir einen Dienst ein der beim Booten das Laufwerk /dev/sdb mit diesem Key entsperrt:

nano /etc/systemd/system/decrypt-luks_sdb.service

Inhalt:

[Unit]
Description=Decrypt and open /dev/sdb
Documentation=man:cryptsetup
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target
Before=shutdown.target
BindsTo=dev-sdb.device
After=dev-sdb.device
#Before=var-lib-docker.mount
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/sdb luks_sdb --key-file /etc/luks/luks_sdb.key
ExecStartPost=/usr/sbin/vgscan ; /usr/sbin/vgchange -ay
ExecStop=/usr/sbin/vgchange -a n vg_luks_sdb ; /usr/sbin/cryptsetup luksClose luks_sdb
TimeoutSec=90s

Der Dienst wartet auf die Verfügbarkeit des Gerätes dev-sdb.devive, das wird automatisch vom System zur Verfügung gestellt.
Unter ExecStart wird die Festplatte dann entschlüsselt mit dem erzeugten Key.
ExecStartPost veranlasst den LVM neu nachzusehen ob es da neue Laufwerke gibt und bindet diese ein,
ExecStop hängt das Volume beim herunterfahren wieder aus und beendet den Zugriff
Den Dienst starten wir jetzt aber nicht und setzen diesen auch nicht auf einen automatischen Start.
Wir richten einen zweiten Dienst ein der dann das Logical Volume mappt, dieser wird den Dienst für die Entschlüsselung dann aufrufen.


Dienst für das Mapping / Mounten erstellen

Für den zweiten Dienst ist es wichtig, wohin wir mounten wollen.
Ich möchte die Festplatte unter

/opt

einhängen. Der Mountpoint muss sich zwingend im Namen des Dienstes widerspiegeln, in diesem Fall muss die Datei

/etc/systemd/system/opt.mount

heißen. Wäre der Mountpoint /mnt/meineDisk so müsste die Datei /etc/systemd/system/mnt-meineDisk.mount heißen!
Wir erstellen also die Datei:

nano /etc/systemd/system/opt.mount

mit folgendem Inhalt:

# this systemd unit will mount the LVM logical volume
# //dev/vg_luks_sdb/lv_opt at /opt
[Unit]
Description=Mount lv_luks_sdb
DefaultDependencies=no
ConditionPathExists=/opt
Requires=decrypt-luks_sdb.service
After=decrypt-luks_sdb.service
[Mount]
What=/dev/vg_luks_sdb/lv_opt
Where=/opt
[Install]
WantedBy=multi-user.target

Testen!

Wir lassen systemctl die Dienste neu einlesen:

systemctl daemon-reload

und beenden das Logical Volume und entladen das verschlüsselte Laufwerk:

/usr/sbin/vgchange -a n vg_luks_sdb
/usr/sbin/cryptsetup luksClose luks_sdb

Jetzt starten wir zum Test den Dienst für das Mounten:

systemctl start opt.mount

Wenn alles klappt, dauert es ein paar Sekunden und der Prompt kehrt zurück.
Bei

df -h

sieht es nun so bei mir aus:

Dateisystem                       Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs                              329M    1,1M  328M    1% /run
none                               1,0M       0  1,0M    0% /run/credentials/systemd-cryptsetup@dm_crypt\x2d0.service
/dev/mapper/ubuntu--vg-ubuntu--lv   30G    5,2G   23G   19% /
tmpfs                              822M       0  822M    0% /dev/shm
none                               1,0M       0  1,0M    0% /run/credentials/systemd-journald.service
tmpfs                              822M       0  822M    0% /tmp
none                               1,0M       0  1,0M    0% /run/credentials/systemd-resolved.service
/dev/sda2                          2,0G    186M  1,7G   11% /boot
none                               1,0M       0  1,0M    0% /run/credentials/systemd-networkd.service
none                               1,0M       0  1,0M    0% /run/credentials/getty@tty1.service
tmpfs                              165M    8,0K  165M    1% /run/user/1000
/dev/mapper/vg_luks_sdb-lv_opt     503G    2,1M  478G    1% /opt

Jetzt können wir den Dienst aktivieren:

systemctl enable opt.mount

und das System einmal neu starten und kontrollieren ob es auch noch einem Reboot vorhanden ist.
Das sollte so sein, ich habe eine Weile gebraucht bis ich das hinbekommen hatte - die Lösung war das der Dienst zum entperren auf das Device wartet.


Weitere Passphrasen für das Entsperren angeben

Wer will kann weitere Passphrasen für das Bootlaufwerk angeben, diese funktionieren dann alle gleichberechtigt.
Kann auch als Trick genutzt werden wenn es Probleme mit der Tastaturbelegung gibt.
Als root

cryptsetup luksAddKey /dev/sda3

Dann fragt er ein bestehendes und dann 2 mal das neue Kennwort ab:

Geben Sie irgendeine bestehende Passphrase ein:
Geben Sie die neue Passphrase für das Schlüsselfach ein:
Passphrase bestätigen:

Und in Zukunft kann auch dieses Kennwort genutzt werden.


Verschlüsselte Festplatten Festplatten nachträglich vergrößern

Dazu nutze ich ein Skript das ihr hier findet:

Einfach die Festplatte im Hypervisor vergrößern, egal ob die Boot-Festplatte oder weitere Laufwerke und dann das Skript einmal laufen lassen


Quellen


Kommentare

Loading comments...