Posté(e) il y a 23 heures23 h 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? Modifié il y a 23 heures23 h par jean_laurencin
Posté(e) il y a 21 heures21 h Toutes les tâches que je programme, je le fait avec "Cron". Donc essaie avec cron.
Posté(e) il y a 20 heures20 h 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à.
Posté(e) il y a 8 heures8 h 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.
Posté(e) il y a 4 heures4 h 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
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.