Lorsque j'ai installé Ubuntu 10.04 et, maintenant, 10.10, on m'a proposé d'activer "LVM crypté" pour mon disque dur. Après avoir choisi cette option, je suis invité à saisir mon mot de passe lors du démarrage pour décrypter le LVM.
Maintenant, je pense à mettre en place un serveur sans tête qui exécute Linux (pas nécessairement Ubuntu), mais je crains que puisque le serveur est sans tête, je ne puisse pas le décrypter au démarrage. Serais-je capable de SSH pendant le démarrage pour entrer mon mot de passe pour le LVM chiffré? Si oui, comment puis-je le configurer? Ou existe-t-il une autre solution? Encore une fois, cette question n'est PAS spécifique à Ubuntu. Merci.
Pour les versions plus récentes d'ubuntu, par exemple, 14.04, j'ai trouvé une combinaison de @dragly et ce blogposts ' réponses très utiles. Paraphraser:
(Sur le serveur) Installez Dropbear
Sudo apt-get install dropbear
(Sur le serveur) Copiez et attribuez des autorisations pour la connexion de la clé publique/privée racine
Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
Sudo chown user:user ~/id_rsa
n'oubliez pas de changer utilisateur en votre nom d'utilisateur sur le serveur
(Sur le client) Récupérer la clé privée du serveur
scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
(Sur le client) Ajouter une entrée à la configuration ssh
Host parkia
Hostname 192.168.11.111
User root
UserKnownHostsFile ~/.ssh/know_hosts.initramfs
IdentityFile ~/.ssh/id_rsa_dropbear
Remember to change _parkia_ to whatever you'd like to type `ssh my-box` to be.
(Sur le serveur) Créez ce fichier à /etc/initramfs-tools/hooks/crypt_unlock.sh
(Sur le serveur) Rendre ce fichier exécutable
Sudo chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
Mettre à jour les initramfs
Sudo update-initramfs -u
Désactivez le service dropbear au démarrage pour qu'opshsh soit utilisé après le décryptage de la partition
Sudo update-rc.d dropbear disable
Vous avez terminé. Essaye le. Consultez le billet de blog lié ci-dessus pour obtenir des instructions sur la façon de configurer le serveur avec une adresse IP statique si c'est quelque chose que vous devez faire.
Un guide pour faire une telle configuration avec BusyBox et Dropbear est montré dans ce billet de blog . early-ssh n'a pas fonctionné pour moi et n'est apparemment plus nécessaire.
J'ai résumé ce que vous devez faire dans ce qui suit. Pour plus de détails, consultez le post ci-dessus:
Installez BusyBox et Dropbear sur votre serveur
Sudo apt-get install dropbear busybox
Mettez à jour vos initramfs sur le serveur
Sudo update-initramfs -u
Copiez la clé privée générée par dropbear sur votre ordinateur client. Vous devrez peut-être le copier dans un nouveau répertoire et changer de propriétaire pour ce faire. Sur votre serveur procédez comme suit:
Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
Sudo chown user:user ~/id_rsa
N'oubliez pas de remplacer l'utilisateur par votre nom d'utilisateur. Les connexions par mot de passe ne semblent pas fonctionner.
Vous pouvez maintenant transférer la clé privée avec scp en appelant ce qui suit sur votre client :
scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
Configurez le fichier ~/.ssh/config de votre client pour une connexion facile. Ouvrez-le avec un éditeur de texte et ajoutez ce qui suit:
Host myremoteserver
HostName my.remote.server
User root
UserKnownHostsFile ~/.ssh/known_hosts.initramfs
IdentityFile ~/.ssh/id_rsa_dropbear
Remplacez l'hôte par ce que vous voulez et HostName par le nom de votre serveur. Laissez l'utilisateur être root. Il semble être le seul utilisateur accepté dans Dropbear. Enregistrez et fermez le fichier.
Redémarrez votre serveur et attendez l'invite de phrase secrète. Accordez quelques secondes à Dropbear pour détecter et configurer sa connexion Internet. Connectez-vous à votre serveur avec la commande suivante sur votre client :
ssh myremoteserver # or any name you chose
Une fois connecté, exécutez la commande suivante sur votre serveur . Voir le blog pour plus de détails:
pid=`ps | grep "/scripts/local-top/cryptroot" | cut -d " " -f 3`
kill -9 $pid
sleep 35
/scripts/local-top/cryptroot
pid=`ps | grep "/bin/sh" | cut -d " " -f 3`
kill -9 $pid;
Il vous faudra un certain temps (30 secondes) avant de saisir votre phrase secrète. Tapez-le lorsque vous y êtes invité.
Fermez la connexion en tapant
exit
Votre serveur devrait maintenant avoir déverrouillé son disque dur chiffré et démarrer normalement.
(Un grand merci à l'auteur original du billet de blog!)
Je pense que early-ssh fournit ce que vous recherchez:
Early-ssh is a simple initramfs hook, which installs Dropbear SSH server into
your initramfs, and starts it at boottime, so you will be able to do a lot of
things remotely over SSH, before your root partition gets mounted, for example:
* unlocking LUKS encrypted crypto devices -
even your root can be an encrypted filesystem
* assembling/altering RAID arrays (mdadm)
* checking the root filesystem in read-write mode,
taking action in case of errors
* and so on...
Il y a déjà un paquet .deb disponible, donc vous êtes probablement d'accord avec Ubuntu.
Jetez un œil au fichier Lisez-moi de cryptsetup pour cela dans /usr/share/doc/cryptsetup/README.remote.gz
(Paquet Ubuntu cryptsetup
). Il y a un guide complet pour y parvenir. C'est similaire à réponse de dragly , mais je pense que c'est un peu plus élégant. (Clés formatées Dropbear, passant la phrase secrète via un FIFO plutôt qu'un script Shell fragile, etc.)
déverrouillage de rootfs via la connexion ssh dans initramfs
Vous pouvez déverrouiller vos rootfs au démarrage à distance, en utilisant ssh pour vous connecter au système de démarrage pendant qu'il est en cours d'exécution avec les initramfs montés.
Installer
Pour que le déverrouillage à distance fonctionne, les packages suivants doivent être installés avant de construire les initramfs:
dropbear
busybox
Le fichier
/etc/initramfs-tools/initramfs.conf
Contient les options de configuration utilisées lors de la construction des initramfs. Il doit contenirBUSYBOX=y
(Défini par défaut lorsque le package busybox est installé) pour que busybox soit installé dans les initramfs, et ne doit pas contenirDROPBEAR=n
, Ce qui désactiverait l'installation de dropbear sur initramfs . S'il est défini surDROPBEAR=y
, Dropbear sera installé dans tous les cas; siDROPBEAR
n'est pas du tout défini, alors dropbear ne sera installé qu'en cas de configuration de cryptroot existante.Les clés d'hôte utilisées pour les initramfs sont
dropbear_dss_Host_key
Etdropbear_rsa_Host_key
, Toutes deux situées dans/etc/initramfs-tools/etc/dropbear/
. S'ils n'existent pas lors de la compilation des initramfs, ils seront créés automatiquement. Voici les commandes pour les créer manuellement:dropbearkey -t dss -f /etc/initramfs-tools/etc/dropbear/dropbear_dss_Host_key dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key
Comme les initramfs ne seront pas chiffrés, l'authentification publickey est supposée. La ou les clés utilisées à cet effet proviendront de
/etc/initramfs-tools/root/.ssh/authorized_keys
. Si ce fichier n'existe pas lors de la compilation des initramfs, il sera créé et/etc/initramfs-tools/root/.ssh/id_rsa.pub
Y sera ajouté. Si ce dernier fichier n'existe pas non plus, il sera généré automatiquement - vous trouverez la clé privée correspondante dont vous aurez besoin plus tard pour vous connecter aux initramfs sous/etc/initramfs-tools/root/.ssh/id_rsa
(Ouid_rsa.dropbear
Dans si vous en avez besoin au format dropbear). Voici les commandes pour effectuer manuellement les étapes respectives:Pour créer une clé (au format dropbear):
dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear
Pour convertir la clé du format dropbear au format openssh:
/usr/lib/dropbear/dropbearconvert dropbear openssh \ /etc/initramfs-tools/root/.ssh/id_rsa.dropbear \ /etc/initramfs-tools/root/.ssh/id_rsa
Pour extraire la clé publique:
dropbearkey -y -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear | \ grep "^ssh-rsa " > /etc/initramfs-tools/root/.ssh/id_rsa.pub
Pour ajouter la clé publique au fichier authorized_keys:
cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys
Si vous souhaitez configurer une interface à l'aide de dhcp, le réglage de
DEVICE=
Dans/etc/initramfs-tools/initramfs.conf
Devrait être suffisant. Les initramfs doivent également respecter le paramètre de noyauip=
. Si vous utilisez grub, vous souhaiterez probablement le définir dans/boot/grub/menu.lst
, Soit dans la ligne '# kopt=
', Soit ajouté à une ou plusieurs lignes spécifiques 'kernel
'. Le paramètre du noyauip=
Est documenté dansDocumentation/nfsroot.txt
Dans l'arborescence des sources du noyau.Problèmes
N'oubliez pas d'exécuter
update-initramfs
Lorsque vous avez modifié la configuration pour la rendre efficace!Recueillir suffisamment d'entropie pour le démon ssh semble parfois être un problème. Le démarrage du démon ssh peut être retardé jusqu'à ce que suffisamment d'entropie ait été récupérée. Ceci n'est pas bloquant pour le processus de démarrage, donc lorsque vous êtes sur la console, vous n'aurez pas à attendre que sshd termine son démarrage.
Procédure de déverrouillage
Pour déverrouiller à distance, vous pouvez faire quelque chose comme ceci:
ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \ -i "~/id_rsa.initramfs" [email protected] \ "echo -ne \"secret\" >/lib/cryptsetup/passfifo"
Cet exemple suppose que vous avez un fichier
known_hosts
"~/.ssh/known_hosts.initramfs
" Supplémentaire qui contient la clé d'hôte du système cryptroot, que vous avez un fichier "~/id_rsa.initramfs
" Qui contient le fichier autorisé- clé pour le système cryptroot, que le nom du système cryptroot est "initramfshost.example.com
" et que la phrase secrète cryptroot est "secret
"- <
[email protected]
> Mer. 30 sept. 2009
Merci à jap de me l'avoir signalé sur un autre canal.
Si vous voulez pouvoir démarrer sans surveillance ainsi qu'à distance, vous devriez également regarder Mandos (que moi et d'autres ont écrit):
Mandos est un système permettant aux serveurs dotés de systèmes de fichiers racine chiffrés de redémarrer sans surveillance et/ou à distance. Voir la page de manuel d'introduction fichier pour plus d'informations, y compris une liste FAQ.
En bref, le serveur de démarrage obtient le mot de passe sur le réseau, de manière sécurisée. Voir le README pour plus de détails.
Serveur sans tête? S'il a un port série, utilisez-le.
GRUB peut être configuré pour fonctionner sur le port série. Votre noyau peut également être configuré à l'aide du port série pour générer les messages de démarrage initiaux, entrer le mot de passe pour déverrouiller vos disques et vous connecter. (Si votre serveur prend en charge le BIOS série, activez-le également. Ensuite, vous n'aurez jamais à vous connecter un moniteur à la machine).
C'est toujours une bonne idée d'avoir un moyen "hors réseau" de pénétrer dans un serveur sans tête.
Malheureusement, aucune des réponses ci-dessus n'a fonctionné pour moi. De plus, la copie d'une clé privée à partir du serveur semble paradoxale.
Quoi qu'il en soit, suivant les instructions a fonctionné:
apt-get install dropbear initramfs-tools busybox
Copiez et collez simplement votre ou vos clés publiques dans /etc/dropbear-initramfs/authorized_keys
sur SERVEUR
Créer 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
chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
Éditer /etc/initramfs-tools/initramfs.conf
pour ajouter (ou modifier) la ligne:
#format [Host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]
#([hostname] can be omitted)
IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off
update-initramfs -u
Sudo update-rc.d dropbear disable
ssh [email protected] [-i ~/.ssh/id_rsa]
Sur Arch Linux, il existe un package AUR dropbear_initrd_encrypt qui fait ce que vous voulez hors de la boîte. Fonctionne assez bien pour les interfaces filaires. J'ai dû le pirater légèrement pour le sans fil.
Sur debian 9 (stable), cette solution était obsolète. Pendant l'installation, je reçois un avertissement concernant dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!
, et je n'ai pas pu trouver les clés nécessaires. Cette méthode est d'ailleurs très simple et m'a été expliquée sur la grande chaîne #debian (merci encore):
Assurez-vous d'abord que busybox
, dropbear
et dropbear-initramfs
sont installés
Sudo apt install busybox dropbear*
puis ajoutez votre clé publique (la plupart du temps ~/.ssh/id_rsa.pub
) dans le fichier /etc/dropbear-initramfs/authorized_keys
.
Mettez à jour puis initramfs
pour prendre en compte les changements:: update-initramfs -u
C'est tout!
Remarque, si vous voulez éviter d'avoir des conflits entre les clés entre dropbear
et openssh
(elles partagent la même IP, mais utilisent une clé différente), vous pouvez mettre votre client ~/.ssh/config
quelque chose comme ca:
Host myserver_luks_unlock
User root
Hostname <myserver>
# The next line is useful to avoid ssh conflict with IP
HostKeyAlias <myserver>_luks_unlock
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Ensuite, vous vous connectez simplement en utilisant:
ssh myserver_luks_unlock
et une fois que vous obtenez une invite, tapez comme suggéré par l'invite busybox:
cryptroot-unlock
et tapez votre mot de passe.
Prendre plaisir!
J'utilise la technique expliquée par d'autres sur cette page (SSH dans les initramfs avec un paramètre de noyau IP
pour configurer la mise en réseau) depuis plusieurs années maintenant pour déverrouiller à distance des serveurs Ubuntu Linux sans tête (12.02, 14.04, 16.04 et 18.04).
Je suis même allé jusqu'à développer un programme Python ( nlock-remote-system ) qui fait le déverrouillage réel pour moi, parce que le processus de le faire se sentait manuellement un peu fragile et j'ai commencé à redouter de redémarrer mes serveurs, donc dans l'esprit "si ça fait mal ça vaut le coup d'automatiser" j'ai encodé mes connaissances en Python ???? (et cela a été en effet simplifié les redémarrages réguliers pour appliquer les mises à jour de sécurité).
Depuis lors, j'ai décidé de partager mes notes personnelles sur Cryptage du disque racine distant avec le monde. La page liée contient pas mal de détails sur la procédure (également quelques astuces qui ne sont pas mentionnées ici) et j'ai l'intention de la mettre à jour.
J'ai écrit un rôle Ansible qui le fait pour vous. Obtenez simplement le rôle debops-contrib.dropbear_initramfs et exécutez-le. Reportez-vous à la documentation du rôle pour plus de détails.