debian-fde-dropbear
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
debian-fde-dropbear [2017/12/23 11:24] – [Configuration de l'initramfs] aurelien | debian-fde-dropbear [2018/12/14 11:02] (Version actuelle) – [Complément et alternative] kippix | ||
---|---|---|---|
Ligne 11: | Ligne 11: | ||
* [[https:// | * [[https:// | ||
* [[http:// | * [[http:// | ||
- | * [[https:// | + | * [[https:// |
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
===== 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 ''/ | Ensuite, il faut ajouter les clés ssh autorisées à se connecter pour déchiffrer le disque au fichier ''/ | ||
- | (cela peut être une copie de '' | + | (cela peut être une copie de '' |
==== À partir de stretch (debian 9) ==== | ==== À partir de stretch (debian 9) ==== | ||
- | L' | + | L' |
- | Les clés autorisées à se connecter sur l' | + | Les clés autorisées à se connecter sur l' |
dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work! | dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work! | ||
- | | + | |
===== Ajout du pilote de la carte réseau à l' | ===== Ajout du pilote de la carte réseau à l' | ||
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 | + | Pour cela, il faut détecter |
# " | # " | ||
grep DRIVER / | grep DRIVER / | ||
- | | + | |
qui retourne par exemple | qui retourne par exemple | ||
Ligne 64: | Ligne 66: | ||
===== Configuration de l' | ===== Configuration de l' | ||
+ | |||
+ | //Note : La configuration décrite ci-après est réalisée dans le fichier ''/ | ||
+ | |||
+ | Pour savoir quelle partition a été chiffrée, utiliser la commande '' | ||
==== Avec Jessie (debian 8) ==== | ==== Avec Jessie (debian 8) ==== | ||
+ | Certaines des informations demandées ci-après (comme l' | ||
- | Éditer le fichier | + | Éditer le fichier |
# 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:: | IP=111.222.333.444:: | ||
+ | Notez que les valeurs ''< | ||
Reconstruire l' | Reconstruire l' | ||
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' | + | Le fonctionnement est identique, à ceci près : |
+ | |||
+ | === Activer dropbear dans l'initramfs === | ||
+ | |||
+ | '' | ||
# enable dropbear explicitly | # enable dropbear explicitly | ||
DROPBEAR=y | DROPBEAR=y | ||
+ | === Forcer l' | ||
+ | |||
+ | Il n'est plus utile de forcer // | ||
+ | |||
+ | 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, # | ||
+ | those matching the $DROPBEAR_IFDOWN shell pattern (default: ' | ||
+ | special value ' | ||
+ | tables and addresses. | ||
==== Variante ===== | ==== Variante ===== | ||
'' | '' | ||
Ligne 109: | Ligne 135: | ||
===== Connexion à la machine ===== | ===== Connexion à la machine ===== | ||
+ | |||
+ | * seul l' | ||
+ | * il est possible de remplacer le message '' | ||
+ | ==== Avec Jessie (debian 8) ==== | ||
ssh -t -o UserKnownHostsFile=~/ | ssh -t -o UserKnownHostsFile=~/ | ||
Ligne 115: | Ligne 145: | ||
Explications : | Explications : | ||
- | * L' | + | * L' |
* La phrase de passe est écrite dans le [[https:// | * La phrase de passe est écrite dans le [[https:// | ||
* Un fichier // | * Un fichier // | ||
Ligne 121: | Ligne 151: | ||
Notez qu'il est possible de se connecter simplement en ssh à la machine ('' | Notez qu'il est possible de se connecter simplement en ssh à la machine ('' | ||
+ | ==== À partir de stretch (debian 9) ==== | ||
+ | |||
+ | 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. ''/ | ||
+ | |||
+ | Pour cela, on ajoute la clé ssh autorisée à se connecter au boot, avec les commandes suivante : | ||
+ | |||
+ | # echo -n " | ||
+ | |||
+ | # cat / | ||
+ | |||
+ | ou avec votre éditeur de texte préféré. | ||
+ | |||
+ | Dès lors, pour se connecter, il suffit de lancer : | ||
+ | |||
+ | ssh -t -o UserKnownHostsFile=~/ | ||
+ | |||
+ | |||
==== Configuration persistante de SSH ==== | ==== Configuration persistante de SSH ==== | ||
Ligne 141: | 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' | Le serveur SSH dans l' | ||
Ligne 148: | Ligne 196: | ||
* En étant sur le même LAN que votre machine, vous pouvez utiliser l' | * En étant sur le même LAN que votre machine, vous pouvez utiliser l' | ||
- | ===== Mise en place avec debian 9 (stretch) ===== | ||
- | FIXME Paragraphe en attente de relecture | + | ===== Complément et alternative ===== |
- | ==== Côté serveur | + | ==== Activer l' |
- | === Installation === | + | 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' |
- | # apt install dropbear | + | Voici comment faire: |
- | * **À noter** : | + | < |
- | * Le paquet '' | + | vi /etc/default/grub |
- | * Le paquet '' | + | </file> |
- | === Configuration === | + | GRUB_CMDLINE_LINUX="ip=111.222.333.444:: |
- | == dropbear == | + | Ne pas oublier: |
- | * Configuration générale | + | update-grub |
- | Avec cette configuration, | + | ==== Nommage |
- | Ces clés sont stockées par le client ssh dans ~/.ssh/known_hosts et vérifiées à la connexion. | + | En prévention de l' |
+ | Buster, implémente les [[https:// | ||
- | Pour éviter que notre client ssh ne crie à chaque connexion croyant que l'on ne se connecte pas à la même machine, nous allons utiliser des ports de connexion différent pour dropbear et openssh-server. | + | Et donc, nous vous conseillions |
- | La configuration se fait en éditant le fichier / | + | Cela ce fait par un argument à passer au kernel au moment du boot. |
- | # | + | < |
+ | vi / | ||
+ | </ | ||
- | par | + | GRUB_CMDLINE_LINUX_DEFAULT=" |
- | DROPBEAR_OPTIONS=-p 4748 -w -s -j -k -I 60 | + | De fait, le nommage en eth0 sera conservé. |
- | Ce qui peut être fait en une commande, avec : | + | Ne pas oublier: |
- | # sed -i.bak ' | + | update-grub |
+ | ==== Sécurisation de dropbear-initramfs | ||
- | Explication des options : | + | À partir de debian 9, il y a une configuration spécifique pour le paquet '' |
+ | |||
+ | Sans rien y toucher ça marche, mais il est possible d' | ||
+ | |||
+ | Quelques options extraites de '' | ||
| **-p** | Listen on specified TCP port. | | | **-p** | Listen on specified TCP port. | | ||
| **-s** | Disable password logins. | | | **-s** | Disable password logins. | | ||
Ligne 193: | Ligne 248: | ||
| **-I** | Disconnect the session if no traffic is transmitted or received for n seconds. | | | **-I** | Disconnect the session if no traffic is transmitted or received for n seconds. | | ||
- | * Authentification | + | La ligne ''# |
- | + | ||
- | Le paquet cryptsetup permet l'inclusion d'un script de déverrouillage (cf. ''/ | + | |
- | + | ||
- | Avec l' | + | |
- | + | ||
- | On ajoute la clé ssh avec les commandes suivante : | + | |
- | + | ||
- | | + | |
- | + | ||
- | # cat / | + | |
- | + | ||
- | ou avec votre éditeur de texte préféré. | + | |
- | + | ||
- | == IP statique == | + | |
- | + | ||
- | Pour qu'une IP de connexion soit disponible dès le boot, nous allons définir une IP statique | + | |
- | + | ||
- | * Identifier le nom de l' | + | |
- | + | ||
- | + | ||
- | $ ip -o a s | cut -d " " | + | |
- | + | ||
- | * Ajout du pilote de la carte réseau à l' | + | |
- | + | ||
- | Remplacer < | + | |
- | + | ||
- | # grep " | + | |
- | + | ||
- | * Ajout de l'IP statique | + | |
- | + | ||
- | Éditer le fichier / | + | |
- | DEVICE= | + | ==== Cohabitation dropbear et openssh ==== |
- | par | + | 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 |
- | # network configuration. | + | Ces clés sont stockées par le client SSH dans ~/.ssh/known_hosts et vérifiées à la connexion. |
- | # network module is loaded by /etc/ | + | |
- | # IP should be like IP=< | + | |
- | DEVICE=enp2s0 | + | |
- | IP=111.222.333.444:: | + | |
+ | 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 : | ||
- | * Forcer l' | + | * Utiliser un fichier known_hosts spécifique, comme détaillé au paragraphe [[debian-fde-dropbear# |
- | + | * Définir un port de connexion différent pour dropbear en utilisant l' | |
- | Enfin, il faut forcer l' | + | |
- | + | ||
- | Pour cela, ajouter la règle suivante dans la configuration de l' | + | |
- | + | ||
- | pre-up ip addr flush dev enp2s0 | + | |
- | + | ||
- | Ce qui nous donne : | + | |
- | + | ||
- | allow-hotplug enp2s0 | + | |
- | iface enp2s0 inet static | + | |
- | pre-up ip addr flush dev enp2s0 | + | |
- | address 111.222.333.444 | + | |
- | gateway 111.222.333.254 | + | |
- | netmask 255.255.255.0 | + | |
- | dns-nameservers 111.222.333.254 | + | |
- | + | ||
- | + | ||
- | == Reconstruire l' | + | |
- | + | ||
- | Notre configuration est en place, il ne reste plus qu'à reconstruire l' | + | |
- | + | ||
- | # update-initramfs -u | + | |
- | + | ||
- | ==== Et côté client ==== | + | |
- | + | ||
- | === Configuration === | + | |
- | + | ||
- | SSH permet de définir des configurations par défaut dans le fichier ~/ | + | |
- | + | ||
- | Host host-init | + | |
- | Hostname | + | |
- | User root | + | |
- | Port 4748 | + | |
- | IdentityFile ~/ | + | |
- | IdentitiesOnly yes | + | |
- | + | ||
- | === Connexion | + | |
- | + | ||
- | A la connexion on se retrouve sur un shell, qui nous demande gentiment la phrase de passe : | + | |
- | + | ||
- | Please unlock disk sda2_crypt: | + | |
- | + | ||
- | Une fois la phrase de passe validée, on se fait déconnecter et le //vrai// démarrage de la machine | + | |
- | + | ||
- | cryptsetup: sda2_crypt set up successfully | + | |
- | Shared connection to 111.222.333.444 closed. | + | |
- | + | ||
- | + | ||
- | ==== Ressources externes ==== | + | |
- | + | ||
- | * [[https:// | + | |
- | * [[https:// | + | |
- | * [[https://projectgus.com/ | + | |
- | * [[https:// | + | |
- | * [[https:// | + | |
===== Le cas particulier d'une Brique Internet ===== | ===== Le cas particulier d'une Brique Internet ===== | ||
Ligne 299: | Ligne 265: | ||
Dropbear est déjà installé et utilisé sur les installations chiffrées de la Brique Internet, donc pas besoin de l' | Dropbear est déjà installé et utilisé sur les installations chiffrées de la Brique Internet, donc pas besoin de l' | ||
- | Ouvrir ''/ | + | Ouvrir ''/ |
vi / | vi / | ||
Ligne 329: | 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 ('' | 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 ('' | ||
- | Dans tous les cas, ça rend l' | + | Dans tous les cas, cela rend l' |
À noter aussi, [[http:// | À noter aussi, [[http:// | ||
+ | |||
+ | ===== Ajouter, modifier et supprimer des phrases de passes | ||
+ | |||
+ | Il est possible d' | ||
+ | |||
+ | ==== Détecter la partition chiffrée avec lsblk ==== | ||
+ | < | ||
+ | # lsblk | ||
+ | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | ||
+ | fd0 | ||
+ | sda | ||
+ | ├─sda1 | ||
+ | ├─sda2 | ||
+ | └─sda5 | ||
+ | └─sda5_crypt | ||
+ | ├─foo--vg-root | ||
+ | ├─foo--vg-var | ||
+ | ├─foo--vg-swap_1 | ||
+ | ├─foo--vg-tmp | ||
+ | └─foo--vg-home | ||
+ | sr0 11:0 1 290M 0 rom | ||
+ | sr1 11:1 1 1024M 0 rom | ||
+ | </ | ||
+ | |||
+ | La partition chiffrée est donc '' | ||
+ | |||
+ | On peut vérifier que la partition est bien une partition Luks avec la commande suivante : | ||
+ | < | ||
+ | # 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 / | ||
+ | Device / | ||
+ | Command failed with code 22: Invalid argument | ||
+ | </ | ||
+ | |||
+ | Toutes les commandes '' | ||
+ | |||
+ | ==== Pour ajouter une phrase de passe : ==== | ||
+ | |||
+ | < | ||
+ | # 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. | ||
+ | </ | ||
+ | |||
+ | ==== Pour supprimer une phrase de passe : ==== | ||
+ | |||
+ | < | ||
+ | # cryptsetup -v luksRemoveKey /dev/sda5 | ||
+ | Enter passphrase to be deleted: ****** | ||
+ | Key slot 0 unlocked. | ||
+ | Key slot 0 selected for deletion. | ||
+ | Command successful. | ||
+ | </ | ||
+ | |||
+ | Dans le cas où la passphrase n' | ||
+ | < | ||
+ | # cryptsetup -v luksRemoveKey /dev/sda5 | ||
+ | Enter passphrase to be deleted: | ||
+ | No key available with this passphrase. | ||
+ | Command failed with code 1: Operation not permitted | ||
+ | </ | ||
+ | |||
+ | ==== 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' |
debian-fde-dropbear.txt · Dernière modification : 2018/12/14 11:02 de kippix