Podle Wikipedie je Linux Unified Key Setup (LUKS) specifikace pro šifrování disku vytvořená Clemens Fruhwirth v roce 2004 a byla původně určena pro Linux. LUKS používá šifrování mapovače zařízení (dm-crypt
) jako modul jádra pro zpracování šifrování na úrovni blokového zařízení.
Existují různé front-endové nástroje vyvinuté pro šifrování linuxových oddílů, ať už jde o obyčejné oddíly nebo logické svazky (LV). V tomto tutoriálu prozkoumáme tyto nástroje a předvedeme, jak nakonfigurovat šifrování disku. Vytvořil jsem 10GB disk (/dev/vdb
), který použijete během tohoto kurzu.
Instalace nástrojů
Začněme instalací příslušných nástrojů pro konfiguraci šifrování:
dnf install -y cryptsetup parted
cryptsetup
balíček poskytuje cryptsetup
příkaz, který použijeme ke konfiguraci šifrování, zatímco parted
balíček poskytuje parted
příkaz pro konfiguraci oddílu.
Vytvoření oddílu
Spuštění lsblk
zobrazí vaše aktuální nastavení:
[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
Můžeme zašifrovat celé blokové zařízení jako /dev/vdb
, ale vytvoření oddílu nabízí větší flexibilitu, protože další oddíly můžeme přidat později.
Nyní spustíme následující příkazy k vytvoření oddílu k šifrování:
[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
Při spuštění lsblk
znovu vidíme, že dev/vdb1
oddíl byl přidán:
[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
Formátování svazku pomocí LUKS
Následující proces zašifruje dev/vdb1
. Abyste mohli pokračovat, musíte zadat YES
velkými písmeny a dvakrát zadejte heslo:
[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.
Potom potřebujeme cíl pro otevření šifrovaného svazku. Použil jsem mybackup
jako můj cíl, ale tento cíl lze pojmenovat jakkoli:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup
Enter passphrase for /dev/vdb1:
Key slot 0 unlocked.
Command successful.
Spuštění lsblk
znovu vidíme:
[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
Můžeme také vidět mybackup
mapování šifrovaného svazku:
[root@rhel8 ~]# ls -l /dev/mapper/mybackup
lrwxrwxrwx. 1 root root 7 Sep 16 16:10 /dev/mapper/mybackup -> ../dm-2
Vytvoření souborového systému
Protože nyní máme přístup k zašifrovanému svazku, musíme jej naformátovat, než na něj budeme moci ukládat data. Můžete si vybrat mezi různými typy souborových systémů, jako je xfs (výchozí na Red Hat Enterprise Linux 8), ext3, ext4 atd. Pro jednoduchost použijeme jako typ souborového systému xfs:
[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
Vytvoření bodu připojení a adresáře
Abychom mohli zapisovat data do šifrovaného souborového systému, musíme jej nejprve připojit. Vybral jsem /mnt/my_encrypted_backup
být přípojným bodem pro moje data:
[root@rhel8 ~]# mkdir -p /mnt/my_encrypted_backup
Poté spustíme mount
příkaz:
[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.
Zde se zobrazí varování Security-Enhanced Linux (SELinux). Musíme změnit označení bezpečnostního kontextu SELinux přípojného bodu:
[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
Spuštění mount
příkaz znovu ukazuje, že varování zmizelo:
[root@rhel8 ~]# mount -v -o remount /mnt/my_encrypted_backup/
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Spuštění lsblk
opět vytvoří následující výstup:
[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
Načítání podrobností LUKS
Nyní můžeme vypsat informace záhlaví LUKS, sekci datových segmentů, použité klíčové sloty atd.:
[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
Přidání souboru klíče a automatické připojení
Připojení šifrovaného souborového systému LUKS automaticky má bezpečnostní důsledky. Pro uživatele notebooků to není moudrá volba. Pokud bude vaše zařízení odcizeno, budou odcizena i vaše data, která byla uložena v šifrovaném oddílu.
Bez ohledu na výše uvedené bezpečnostní důsledky zde je návod, jak nastavit automatickou montáž. Nejprve vytvořte příslušný adresář pro uložení souboru klíče:
[root@rhel8 ~]# mkdir /etc/luks-keys/; dd if=/dev/random of=/etc/luks-keys/mybackup_key bs=32 count=1
[root@rhel8 ~]#
Poté přidejte klíč pomocí cryptsetup
nástroj:
[root@rhel8 ~]# cryptsetup luksAddKey /dev/vdb1 /etc/luks-keys/mybackup_key
Enter any existing passphrase:
[root@rhel8 ~]#
Dále musíme obnovit kontext SELinux:
[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
Dříve jsme otevřeli šifrovaný souborový systém a připojili jej ručně. Nyní musíme zjistit, zda můžeme udělat totéž s automatizací. Protože je náš souborový systém již připojen, musíme nejprve umount
(odpojit) to:
[root@rhel8 ~]# umount /mnt/my_encrypted_backup
[root@rhel8 ~]# cryptsetup -v luksClose mybackup
Command successful.
Zkusme otevřít šifrovaný oddíl pomocí příkazového řádku pomocí souboru jako klíče:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup --key-file=/etc/luks-keys/mybackup_key
Key slot 1 unlocked.
Command successful.
Dále musíme nakonfigurovat /etc/crypttab
a /etc/fstab
pro připojení disku při spouštění. Nejprve potřebujeme UUID pro /dev/vdb1
(nikoli /dev/mapper/mybackup
), který lze získat následovně:
[root@rhel8 ~]# blkid /dev/vdb1
/dev/vdb1: UUID="46f89586-f802-44f1-aded-f80b16821189" TYPE="crypto_LUKS" PARTUUID="f92dbe33-01"
Nyní zadejte následující řádek do /etc/crypttab
takže můžeme automaticky otevřít náš šifrovaný souborový systém:
mybackup UUID=46f89586-f802-44f1-aded-f80b16821189 /etc/luks-keys/mybackup_key luks
Po této práci můžeme nyní nakonfigurovat /etc/fstab
. Připojte k tomuto souboru následující řádek (tučně):
[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**
A nakonec můžeme pomocí mount -a
vyzkoušet, zda automatické připojení funguje bez restartu počítače :
[root@rhel8 ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
/mnt/my_encrypted_backup : successfully mounted
V tomto případě /mnt/my_encrypted_backup
byla úspěšně namontována. Nyní restartujte systém a ujistěte se, že automatické připojení funguje i při restartu.
Poslední myšlenky
Existují další možnosti, které lze poskytnout cryptsetup
a každý má kompromisy, pokud jde o rychlost a bezpečnější souborový systém. Prozkoumejte možnosti a vyberte si, co je pro vaši situaci nejlepší.