January 28Jan 28 Bonjour,Voici la situationJe dispose d'un serveur tangJ'ai un serveur "client" sous Ubuntu 24.04 LTS server avec son disque système chiffré en LUSK.J'aimerai que le déchiffrement s'éxécute comme suit :1. Déchiffrement via le couple Clevis / Tang2. Au bout de 30s si le serveur Tang n'est pas accessible déchiffrement avec un fichier clé situé sur une clé USB avec un délais de 3 minutes pour la brancher3. En l'absence de clé usb au bout des 3 minutes, demande de la phrase de passe pendant 3 minutes4. En cas d'absence de phrase de passe ou au bout de 3 erreurs extinctions du serveurPour cela1. J'installe et configure Clevis:sudo apt install clevis clevis-luks clevis-initramfssudo clevis luks bind -d /dev/sda3 tang '{"url": "http://<adresse ip du serveur>:<port d'écoute de Tang>"}'Je configure l'utilisation de la clé USB:sudo mkdir /boot/keysudo mount UUID=<UUID de la clé> /boot/key/ j'utilise l'UUID de la clé car en cas d'ajout d'un disque de données la lettre de lecteur pourrait changersudo cryptsetup luksAddKey UUID=<UUID du disque système chiffré LUSK> /boot/key/<fichier clé>sudo nano /usr/local/bin/unlock_luksje créer un script d'ordonnancement du déchiffrement/usr/local/bin/unlock_luks#!/bin/sh # Ce script doit retourner la clé de déchiffrement sur stdout USB_UUID="<UUID de la clé usb>" MOUNT_POINT="/tmp/keyusb" KEY_FILE="<fichier clé>" CLEVIS_TIMEOUT=10 # Timeout de 30 secondes pour Tang USB_TIMEOUT=30 # Timeout de 180 secondes pour la clé USB # 1. Essayer Clevis/Tang avec timeout if timeout "$CLEVIS_TIMEOUT" /usr/bin/clevis luks unlock -d "$CRYPTTAB_SOURCE" -n "$CRYPTTAB_NAME" 2>/dev/null; then # Clevis a réussi à déverrouiller exit 0 fi # 2. Essayer la clé USB (attendre jusqu'à 180 secondes) counter=0 while [ $counter -lt $USB_TIMEOUT ]; do if [ -e "/dev/disk/by-uuid/$USB_UUID" ]; then mkdir -p "$MOUNT_POINT" 2>/dev/null if mount -o ro "/dev/disk/by-uuid/$USB_UUID" "$MOUNT_POINT" 2>/dev/null; then if [ -f "$MOUNT_POINT/$KEY_FILE" ]; then # Retourner la clé sur stdout cat "$MOUNT_POINT/$KEY_FILE" umount "$MOUNT_POINT" 2>/dev/null exit 0 fi umount "$MOUNT_POINT" 2>/dev/null fi fi counter=$((counter + 1)) sleep 1 done # 3. Demander la passphrase /lib/cryptsetup/askpass "Enter passphrase for $CRYPTTAB_SOURCE: " je configure /etc/crypttab et je met à jour initramfssudo nano /etc/crypttab/etc/crypttab#dm_crypt-0 UUID=<UUID du disque système chiffré LUSK> none LUKSdm_crypt-0 UUID=<UUID du disque système chiffré LUSK> none LUKS,keyscript=/usr/local/bin/unlock_luks,initramfssudo update-initramfs -u -k allLorsque je test la phrase de passe est demandée en parallèle de l’exécution de Clevis et de la lecture de la clé USBJ'ai fais plusieurs modifications pour essayer d'ordonnancer la phrase de passe à la fin mais cela casse toujours la configuration et empêche le bootJe n'ai du coup pas encore etudié l'extinction automatique après 180 secondes d'attente de la phrase de passe ou 3 erreurs de saisie.Auriez-vous une idée? Edited January 28Jan 28 by jean_laurencin
January 28Jan 28 il y a 25 minutes, MeowMeow a dit :Donc essaie avec cron.mais cron est dans le système chiffré donc il ne sers à rien avant d'avoir été dechiffré.il faut voir avec systemd dans l'initrd mais je sais pas s'il est possible de mettre des timers là.
January 29Jan 29 Je ne connais pas ces manipulations, voici mes remarques:Peut-être que clevis est une commande non bloquante? Dans ce cas timeout ne sert à rien...Si c'est le ca,s il faudra peut-être remplacer par un sleep 180 & ... les commandes de déchiffrement ... ... un test pour savoir si c'est bon ... waitConcernant les "sleep", peut-être le type d'exécution du script empêche son bon fonctionnement? 11.04 - Sleep command not working with start up applications - Ask UbuntuPour le tester: affiche simplement ton compteur avant de demander la clé au clavier: s'il est bien à 30, c'est que la boucle s'est faite.Et du coup tout se fait en même temps.
January 29Jan 29 je ne suis pas familier avec timeout mais d'après ce que j'ai trouvé c'est mieux de tester son exit status qui vaut 124 si timeout à killer le processtimeout 10 ... exit_status=$? if [[ $exit_status -eq 124 ]]; thenet tu mets tout le reste dans le then comme ça, ça devrais bien s’exécuter seulement si tu as eu une sortie en 124autre point sleep peut sortir avant s'il reçoit un signal externe
February 5Feb 5 Le 28/01/2026 à 20:47, L33thium a dit :mais cron est dans le système chiffré donc il ne sers à rien avant d'avoir été dechiffré.il faut voir avec systemd dans l'initrd mais je sais pas s'il est possible de mettre des timers là.Tu peux avoir ton os non chiffré et ta partition de donné chiffré, non?
February 5Feb 5 il y a 54 minutes, MeowMeow a dit :Tu peux avoir ton os non chiffré et ta partition de donné chiffré, non?on peux oui mais c'est pas le cas de @jean_laurencin
February 6Feb 6 Le 05/02/2026 à 11:46, L33thium a dit :on peux oui mais c'est pas le cas de @jean_laurencinDac :)
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.