web-dev-qa-db-fra.com

Comment faire en sorte que dropbear fonctionne réellement avec initramfs?

J'essaie de déverrouiller un serveur sans tête exécutant une version chiffrée d'Ubuntu 14.04. C'est une installation propre de 14.04.2 avec toutes les mises à jour au moment de l'écriture.

Je suis passé par les manigances standard avec dropbear et busybox, c'est-à-dire:

# INSTALL
Sudo apt-get install dropbear busybox           # on server

# ENABLE AND CONFIGURE IP
Sudo sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropber
Sudo sed -i 's/BUSYBOX=y/BUSYBOX=y\nDROPBEAR=y\n/g' \
            /etc/iniramfs/iniramfs.conf
Sudo sed -i 's/DEVICE=.+/DEVICE=etho0/g' \
             /etc/iniramfs/initramfs.conf
Sudo sed -i 's/IP=.+/IP=IP=192.168.0.11:::255.255.255.0::eth1:off' \
            /etc/initramfs/initramfs.conf
Sudo update-initramfs

# COPY DROPBEAR SSH KEY
# WRONG: Sudo cp /etc/dropbear/dropbear_*_Host_key /tmp
Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa /tmp             # BETTER!
Sudo chown $USER:$USER /tmp/id_rsa

scp server:/tmp/id_rsa ~/.ssh/id_rsa_dropbear_server           # on client

Sudo reboot                                                    # on server

# CONNECT TO SERVER
ssh -vv -i ~/.ssh/id_rsa_dropbear_server \
        -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' \ 
         [email protected]                                     # on client

J'ai donc copié la clé ssh générée automatiquement et fait une configuration minimale de dropbear. À ma surprise deux trois choses fonctionnent mal:

  1. Le système ignore les paramètres IP. J'ai trouvé dans le site "périphériques connectés" de mon routeur, que le serveur a l'adresse IP 192.168.0.27 malgré ma configuration. J'ai donc essayé la mauvaise adresse IP indiquée avec: ssh -vv -i ~/.ssh/dropbear_dss_Host_key -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' [email protected]. Cela se connecte à dropbear mais:
  2. Dropbear ignore toutes les clés publiques autres que la sienne dans /etc/initramfs-tools/root/.ssh/authorized_keys (testé avec dss - peut-être aussi rsa).
    Résolu: Dropbear veut une phrase de passe pour la clé, ce que je n'ai pas. J'ai donc essayé une phrase secrète vide. Avec lequel dropbear passe à l'authentification par mot de passe et veut le mot de passe root, celui-ci n'est pas défini.
  3. Script de hook personnalisé s semble être partiellement ignoré. Ce sont des scripts qui fonctionnaient dans une installation plus ancienne!

Voici l'ensemble session ssh .

J'ai ajouté mon fichier de clé publique habituel aux hôtes connus de dropbear dans le /etc/initramfs-tools/root/.ssh/authorized_keys du serveur et j'ai essayé de ssh avec ma clé habituelle. Ça n'a pas marché.

J'ai ajouté la ligne GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none" au /etc/default/grup du serveur et au groupe mis à jour. Cela visait à résoudre le problème de la propriété intellectuelle. Mais cela n'a pas fonctionné non plus.

Je suis maintenant complètement ennuyé et à bout de patience. Où me suis-je trompé? De plus, la syntaxe des paramètres IP est-elle correcte, car un guide indique ::eth0:off et le suivant indique ::etho:none?

Modifier

Il y a quelqu'un avec ce qui semble être le même problème le 15.04.

Modifier 2

Je peux maintenant me connecter au serveur. Il s'avère que j'avais copié la mauvaise clé privée à utiliser avec dropbear. L'erreur a été corrigée dans mon script ci-dessus. Mais l’ajout de clés ne fonctionne toujours pas (c’est-à-dire dans le fichier authorized_keys de dropbear). Il y a Word dont vous avez besoin pour convertir les clés publiques, que vous voulez ajouter au format /etc/initramfs-tools/root/.ssh/authorized_keys au format dropbear, mais je ne veux pas perdre de temps à chercher comment. J'ai seulement essayé dss clés publiques. Peut-être que dropbear aime juste rsa mieux?

De plus, j'ai remarqué que les scripts de hook personnalisés ne semblent pas fonctionner. Ils ne sont pas inclus dans les répertoires initramfs, mais lsinitramfs -l /boot/initrd.img-3.16.0-43-generic les répertorie comme faisant partie de l'image. Les paramètres IP sont également ignorés. Même si j'ajoute GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none" au grubconfig dans /etc/default/grub et que je met à jour tout.

Modifier 3

Donc, il semble que /usr/lib/dropbear/dropbearconvert INPUTFORMAT OUTPUTFORMAT INFILE OUTFILE est le programme pour convertir les clés. Le paramètre FORMAT peut être soit openssh ou dropbear. Mais il ne semble pas que ce soit la solution pour ajouter des clés aux serveurs /etc/initramfs-tools/root/.ssh/authorized_keys. La clé existante existe déjà dans le format de fichier de clé publique d'Openshsh. Donc, ajouter d'autres clés au format openssh ne devrait pas poser de problème. Pourtant c'est.

6
con-f-use

Il est difficile de savoir quels hôtes connus vous inquiète - sur le serveur ou sur le client. J'ai utilisé les instructions de http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/ sur Debian. Je vais paraphraser cette page et ajouter un peu de Tweak que j'ai trouvé utile. Les paquets dropbox contemporains de Debian créent toutes les clés nécessaires sur le serveur au moment de l’installation, mais le tutoriel référencé est si ancien qu’il mentionne les cas où les clés doivent être créées manuellement. YMMV.

A. Sur le serveur. Comme vous l'avez dit à juste titre, les clés dropbear et OpenSSH diffèrent, mais sont supposément inter-convertibles. Le didacticiel indique que vous pouvez créer sur le serveur les clés d’hôte avec:

dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key

En fait, c'est un peu plus dur que ça. Pour moi sur Debian Jessie, les étapes étaient les suivantes:

  1. Créez une clé OpenSSH.

    ssh-keygen -t rsa -b 4096 -m PEM -f bootkey_rsa

  2. Copiez-le sur le serveur, c’est-à-dire l’ordinateur sur lequel vous êtes le plus susceptible d’avoir dropbearconvert. Là, convertissez-le au format dropbear:

    / usr/lib/dropbear/dropbearconvert openssh dropbear bootkey_rsa bootkey_dropbear_rsa

  3. Restez sur le serveur, connectez-vous à la racine et extrayez de la clé Dropbear la partie publique dans le fichier où boot drop recherche:

    dropbearkey -y -f bootkey_dropbear_rsa | grep "^ ssh-rsa">/etc/dropbear-initramfs/allowed_keys

  4. Mettre à jour initramfs:

    update-initramfs -u -k all

  5. Nettoyage: supprimez bootkey_dropbear_rsa et bootkey_rsa du serveur.

Notez que l'emplacement où l'attribut known_hosts est attendu par update-initramfs, indiqué ci-dessus sous la forme /etc/dropbear-initramfs/authorized_keys, est flexible et qu'il passe probablement de distro à distro. Pour être sûr de le placer au bon endroit, lisez le fichier source à partir de /usr/share/initramfs-tools/hooks/dropbear.

L'autre clé nécessaire est créée avec:

dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear

B. Sur le client, vous avez besoin des deux types de clé. Il existe donc un autre known_hosts. Dans le tutoriel référencé, la commande à connecter est la suivante:

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" [email protected] \
"echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"

Une des clés, id_rsa.initramfs, est le fichier /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key ou bootkey_rsa de la section serveur.

Sur le client known_hosts, il peut exister un conflit entre la clé que vous avez déjà pour le serveur OpenSSH et le serveur dropbear que vous venez d'installer. J'ai temporairement supprimé de known_hosts les clés du service OpenSSH normal, connecté à l'aide de la commande ci-dessus (en laissant de côté le paramètre -o), j'ai été invité à indiquer si je fais confiance à la clé de l'hôte, à dit oui, et je l'ai ajouté à mon known hosts. A partir de là, vous devez déplacer cette dernière ligne vers son propre known_hosts (~/.ssh/known_hosts.initramfs dans l'exemple ci-dessus).

2
Nick Alexander

Voici comment vous convertissez la clé de Dropbear. Les scripts de démarrage sont un peu débiles pour moi aussi ...

2
billy_ran_away

Démarrez votre serveur en connectant et déverrouillant la partition cryptée via votre client.

Installer les packages obligatoires (sur le serveur)

apt-get install dropbear initramfs-tools busybox

Ajoutez vos clés publiques souhaitées dans le fichier registered_keys du serveur

Il suffit de copier et coller votre clé publique dans /etc/dropbear-initramfs/authorized_keys sur SERVER

Créer le script de déverrouillage

Créez le script suivant dans /etc/initramfs-tools/hooks/crypt_unlock.sh

#!/bin/sh

PREREQ="dropbear"

prereqs() {
  echo "$PREREQ"
}

case "$1" in
  prereqs)
    prereqs
    exit 0
  ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following line kill the remote Shell right after the passphrase has
# been entered.
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF

  chmod 755 "${DESTDIR}/bin/unlock"

  mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF

  chmod 755 "${DESTDIR}/lib/unlock/plymouth"

  echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd

fi

Rendez-le exécutable:

chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh

Créer une adresse IP statique (ou ignorer cette étape pour utiliser DHCP)

Editez /etc/initramfs-tools/initramfs.conf pour ajouter (ou changer) la ligne:

IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off

format [Host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]

([hostname] can be omitted)

Mettre à jour initialramfs

update-initramfs -u

Désactivez le service dropbear au démarrage pour utiliser openssh après le déchiffrement de la partition

Sudo update-rc.d dropbear disable

Essai

  1. Redémarrez votre serveur
  2. Connectez-vous à votre serveur via ssh [email protected] [-i ~/.ssh/id_rsa]
0
ceremcem

Très bien tout le monde, donc juste au cas où vous ne trouviez pas de solution et pour tous ceux qui se coupent les cheveux en suivant des tutoriels en ligne pour le mettre en place ...

Tous les tutoriels que j'ai trouvés en ligne disent/impliquent que le fichier

authorized_keys

va dans

/etc/initramfs-tools/root/.ssh/

quand en fait il est censé aller dans

/etc/dropbear-initramfs/

+1 @ceremcem pour montrer aussi cela.

0
J-a-n-u-s