Outils pour utilisateurs

Outils du site


debian-fde-dropbear

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
debian-fde-dropbear [2017/12/23 14:30] aureliendebian-fde-dropbear [2018/12/14 11:02] (Version actuelle) – [Complément et alternative] kippix
Ligne 11: Ligne 11:
   * [[https://github.com/lhost/pkg-cryptsetup-debian/blob/master/debian/README.remote|Documentation officielle sur le déchiffrement distant]]   * [[https://github.com/lhost/pkg-cryptsetup-debian/blob/master/debian/README.remote|Documentation officielle sur le déchiffrement distant]]
   * [[http://wiki.faimaison.net/doku.php?id=projets:wifi:ateliers:4_raid_luks_lvm|Notes sur install RAID + LVM + FDE chez FAImaison]]   * [[http://wiki.faimaison.net/doku.php?id=projets:wifi:ateliers:4_raid_luks_lvm|Notes sur install RAID + LVM + FDE chez FAImaison]]
-  * [[https://rootlogin.ch/2015/04/27/howto-install-debian-jessie-with-encrypted-lvm-and-software-raid-on-a-remote-server/|How-To chez rootlogin.ch]]+  * [[https://rootlogin.ch/howto_en/installing_debian_jessie_with_encrypted_lvm_and_softraid/|How-To chez rootlogin.ch]]
   * [[https://projectgus.com/2013/05/encrypted-rootfs-over-ssh-with-debian-wheezy/|How-To chez projetgus.com]]   * [[https://projectgus.com/2013/05/encrypted-rootfs-over-ssh-with-debian-wheezy/|How-To chez projetgus.com]]
 +  * [[https://sowhatisthesolution.wordpress.com/2016/03/20/unlock-luks-via-ssh-in-debian/|How-To chez sowhatisthesolution.wordpress.com (Unlock LUKS via SSH in Debian)]] 
 +  * [[https://www.theo-andreou.org/?p=1579|How-To chez How to theo-andreou.org (remotely decrypt a LUKS encrypted)]] 
 +  * [[https://hamy.io/blog/remote-unlocking-of-luks-encrypted-root-in-ubuntu-debian/|How-To chez hamy.io (Remote unlocking of LUKS-encrypted root in Ubuntu/Debian)]]
  
 ===== Installation de dropbear ===== ===== Installation de dropbear =====
Ligne 32: Ligne 34:
  
 Ensuite, il faut ajouter les clés ssh autorisées à se connecter pour déchiffrer le disque au fichier ''/etc/initramfs-tools/root/.ssh/authorized_keys'' Ensuite, il faut ajouter les clés ssh autorisées à se connecter pour déchiffrer le disque au fichier ''/etc/initramfs-tools/root/.ssh/authorized_keys''
-(cela peut être une copie de ''~/.ssh/authorized_keys'', par exemple).+(cela peut être une copie de ''~/.ssh/authorized_keys'', par exemple à condition que vous ayez copié votre clé publique dans ce fichier).
  
 ==== À partir de stretch (debian 9) ==== ==== À partir de stretch (debian 9) ====
  
-L'installation de ''dropbear'' entraine l'installation d'un paquet complémentaire ''dropbear-initramfs''.+L'installation de ''dropbear'' entraîne l'installation d'un paquet complémentaire ''dropbear-initramfs''.
  
 Les clés autorisées à se connecter sur l'initramfs ne sont plus générées automatiquement, elles seront à ajouter dans ''/etc/dropbear-initramfs/authorized_keys''. C'est pourquoi à la fin de l'installation ou si l'on reconstruit l'initramfs avant d'avoir ajouter les clés, on a un message nous indiquant : Les clés autorisées à se connecter sur l'initramfs ne sont plus générées automatiquement, elles seront à ajouter dans ''/etc/dropbear-initramfs/authorized_keys''. C'est pourquoi à la fin de l'installation ou si l'on reconstruit l'initramfs avant d'avoir ajouter les clés, on a un message nous indiquant :
Ligne 47: Ligne 49:
 //Note : Cette étape n'est pas obligatoire sur toutes les machines, le pilote de la carte réseau étant déjà chargé dans certains cas. // //Note : Cette étape n'est pas obligatoire sur toutes les machines, le pilote de la carte réseau étant déjà chargé dans certains cas. //
  
-Pour cela il faut detecter le pilote avec la commande+Pour celail faut détecter le pilote avec la commande
  
     # "e*" permet de fonctionner avec l'ancien (eth*) et le nouveau (enps*) nommage des interfaces.     # "e*" permet de fonctionner avec l'ancien (eth*) et le nouveau (enps*) nommage des interfaces.
Ligne 64: Ligne 66:
  
 ===== Configuration de l'initramfs ===== ===== Configuration de l'initramfs =====
 +
 +//Note : La configuration décrite ci-après est réalisée dans le fichier ''/etc/initramfs-tools/initramfs.conf'', mais pour éviter des surprises vis à vis des mises à jour Debian, il serait préférable d'utiliser un autre fichier comme par exemple ''/etc/initramfs-tools/conf.d/dropbear-fde-unlock''.//
 +
 +Pour savoir quelle partition a été chiffrée, utiliser la commande ''lsblk''.
  
 ==== Avec Jessie (debian 8) ==== ==== Avec Jessie (debian 8) ====
 +Certaines des informations demandées ci-après (comme l'adresse IP) et qui sont spécifiques à votre machine se trouvent dans le fichier ''/etc/network/interfaces'', s'y référer donc.
  
-Éditer le fichier `/etc/initramfs-tools/initramfs.confet ajouter les lignes suivantes :+Éditer le fichier ''/etc/initramfs-tools/initramfs.conf'' et ajouter les lignes suivantes :
  
     # enable dropbear explicitly     # enable dropbear explicitly
     DROPBEAR=y     DROPBEAR=y
 +
 +//(ligne ci-dessus à ajouter si non déjà présente dans le fichier)//
  
     # network configuration.     # network configuration.
Ligne 77: Ligne 86:
     DEVICE=eth0     DEVICE=eth0
     IP=111.222.333.444::111.222.333.254:255.255.255.0::eth0:off     IP=111.222.333.444::111.222.333.254:255.255.255.0::eth0:off
 +Notez que les valeurs ''<local_IP>'' et suivantes doivent être remplacées par les vôtres et que la présence de ''::'' avant ''<network_interface>'' permet d'omettre la valeur de ''<hostname>'' par facilité.
  
 Reconstruire l'initramfs (à faire après chaque modification) Reconstruire l'initramfs (à faire après chaque modification)
Ligne 91: Ligne 101:
 ==== À partir de stretch (debian 9) ==== ==== À partir de stretch (debian 9) ====
  
-Le fonctionnement est identique, à ceci près, qu'il n'est pas utile d'ajouter la ligne :+Le fonctionnement est identique, à ceci près 
 + 
 +=== Activer dropbear dans l'initramfs === 
 + 
 +''dropbear'' est activé par défaut, il n'est donc pas nécessaire d'ajouter la ligne suivante au fichier ''/etc/initramfs-tools/initramfs.conf'' :
  
     # enable dropbear explicitly     # enable dropbear explicitly
     DROPBEAR=y     DROPBEAR=y
  
 +=== Forcer l'extinction de l'interface réseau ===
 +
 +Il n'est plus utile de forcer //manuellement// l'extinction de l'interface réseau, car c'est désormais le comportement par défaut (voir l'option ''IFDOWN'' dans ''/etc/dropbear-initramfs/config'').
 +
 +Extrait du changelog de la version 2015.68-1 de dropbear :
 +
 +    Bring down interfaces and flush IP routes and addresses before exiting
 +    the ramdisk, to avoid dirty network configuration in the regular kernel.
 +    (Closes: #715048, #720987, #720988.)  The interfaces considered are
 +    those matching the $DROPBEAR_IFDOWN shell pattern (default: '*'); the
 +    special value 'none' keeps all interfaces up and preserves routing
 +    tables and addresses.
 ==== Variante ===== ==== Variante =====
 ''DROPBEAR=y'' et ''DEVICE=eth0'' étant les valeurs par défaut, il est possible de définir la configuration réseau via le Grub. Pour cela il faut éditer le fichier ''/etc/default/grub'' et ajouter la ligne suivante ''DROPBEAR=y'' et ''DEVICE=eth0'' étant les valeurs par défaut, il est possible de définir la configuration réseau via le Grub. Pour cela il faut éditer le fichier ''/etc/default/grub'' et ajouter la ligne suivante
Ligne 110: Ligne 136:
 ===== Connexion à la machine ===== ===== Connexion à la machine =====
  
 +  * seul l'utilisateur ''root'' peut se connecter à dropbear
 +  * il est possible de remplacer le message ''FDE passphrase'' par le message que l'on souhaite
 ==== Avec Jessie (debian 8) ==== ==== Avec Jessie (debian 8) ====
  
Ligne 117: Ligne 145:
 Explications : Explications :
  
-  * L'utilitaire ''/lib/cryptsetup/askpass'' permet de demander une phrase de passe+  * L'utilitaire ''/lib/cryptsetup/askpass'' permet de demander une phrase de passe que l'on peut personnaliser (en remplaçant '''FDE Passphrase : ' ''  par le message souhaité)
   * La phrase de passe est écrite dans le [[https://fr.wikipedia.org/wiki/Tube_nomm%C3%A9|fifo]] ''/lib/cryptsetup/passfifo'' (sur le serveur) au sein duquel le programme de déverrouillage du disque la lit ;   * La phrase de passe est écrite dans le [[https://fr.wikipedia.org/wiki/Tube_nomm%C3%A9|fifo]] ''/lib/cryptsetup/passfifo'' (sur le serveur) au sein duquel le programme de déverrouillage du disque la lit ;
   * Un fichier //KnownHost// spécifique est utilisé car la clé ssh du serveur diffère entre l'initramfs et le root filesystem.   * Un fichier //KnownHost// spécifique est utilisé car la clé ssh du serveur diffère entre l'initramfs et le root filesystem.
Ligne 125: Ligne 153:
 ==== À partir de stretch (debian 9) ==== ==== À partir de stretch (debian 9) ====
  
-On peut toujours se connecter avec la méthode décrite, ci-dessus, mais désormais le paquet cryptsetup inclus un scipt de déverrouillage complémentaire (cf. ''/usr/share/cryptsetup/initramfs/bin/cryptroot-unlock'' et ''/usr/share/initramfs-tools/hooks/cryptroot-unlock''), que l'on peut définir comme [[https://man.openbsd.org/sshd.8#command=%22command%22|unique commande proposée à la connexion]].+On peut toujours se connecter avec la méthode décrite, ci-dessus, mais désormais le paquet cryptsetup inclut un script de déverrouillage complémentaire (cf. ''/usr/share/cryptsetup/initramfs/bin/cryptroot-unlock'' et ''/usr/share/initramfs-tools/hooks/cryptroot-unlock''), que l'on peut définir comme [[https://man.openbsd.org/sshd.8#command=%22command%22|unique commande proposée à la connexion]].
  
 Pour cela, on ajoute la clé ssh autorisée à se connecter au boot, avec les commandes suivante : Pour cela, on ajoute la clé ssh autorisée à se connecter au boot, avec les commandes suivante :
Ligne 135: Ligne 163:
 ou avec votre éditeur de texte préféré. ou avec votre éditeur de texte préféré.
  
-Dès lors pour se connecter il suffit de lancer :+Dès lorspour se connecteril suffit de lancer :
  
     ssh -t -o UserKnownHostsFile=~/.ssh/machine_known_hosts root@machine     ssh -t -o UserKnownHostsFile=~/.ssh/machine_known_hosts root@machine
Ligne 160: Ligne 188:
  
 //À noter qu'une fois la passphrase entrée, la connexion ssh est coupée étant donnée que la machine se lance et se déchiffre.// //À noter qu'une fois la passphrase entrée, la connexion ssh est coupée étant donnée que la machine se lance et se déchiffre.//
-==== Et En IPv6 ? ====+ 
 +==== Et en IPv6 ? ====
  
 Le serveur SSH dans l'initrd écoute également par défaut en IPv6. Cela signifie : Le serveur SSH dans l'initrd écoute également par défaut en IPv6. Cela signifie :
Ligne 170: Ligne 199:
 ===== Complément et alternative ===== ===== Complément et alternative =====
  
 +==== Activer l'output de Grub sur la console ====
 +
 +Dans certains cas, si vous utiliser du SoL (Serial over Lan) par exemple, et que vous avez besoin de debugger la séquence de boot, il peut-être utile de rediriger l'output de grub vers la console.
 +
 +Voici comment faire:
 +
 +<file>
 +vi /etc/default/grub
 +</file>
 +
 +    GRUB_CMDLINE_LINUX="ip=111.222.333.444::111.222.333.254:255.255.255.0::eth0:off console=ttyS1,9600"
 +
 +Ne pas oublier: 
 +
 +    update-grub
 +
 +==== Nommage des interfaces réseau ====
 +
 +En prévention de l'arrivée de la version GNU/Linux Debian (Buster), actuellement en stable sur stretch, vous pourriez avoir des surprises quant à la déclaration du nom de votre interface réseau. 
 +Buster, implémente les [[https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/|PredictableNetworkInterfaceNames]]. De fait, si vous avez suivi ce tutoriel, vous aurez renseigné "eth0" dans la configuration de grub. 
 +
 +Et donc, nous vous conseillions de désactiver, provisoirement ou non, le renommage des interfaces. 
 +
 +Cela ce fait par un argument à passer au kernel au moment du boot.
 +
 +<file>
 +vi /etc/default/grub
 +</file>
 +
 +    GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0"
 +
 +De fait, le nommage en eth0 sera conservé.
 +
 +Ne pas oublier: 
 +
 +    update-grub
 ==== Sécurisation de dropbear-initramfs ==== ==== Sécurisation de dropbear-initramfs ====
  
Ligne 185: Ligne 250:
 La ligne ''#DROPBEAR_OPTIONS='' dans le fichier de config peut donc devenir : ''DROPBEAR_OPTIONS=-w -s -j -k -I 60''. La ligne ''#DROPBEAR_OPTIONS='' dans le fichier de config peut donc devenir : ''DROPBEAR_OPTIONS=-w -s -j -k -I 60''.
  
 +==== Cohabitation dropbear et openssh ====
 +
 +Avec la mise en place de dropbear, du point de vue du client SSH on se connecte deux fois de suite sur la même ip+port en ssh, mais sur deux serveurs SSH (dropbear, puis openssh-server) identifiés par des clés différentes (côté serveur).
 +
 +Ces clés sont stockées par le client SSH dans ~/.ssh/known_hosts et vérifiées à la connexion.
 +
 +Pour éviter que notre client SSH ne crie à chaque connexion croyant que l'on ne se connecte pas à la même machine, il y a //au moins// deux possibilités :
 +
 +  * Utiliser un fichier known_hosts spécifique, comme détaillé au paragraphe [[debian-fde-dropbear#Connexion à la machine|Connexion à la machine]].
 +  * Définir un port de connexion différent pour dropbear en utilisant l'option ''-p'' dans le fichier ''/etc/dropbear-initramfs/config'' (cf. [[debian-fde-dropbear#Sécurisation de dropbear-initramfs|Sécurisation de dropbear-initramfs]]).
  
 ===== Le cas particulier d'une Brique Internet ===== ===== Le cas particulier d'une Brique Internet =====
Ligne 190: Ligne 265:
 Dropbear est déjà installé et utilisé sur les installations chiffrées de la Brique Internet, donc pas besoin de l'installer. Et vis-a-vis des explications précédentes, la brique fonctionne avec u-boot et non grub comme gestionnaire de démarrage. Dropbear est déjà installé et utilisé sur les installations chiffrées de la Brique Internet, donc pas besoin de l'installer. Et vis-a-vis des explications précédentes, la brique fonctionne avec u-boot et non grub comme gestionnaire de démarrage.
  
-Ouvrir ''/etc/initramfs-tools/root/.ssh/authorized_keys'' et y copier le contenu de ''~/.ssh/authorized_keys'' (en espérants que vous aviez précédemment [[https://yunohost.org/#/security_fr|sécurisé la connexion ssh par clé]]) :+Ouvrir ''/etc/initramfs-tools/root/.ssh/authorized_keys'' et y copier le contenu de ''~/.ssh/authorized_keys'' (en espérant que vous aviez précédemment [[https://yunohost.org/#/security_fr|sécurisé la connexion ssh par clé]]) :
    vi /etc/initramfs-tools/root/.ssh/authorized_keys    vi /etc/initramfs-tools/root/.ssh/authorized_keys
  
Ligne 220: Ligne 295:
 Il est important de se rappeler les limites d'une telle méthode. Si un attaquant obtient un accès root au système, il peut obtenir la clé de chiffrement (''dmsetup table --showkeys'') et n'a plus besoin de découvrir la phrase de passe. Il est également possible de récupérer la clé de chiffrement en mémoire via [[https://citp.princeton.edu/research/memory/|dump de la mémoire après redémarrage]]. Il est important de se rappeler les limites d'une telle méthode. Si un attaquant obtient un accès root au système, il peut obtenir la clé de chiffrement (''dmsetup table --showkeys'') et n'a plus besoin de découvrir la phrase de passe. Il est également possible de récupérer la clé de chiffrement en mémoire via [[https://citp.princeton.edu/research/memory/|dump de la mémoire après redémarrage]].
  
-Dans tous les cas, ça rend l'opération plus compliqué que simplement partir avec la machine, donc c'est bien mais ça a ses limites.+Dans tous les cas, cela rend l'opération plus compliquée que simplement partir avec la machine, donc c'est bien mais ça a ses limites.
  
 À noter aussi, [[http://www.recompile.se/mandos|Mandos]] peut servir à automatiser l'opération. À noter aussi, [[http://www.recompile.se/mandos|Mandos]] peut servir à automatiser l'opération.
 +
 +===== Ajouter, modifier et supprimer des phrases de passes  =====
 +
 +Il est possible d'avoir jusqu'à 8 phrases de passes différentes pour la même partition chiffrée.
 +
 +==== Détecter la partition chiffrée avec lsblk ====
 +<code>
 +# lsblk
 +NAME                    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
 +fd0                       2:   1    4K  0 disk  
 +sda                       8:   0   20G  0 disk  
 +├─sda1                    8:1    0  243M  0 part  /boot
 +├─sda2                    8:2    0    1K  0 part  
 +└─sda5                    8:5    0 19.8G  0 part  
 +  └─sda5_crypt          254:0    0 19.8G  0 crypt 
 +    ├─foo--vg-root      254:1    0  3.5G  0 lvm   /
 +    ├─foo--vg-var       254:   0    2G  0 lvm   /var
 +    ├─foo--vg-swap_1    254:3    0    1G  0 lvm   [SWAP]
 +    ├─foo--vg-tmp       254:   0  364M  0 lvm   /tmp
 +    └─foo--vg-home      254:5    0   13G  0 lvm   /home
 +sr0                      11:0    1  290M  0 rom   
 +sr1                      11:1    1 1024M  0 rom 
 +</code>
 +
 +La partition chiffrée est donc ''sda5''. ''sda5_crypt'' est la partition obtenue suite au **déchiffrement** de la partition chiffrée.
 +
 +On peut vérifier que la partition est bien une partition Luks avec la commande suivante :
 +<code>
 +# cryptsetup -v isLuks /dev/sda5
 +Command successful.
 +
 +# cryptsetup -v isLuks /dev/sda1
 +Device /dev/sda1 is not a valid LUKS device.
 +Command failed with code 22: Invalid argument
 +
 +# cryptsetup -v isLuks /dev/mapper/sda5_crypt
 +Device /dev/mapper/sda5_crypt is not a valid LUKS device.
 +Command failed with code 22: Invalid argument
 +</code>
 +
 +Toutes les commandes ''cryptsetup'' sont donc à exécuter sur la partition ''/dev/sda5''.
 +
 +==== Pour ajouter une phrase de passe : ====
 +
 +<code>
 +# cryptsetup -v luksAddKey /dev/sda5
 +Enter any existing passphrase: *********
 +Key slot 1 unlocked.
 +Enter new passphrase for key slot: *********
 +Verify passphrase: *********
 +Key slot 1 unlocked.
 +Command successful.
 +</code>
 +
 +==== Pour supprimer une phrase de passe : ====
 +
 +<code>
 +# cryptsetup -v luksRemoveKey /dev/sda5
 +Enter passphrase to be deleted: ******
 +Key slot 0 unlocked.
 +Key slot 0 selected for deletion.
 +Command successful.
 +</code>
 +
 +Dans le cas où la passphrase n'existerait pas ou serait incorrecte:
 +<code>
 +# cryptsetup -v luksRemoveKey /dev/sda5
 +Enter passphrase to be deleted:
 +No key available with this passphrase.
 +Command failed with code 1: Operation not permitted
 +</code>
 +
 +==== Pour modifier une phrase de passe : ====
 +
 +  - Ajouter une nouvelle phrase de passe.
 +  - :!: rebooter pour tester la nouvelle phrase de passe (ignorez cette étape à vos risques et périls)
 +  - Supprimer l'ancienne phrase de passe.
debian-fde-dropbear.1514039417.txt.gz · Dernière modification : 2017/12/23 14:30 de aurelien