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