GNU/Linux >> Tutoriels Linux >  >> Cent OS

Chiffrement de disque à l'aide de services de clés basés sur le réseau (NBDE) sur CentOS/RHEL 8

Question :Comment créer un système de fichiers XFS crypté qui est automatiquement déverrouillé au démarrage en utilisant clevis (client) et tang (serveur) ?

Red Hat inclut le chiffrement de disque depuis des années avec Linux Unified Key Setup-on-disk-format (LUKS). Cette solution est facile à mettre en œuvre et à configurer pour vos besoins de chiffrement, mais la gestion et la praticité de sa gestion des clés sont horribles pour les serveurs. Il nécessite une phrase de passe au démarrage ou au moment du montage qui doit être saisie manuellement. Cela rend la solution un casse-tête pour les administrateurs système.

À partir de RHEL 7.4, avec une prise en charge complète dans RHEL 7.5, Red Hat a implémenté un composant supplémentaire qui peut être exploité pour activer les disques LUKS à distance. C'est ce qu'on appelle le chiffrement de disque lié au réseau (NBDE).

Le chiffrement de disque lié au réseau (NBDE) est :

  • Linux Unified Key Setup (LUKS) est une norme de chiffrement de disque.
  • Cryptsetup configure le chiffrement sur disque et inclut la prise en charge de LUKS
  • Tang est un service réseau qui fournit des services de chiffrement sur HTTP
  • Clevis est une infrastructure de chiffrement. Clevis peut utiliser les clés fournies par Tang comme phrase secrète pour déverrouiller les volumes LUKS
  • Le client, chape, doit être CentOS/RHEL 8, car la chape sur CentOS/RHEL 7 a des fonctionnalités limitées et nécessite un ensemble différent de commandes qui ne sont pas couvertes dans cet article.
  • Le serveur, tang, peut être exécuté sur CentOS/RHEL 7 ou 8

Configurer le serveur Tang

1. Installez les RPM :

# dnf install -y tang

2. Autorisez le port requis à traverser le pare-feu :

# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload

3. Activez le service :

# systemctl enable --now tangd.socket

Configurer le client Chape

Créer un système de fichiers chiffré

1. Installez les packages nécessaires sur le client :

# dnf install -y cryptsetup clevis-systemd clevis-luks

2. Création d'un disque chiffré sur /dev/xvdc :

Remarque  :Assurez-vous que xvdc est un lecteur vide car toutes les données qu'il contient seront supprimées.
# cryptsetup luksFormat --type luks2 --cipher aes-xts-plain64 --key-size 512 --hash sha256 --use-random /dev/xvdc
WARNING!
========
This will overwrite data on /dev/xvdc irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/xvdc:
Verify passphrase:

3. Déverrouillez l'appareil de blocage :

# cryptsetup --verbose luksOpen /dev/xvdc demodisk
Enter passphrase for /dev/xvdc:
Key slot 0 unlocked.
Command successful.

4. Créez un système de fichiers sur le disque chiffré :

# mkfs.xfs /dev/mapper/demodisk
meta-data=/dev/mapper/demodisk isize=512 agcount=4, agsize=326656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1306624, 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

5. Identifiez l'UUID du nouveau système de fichiers :

# blkid -s UUID /dev/mapper/demodisk
/dev/mapper/demodisk: UUID="24f9bfe9-1f6d-491d-8fa2-eab946464166"

6. Créez une entrée fstab pour le système de fichiers :

# echo "UUID=24f9bfe9-1f6d-491d-8fa2-eab946464166 /encrypted xfs defaults 0 0" | sudo tee -a /etc/fstab
UUID=24f9bfe9-1f6d-491d-8fa2-eab946464166 /encrypted xfs defaults 0 0

7. Montez le système de fichiers :

# mkdir /encrypted
# mount /encrypted

Ajouter une clé distante à l'appareil chiffré

1. Afficher les clés :

# cryptsetup luksDump /dev/xvdc
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]

Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 399588
Threads: 4
Salt: 0d 75 99 50 22 e2 2a 93 82 51 fc 49 6f 54 61 fe
10 b6 24 62 21 2e 07 2b 04 0a 56 c8 03 23 6f 8f
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 30284
Salt: de a0 3f 92 e1 c7 1d 5e 0e 52 65 37 19 84 2b 3c
46 2a ba 56 77 25 78 c3 27 fa 5b 07 e1 9a 25 24
Digest: 5b 95 93 af 0e a9 8d 24 cb 35 1e 77 e5 9f 15 85
eb d1 53 85 5b e4 10 2a 68 d0 11 6b 9b 71 f4 05

2. Ajouter une clé à distance :

# clevis luks bind -d /dev/xvdc tang '{"url":"http://"}'
The advertisement contains the following signing keys:

KlbbdbNpdMrVwrk6hZ1wCCeabOY

Do you wish to trust these keys? [ynYN] Y
Enter existing LUKS password:

3. Montrez qu'il y a un nouveau logement de clé utilisé par Clevis dans le logement 1 :

# cryptsetup luksDump /dev/xvdc
LUKS header information
Version: 2
Epoch: 5
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)

Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]

Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 399588
Threads: 4
Salt: 0d 75 99 50 22 e2 2a 93 82 51 fc 49 6f 54 61 fe
10 b6 24 62 21 2e 07 2b 04 0a 56 c8 03 23 6f 8f
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
1: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 508554
Threads: 4
Salt: 21 c8 91 58 22 9f 50 83 77 6f fe 12 0b 3a 66 3c
d2 47 70 88 45 70 5e f1 c1 1e d0 e1 8f 96 97 ce
AF stripes: 4000
AF hash: sha256
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
0: clevis
Keyslot: 1
Digests:
0: pbkdf2
Hash: sha256
Iterations: 30284
Salt: de a0 3f 92 e1 c7 1d 5e 0e 52 65 37 19 84 2b 3c
46 2a ba 56 77 25 78 c3 27 fa 5b 07 e1 9a 25 24
Digest: 5b 95 93 af 0e a9 8d 24 cb 35 1e 77 e5 9f 15 85
eb d1 53 85 5b e4 10 2a 68 d0 11 6b 9b 71 f4 05

Monter le système de fichiers chiffré au démarrage

1. Identifiez l'UUID de l'appareil de blocage pour une utilisation ultérieure :

# blkid -s UUID /dev/xvdc
/dev/xvdc: UUID="47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26"

2. Activez le service en utilisant l'UUID découvert pour '/dev/xvdc' :

# systemctl enable [email protected]
Created symlink /etc/systemd/system/basic.target.wants/[email protected] → /usr/lib/systemd/system/[email protected].

3. Déverrouillez le périphérique de blocage pendant le démarrage :

# echo "encrypteddisk UUID=47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26 - _netdev" | sudo tee -a /etc/crypttab
encrypteddisk UUID=47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26 - _netdev

4. Montez le système de fichiers ultérieurement au démarrage :

# vi /etc/fstab

modifier l'entrée :

UUID=24f9bfe9-1f6d-491d-8fa2-eab946464166 /encrypted xfs defaults 0 0

à :

/dev/mapper/encrypteddisk /encrypted xfs _netdev 0 0

5. Redémarrez le serveur et vérifiez la fonctionnalité :

# reboot
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 8.5M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/mapper/ol_dhcp-root 22G 1.6G 20G 8% /
/dev/xvda1 1014M 221M 794M 22% /boot
tmpfs 365M 0 365M 0% /run/user/0
/dev/mapper/encrypteddisk 5.0G 68M 5.0G 2% /encrypted

Facultatif :Supprimez la phrase secrète connue

Vous pouvez supprimer la phrase secrète connue de l'emplacement 0 et imposer l'utilisation du serveur Tang. Si le serveur Tang est inaccessible, le disque ne peut pas être déverrouillé et le système de fichiers inaccessible.

1. Supprimez la phrase secrète :

# cryptsetup --verbose luksRemoveKey /dev/xvdc
Enter passphrase to be deleted:
Key slot 0 unlocked.
Keyslot 0 is selected for deletion.
Key slot 0 removed.
Command successful.

2. Montrez qu'il n'y a plus que des rainures de clavette :

# cryptsetup --verbose luksRemoveKey /dev/xvdc
Enter passphrase to be deleted:
Key slot 0 unlocked.
Keyslot 0 is selected for deletion.
Key slot 0 removed.
Command successful.
# cryptsetup luksDump /dev/xvdc
LUKS header information
Version: 2
Epoch: 6
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 47e0d1c3-d74b-41f0-9bc7-5ea367e9cb26
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)

Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]

Keyslots:
1: luks2 
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 508554
Threads: 4
Salt: 21 c8 91 58 22 9f 50 83 77 6f fe 12 0b 3a 66 3c
d2 47 70 88 45 70 5e f1 c1 1e d0 e1 8f 96 97 ce
AF stripes: 4000
AF hash: sha256
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
0: clevis
Keyslot: 1
Digests:
0: pbkdf2
Hash: sha256
Iterations: 30284
Salt: de a0 3f 92 e1 c7 1d 5e 0e 52 65 37 19 84 2b 3c
46 2a ba 56 77 25 78 c3 27 fa 5b 07 e1 9a 25 24
Digest: 5b 95 93 af 0e a9 8d 24 cb 35 1e 77 e5 9f 15 85
eb d1 53 85 5b e4 10 2a 68 d0 11 6b 9b 71 f4 05

3. Redémarrez et vérifiez la fonctionnalité :

# reboot
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 8.5M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/mapper/ol_dhcp-root 22G 1.6G 20G 8% /
/dev/xvda1 1014M 221M 794M 22% /boot
/dev/mapper/encrypteddisk 5.0G 68M 5.0G 2% /encrypted
tmpfs 365M 0 365M 0% /run/user/0


Cent OS
  1. CentOS / RHEL 7 :Comment modifier les noms d'interface réseau

  2. CentOS / RHEL 7 :Configuration d'une adresse IP statique à l'aide des fichiers de configuration de l'interface réseau

  3. CentOS / RHEL 7 :Comment créer un Network Bonding (NIC teaming) en utilisant nmcli

  4. Configurer les noms de carte réseau persistants des adaptateurs réseau dans CentOS/RHEL à l'aide des règles udev

  5. Impossible de démarrer les services RDMA sur CentOS/RHEL 7

Comment configurer une interface réseau virtuelle sur RHEL 8 / CentOS 8

Comment configurer la liaison d'interface réseau sur RHEL 8 / CentOS 8 Linux

Comment installer Flameshot sur RHEL/CentOS à l'aide de Snapcraft

3 façons de créer un pont réseau dans RHEL/CentOS 8

Comment installer plusieurs serveurs CentOS/RHEL à l'aide de sources réseau FTP

Comment redémarrer les services réseau dans CentOS/RHEL 8