Ceci est une ancienne révision du document !


Gérer la sécurité d'une installation ubuntu avec une clé usb

Ici nous verrons comment paramétrer le verrouillage/déverrouillage d'une installation d'Ubuntu avec une clé USB.

Si vous possédez une installation d'Ubuntu sur partition LUKS (Linux Unified Key Setup) et que vous en avez marre de taper le mot de passe à chaque démarrage, vous pouvez paramétrer une clé usb afin de vous authentifier automatiquement si cette dernière est branchée!

Si cette dernière n'est pas branchée, le mot de passe vous sera demandé.

Il est plus que conseillé de faire un backup de la clé, l'histoire de pas tout devoir reparamétrer si perte de la clé. De plus, Il est conseillé d'avoir une alternative de réparation (type livecd ou live usb) afin de pouvoir réparer le démarrage en cas de soucis!

Prérequis

  1. Une partition de type LUKS avec ubuntu d'installé dessus
  2. Une partition de boot séparée
  3. Une clé usb ou un support amovible (testé avec carte SD et clé usb)

Vous pouvez avoir une installation de windows à coté. Ceci ne posera pas de soucis.

Etape 1 : Préparer la clé

Sauvegardez toute données présente sur la clé que vous allez utiliser!

De plus, soyez attentifs aux commandes, et ne validez celles-ci que lorsque vous-vous êtes relu! Un risque de perte de données existe si vous faites des erreurs de code!

Créez une partition vierge de type ext4[3/2] d'au moins 1Mo sur le support. Utilisez gparted par exemple.

Fat32 devrait fonctionner aussi, mais non testé. Vous pouvez aussi utiliser une seule partition sur toute la clé. J'utilise personnellement une petite partition de 1Mo sur ma clé en ext4, puis le reste de la clé en fat32 pour compatibilité Windows.
/dev/sdb1 représentera ici la partition de notre clé. /dev/sda2 représentera ici la partition du disque crypté. Vous pouvez identifier la votre dans gparted. Elle est situé en tout début de ligne à gauche de votre partition:

Attention, /dev/sdb représente la clé en entier, n'oubliez pas de spécifier le numéro de partition (sdb1, sdf2, sdc4… tout dépend de votre clé)

Montez la clé

mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb

Créez un fichier "d'authentification" de 256octet sur la clé.

dd if=/dev/random of=/mnt/usb/.authkey bs=1 count=256

Puis démontezla clé.

sync
umount /mnt/usb

Etape 2 : Préparer la séquence de démarrage

Editez le fichier /etc/initramfs-tools/modules avec les droits root

sudo gedit /etc/initramfs-tools/modules

Et ajoutez les lignes suivantes au fichier.

  • Si vous utilisez une carte SD:
mmc_core
sdhci
mmc_block
aes_i586
sha256
dm_mod
dm_crypt
  • Si vous utilisez une clé USB:
usbcore
ohci_hcd
ehci_hcd
usb_storage
sd_mod
aes_i586
sha256
dm_mod
dm_crypt

Ajoutez la nouvelle configuration au système.

update-initramfs -v -u

Etape 3 : Paramétrer le démarrage

Montez la clé

mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb

Ajoutez le fichier d'authentification aux clé connues

cryptsetup luksAddKey /dev/sda2  /mnt/usb/.authkey

Démontez la clé et redémarrez

umount /mnt/usb
sync
reboot

Etape 4 : Paramétrer le système

Redémarrez normalement.

Notez l'UUID (identifiant de partition) de la partition contenant la clé (/dev/sdb1), obtenu par cette commande:

(Nous prendrons ici 4645b6cb-80db-457b-8d46-fbb9fd33dxxb. N'oubliez pas de le remplacer par le votre dans les commandes suivantes)

sudo blkid /dev/sdb1

Éditez le fichier /etc/crypttab avec les droits root:

sudo gedit /etc/crypttab

Vous devriez avoir quelque chose du genre:

sda2_crypt          UUID=9df4f-878ytju-ilk45q-gfbb9f-d33dxxb       none                luks

9df4f-878ytju-ilk45q-gfbb9f-d33dxxb est l'UUID de la partition cryptée

Dupliquez la ligne et changez le none par UUID=4645b6cb-80db-457b-8d46-fbb9fd33dxxb:.authkey, et rajoutez ,tries=3,keyscript=/usr/local/sbin/bootkeyscript à la fin de la ligne

Soit après luks dans notre exemple. Attention à la virgule qui est importante, et à ne pas avoir de duplicata dans la ligne.

Notre fichier final ressemblera donc à quelque chose du genre:

sda2_crypt          UUID=9df4f-878ytju-ilk45q-gfbb9f-d33dxxb       UUID=4645b6cb-80db-457b-8d46-fbb9fd33dxxb:.authkey                luks,tries=3,keyscript=/usr/local/sbin/bootkeyscript
sda2_crypt          UUID=9df4f-878ytju-ilk45q-gfbb9f-d33dxxb       none                                                                                                   luks

Téléchargez ce script et placez le dans /usr/local/sbin/bootkeyscript à l'aide des droits root.

sudo cp ~/Téléchargements/bootkeyscript /usr/local/sbin/bootkeyscript

(N'oubliez pas de changez l'emplacement du fichier téléchargé si ~/Téléchargements/bootkeyscript n'est pas sa localisation)

Donnez-lui les droits d’exécution:

sudo chmod +x /usr/local/sbin/bootkeyscript

Réactualisez la séquence de démarrage:

update-initramfs -v -u

Redémarrez et profitez! ;)

En cas de soucis

Si une erreur apparaît au démarrage indiquant quelque chose du genre "UUID=nf14k7-ui56gf-wzdf4gt1-yj3-61sd not found".

Et que vous tombez sur la console

(initramfs)

Alors le fichier /etc/crypttab n'est pas correct. La procédure est comme ceci:

  • Démarrez sur un live cd ou live usb
  • Identifiez les emplacements de la partition de boot et la partition root avec gparted ici respectivement /dev/sda1 et /dev/sda2
  • Identifiez l'UUID de la partitino cryptée par un:
sudo cryptsetup luksUUID /dev/sda2
  • créez le répertoire /tmproot:
mkdir /tmproot
  • montez les deux partitions:
cryptsetup luksOpen /dev/sda2 tmproot
mount /dev/mapper/tmproot /tmproot
mount /dev/sda1 /tmproot/boot
  • Chrootez-vous dans le système:
chroot /tmproot
  • Modifiez le fichier /etc/crypttab, et vérifiez que l'UUID de montage est bien celui de la partition cryptée.
  • Nous aurons donc, pour l'optimal:
sda2_crypt   UUID=uuid-de-votre-partition-cryptee   none   luks
ATTENTION, sda2_crypt doit correspondre avec le nom de la partition montée en root listée dans le fichier /etc/fstab!

Sinon quoi, la partition sera bien décryptée au démarrage, mais absolument pas montée dans /, ce qui ne permettra bien évidement pas le démarrage! Logiquement, vous n'avez pas à y toucher à n'importe quel moment du tutoriel. Seul le "none" et la partie "luks" sont à modifier dans l'étape 4!

  • Enregistrez et réactualisez la configuration:
update-initramfs -v -u
  • Redemarrez

Identifier l'ID de sa clé

Notez l'identification de la clé, obtenu par cette commande:

lsusb

Vous devrez obtenir une résultat similaire:

Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 114b:085b PNY 
Bus 002 Device 004: ID 035f:0945 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth

Nous choisirons ici la clé "PNY". Retenez donc la section ID qui précède le nom du materiel. Ici:

ID 114b:085b PNY

Paramétrer et installer le script

Installez xscreensaver (requis)

sudo apt-get install xscreensaver

Créez un script dans le répertoire ~/ (votre home) appelé .autoLock Éditez avec gedit:

touch ~/.autoLock
gedit ~/.autoLock

Et on copie/colle le code suivant:

#!/bin/bash
# A simple shell to lock / unlock your Desktop
# Ubuntu
# ----------------------------------------------------------------------------
# Original Script by Echowrap http://echowarp.neomenlo.org
# Modified by Vidyadhar D S <http://www.techienote.com/>
# vidyadhards@gmail.com techienote.com@gmail.com
# Translated and corrected by malabarth malabarth@gmail.com
# ----------------------------------------------------------------------------
#Replace with the ID of your USB device
id="ID 114b:085b PNY"
 
#runs every 2 seconds
for ((i=0; i<=30; i++))
do
if [ -z "`lsusb | grep "$id"`" ]
then
 
    echo "Clé d'authentification absente"
    if [ -n "`DISPLAY=:0.0 gnome-screensaver-command --query | grep "est actif"`" ]
    then 
    
    if [ -e /tmp/autoUnlock.lock ]
    then
    rm /tmp/autoUnlock.lock
 
fi
 
elif [ -e /tmp/autoUnlock.lock ]
then
 
    DISPLAY=:0.0 notify-send -t 5000 --icon=dialog-info "Clé d'authentification deconnectée" "A bientôt!"
    DISPLAY=:0.0 gnome-screensaver-command --lock
    rm /tmp/autoUnlock.lock
 
fi
else
 
    echo "Clé d'authentification connectée"
    if [ ! -e /tmp/autoUnlock.lock ]
    then
    
    DISPLAY=:0.0 gnome-screensaver-command --deactivate
    DISPLAY=:0.0 notify-send -t 5000 --icon=dialog-info "Clé d'authentification connectée" "Bienvenue!"
    touch /tmp/autoUnlock.lock
    
    fi
 
fi
sleep 2
done

ATTENTION On n'oubliera pas de remplacer ID 114b:085b PNY par votre ID

Puis donnez-lui les droits d'execution:

chmod +x .autoLock

Ajouter aux tâches cron

crontab -u votrenomdutilisateur -e

On ajoute la ligne suivante:

* * * * * bash /home/votrenomdutilisateur/.autoLock & >/dev/null 2>&1
  • Enregistrez (ctrl + o)
  • Quittez (ctrl + x)

Redémarrez cron:

sudo /etc/init.d/cron restart

Voila, enlevez votre clé, l'écran devrait se verrouiller. Remettez-là, L'écran se déverrouillera!

Si pas de clé, le mot de passe sera demandé comme un déverrouillage normal.

Utiliser une clé de décryptage

Si vous souhaitez verrouiller/déverrouiller avec la même clé (le même fichier .authkey) que lors du déchiffrement de votre partition cryptée, c'est possible.

Pour cela, copiez le fichier .authkey à la racine de votre home!

Identifiez le label de la partition de votre clé:

sudo blkid

Vous obtiendrez une liste des périphériques branchés. Identifiez votre partition, et le label. Si elle ne possède pas de label, notez l'UUID.

# La première ligne est un exemple de partition avec label, la deuxième sans label:
/dev/sdb1: LABEL="PNY" UUID="820E-970B" TYPE="vfat"
/dev/sdb1: UUID="820E-970B" TYPE="vfat"

Ici le label est PNY, si le label n'etait pas indiqué, il aurait fallu relever 820E-970B:

Éditez le fichier .autoLock

gedit ~/.autoLock

Et remplacez la ligne contenant votre ID:

id="ID 114b:085b PNY"

Par cette ligne:

LABEL="PNY"

Bien entendu, remplacez PNY par votre LABEL (ou votre UUID si label inexistant), n'oubliez pas les guillemets.

Trouvez la ligne

if [ -z "`lsusb | grep "$id"`" ]

Et remplacez-la par:

if !(diff ~/.authkey /media/$(whoami)/$LABEL/.authkey);

Le système va maintenant chercher dans la partition indiquée (qui est automatiquement montée dans le repertoire /media/votrenomdutilisateur/LABELouUUID/) le fichier .authkey, et le comparer avec celui présent sur la clé!

Vous pouvez maintenant redémarrer!

En cas de soucis

Si problème il y a, loguez vous en console tty1 (ctrl + alt + 1), et déplacez le fichier exécutable:

mv .autoLock .autoLock.bak

Puis redémarrez! N'oubliez pas de supprimer la tâche de cron tab si vous ne souhaitez plus cette fonctionnalité!

crontab -u votrenomdutilisateur -e

Sources

  • tutoriel/securiser_ubuntu_avec_peripherique_externe.1368897747.txt.gz
  • Dernière modification: Le 18/05/2013, 19:22
  • par 89.159.166.94