Laut Wikipedia ist das Linux Unified Key Setup (LUKS) eine Festplattenverschlüsselungsspezifikation, die 2004 von Clemens Fruhwirth erstellt wurde und ursprünglich für Linux gedacht war. LUKS verwendet Geräte-Mapper-Krypta (dm-crypt
) als Kernelmodul, um die Verschlüsselung auf Blockgeräteebene zu handhaben.
Es gibt verschiedene Front-End-Tools, die zum Verschlüsseln von Linux-Partitionen entwickelt wurden, unabhängig davon, ob es sich um einfache Partitionen oder logische Volumes (LVs) handelt. In diesem Tutorial werden wir diese Tools untersuchen und demonstrieren, wie die Festplattenverschlüsselung konfiguriert wird. Ich habe eine 10-GB-Festplatte erstellt (/dev/vdb
) zur Verwendung in diesem Tutorial.
Installieren der Tools
Beginnen wir mit der Installation der entsprechenden Tools zur Konfiguration der Verschlüsselung:
dnf install -y cryptsetup parted
Das cryptsetup
Paket stellt das cryptsetup
bereit Befehl, mit dem wir die Verschlüsselung konfigurieren, während der parted
Paket stellt den parted
bereit Befehl zum Konfigurieren der Partition.
Partition erstellen
Ausführen von lsblk
Befehl zeigt Ihr aktuelles Setup:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
Wir können ein ganzes Blockgerät wie /dev/vdb
verschlüsseln , aber das Erstellen einer Partition bietet mehr Flexibilität, da wir später weitere Partitionen hinzufügen können.
Jetzt führen wir die folgenden Befehle aus, um eine zu verschlüsselnde Partition zu erstellen:
[root@rhel8 ~]# parted /dev/vdb mklabel msdos
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# parted /dev/vdb -s "mkpart primary 2048s -1"
[root@rhel8 ~]# parted /dev/vdb align-check optimal 1
1 aligned
Beim Ausführen von lsblk
wieder sehen wir, dass dev/vdb1
Partition wurde hinzugefügt:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
Formatierung des Volumes mit LUKS
Der folgende Prozess verschlüsselt dev/vdb1
. Um fortzufahren, müssen Sie YES
eingeben in Großbuchstaben und geben Sie das Passwort zweimal ein:
[root@rhel8 ~]# cryptsetup -y -v luksFormat /dev/vdb1
WARNING!
========
This will overwrite data on /dev/vdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/vdb1:
Verify passphrase:
Key slot 0 created.
Command successful.
Dann brauchen wir ein Ziel, um das verschlüsselte Volume zu öffnen. Ich habe mybackup
verwendet als mein Ziel, aber dieses Ziel kann einen beliebigen Namen haben:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup
Enter passphrase for /dev/vdb1:
Key slot 0 unlocked.
Command successful.
Ausführen von lsblk
Wieder einmal sehen wir:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt
Wir können auch mybackup
sehen Zuordnung des verschlüsselten Volumes:
[root@rhel8 ~]# ls -l /dev/mapper/mybackup
lrwxrwxrwx. 1 root root 7 Sep 16 16:10 /dev/mapper/mybackup -> ../dm-2
Erstellen eines Dateisystems
Da wir jetzt auf das verschlüsselte Volume zugreifen können, müssen wir es formatieren, bevor wir Daten darauf speichern können. Sie können zwischen verschiedenen Dateisystemtypen wählen, wie xfs (der Standard bei Red Hat Enterprise Linux 8), ext3, ext4 usw. Der Einfachheit halber verwenden wir xfs als Dateisystemtyp:
[root@rhel8 ~]# mkfs.xfs /dev/mapper/mybackup
meta-data=/dev/mapper/mybackup isize=512 agcount=4, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2618880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Mount-Punkt und Verzeichnis erstellen
Um Daten in das verschlüsselte Dateisystem zu schreiben, müssen wir es zuerst einhängen. Ich habe /mnt/my_encrypted_backup
gewählt um der Einhängepunkt für meine Daten zu sein:
[root@rhel8 ~]# mkdir -p /mnt/my_encrypted_backup
Dann führen wir den mount
aus Befehl:
[root@rhel8 ~]# mount -v /dev/mapper/mybackup /mnt/my_encrypted_backup/
mount: /mnt/my_encrypted_backup does not contain SELinux labels.
You just mounted an file system that supports labels which does not
contain labels, onto an SELinux box. It is likely that confined
applications will generate AVC messages and not be allowed access to
this file system. For more details see restorecon(8) and mount(8).
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Hier erhalten wir eine Security-Enhanced Linux (SELinux)-Warnung. Wir müssen den SELinux-Sicherheitskontext des Einhängepunkts umbenennen:
[root@rhel8 ~]# restorecon -vvRF /mnt/my_encrypted_backup/
Relabeled /mnt/my_encrypted_backup from system_u:object_r:unlabeled_t:s0 to system_u:object_r:mnt_t:s0
mount
ausführen Der Befehl zeigt erneut, dass die Warnung weg ist:
[root@rhel8 ~]# mount -v -o remount /mnt/my_encrypted_backup/
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Ausführen von lsblk
erzeugt wieder die folgende Ausgabe:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt /mnt/my_encrypted_backup
LUKS-Details abrufen
Wir können jetzt die LUKS-Header-Informationen, den Datensegmentabschnitt, die verwendeten Schlüsselsteckplätze usw. ausgeben:
[root@rhel8 ~]# cryptsetup luksDump /dev/vdb1
LUKS header information
Version: 2
Epoch: 3
Metadata area: 12288 bytes
[……]
Digest: 49 5a 68 e9 b6 66 50 2d c8 22 8e b9 d5 fd 2c af
23 b7 47 f3 2f 62 ee 6a b8 7c 93 8f 19 fe d8 3c
Hinzufügen einer Schlüsseldatei und automatisches Mounten
Das automatische Mounten des LUKS-verschlüsselten Dateisystems hat Auswirkungen auf die Sicherheit. Für Laptop-Benutzer ist dies keine kluge Wahl. Wenn Ihr Gerät gestohlen wird, werden auch Ihre Daten gestohlen, die in der verschlüsselten Partition gespeichert waren.
Ungeachtet der oben erwähnten Sicherheitsaspekte erfahren Sie hier, wie Sie das automatische Mounten einrichten. Erstellen Sie zunächst das entsprechende Verzeichnis zum Speichern der Schlüsseldatei:
[root@rhel8 ~]# mkdir /etc/luks-keys/; dd if=/dev/random of=/etc/luks-keys/mybackup_key bs=32 count=1
[root@rhel8 ~]#
Fügen Sie dann den Schlüssel mit cryptsetup
hinzu Dienstprogramm:
[root@rhel8 ~]# cryptsetup luksAddKey /dev/vdb1 /etc/luks-keys/mybackup_key
Enter any existing passphrase:
[root@rhel8 ~]#
Als nächstes müssen wir den SELinux-Kontext wiederherstellen:
[root@rhel8 ~]# restorecon -vvRF /etc/luks-keys
Relabeled /etc/luks-keys from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
Relabeled /etc/luks-keys/mybackup_key from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
Zuvor haben wir das verschlüsselte Dateisystem geöffnet und manuell gemountet. Jetzt müssen wir sehen, ob wir dasselbe mit der Automatisierung tun können. Da unser Dateisystem bereits gemountet ist, müssen wir zuerst umount
(unmounten) es:
[root@rhel8 ~]# umount /mnt/my_encrypted_backup
[root@rhel8 ~]# cryptsetup -v luksClose mybackup
Command successful.
Versuchen wir, die verschlüsselte Partition über die Befehlszeile zu öffnen, indem wir die Datei als Schlüssel verwenden:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup --key-file=/etc/luks-keys/mybackup_key
Key slot 1 unlocked.
Command successful.
Als nächstes müssen wir /etc/crypttab
konfigurieren und /etc/fstab
um die Festplatte beim Booten zu mounten. Wir brauchen zuerst die UUID für /dev/vdb1
(nicht /dev/mapper/mybackup
), die wie folgt abgerufen werden kann:
[root@rhel8 ~]# blkid /dev/vdb1
/dev/vdb1: UUID="46f89586-f802-44f1-aded-f80b16821189" TYPE="crypto_LUKS" PARTUUID="f92dbe33-01"
Tragen Sie nun folgende Zeile in /etc/crypttab
ein damit wir unser verschlüsseltes Dateisystem automatisch öffnen können:
mybackup UUID=46f89586-f802-44f1-aded-f80b16821189 /etc/luks-keys/mybackup_key luks
Nachdem wir so viel erledigt haben, können wir jetzt /etc/fstab
konfigurieren . Hängen Sie die folgende Zeile (in Fettdruck) an diese Datei an:
[root@rhel8 ~]# vi /_etc_/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 8 06:21:57 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
[...]
**/dev/mapper/mybackup /mnt/my_encrypted_backup xfs defaults 0 0**
Und schließlich können wir testen, ob Automount funktioniert, ohne den Rechner neu zu starten, indem wir mount -a
verwenden :
[root@rhel8 ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
/mnt/my_encrypted_backup : successfully mounted
In diesem Fall /mnt/my_encrypted_backup
wurde erfolgreich montiert. Starten Sie nun das System neu und vergewissern Sie sich, dass die automatische Einbindung auch beim Neustart funktioniert.
Abschließende Gedanken
Es gibt andere Optionen, die für cryptsetup
bereitgestellt werden können , und jeder hat Kompromisse, wenn es um Geschwindigkeit und ein sichereres Dateisystem geht. Erkunden Sie die Optionen und wählen Sie, was für Ihre Situation am besten geeignet ist.