Browse Source

Derniers edit sur l'article openvz chiffrés pour 2022

edit_openvz_chiffre
LecygneNoir 1 year ago
parent
commit
cf3d940a5b
1 changed files with 84 additions and 23 deletions
  1. +84
    -23
      content/2017/2017-11-23-installer-openvz-a-distance.md

+ 84
- 23
content/2017/2017-11-23-installer-openvz-a-distance.md View File

@ -11,7 +11,7 @@ Status: published
[TOC]
**Edit 2022**: Article mis à jour pour nettoyer les parties osbolètes et utiliser les nouveaux logiciels
**Edit 2022**: Article mis à jour pour nettoyer les parties obsolètes : utilisation de sshd et du raid soft
# Vous n'avez accès à rien ?
Pas d'ipmi, pas de KVM, pas de console ? Et pourtant vous voulez installer votre serveur openvz ?
@ -183,16 +183,26 @@ Pour commencer, récupérez les partitions qui correspondent entre-elles sur vos
```
fdisk -l /dev/sda
# Start End Size Type Name
1 2048 4095 1M BIOS boot
2 4096 2101247 1G Microsoft basic
3 2101248 5760518143 2,7T Linux RAID
4 5760518144 5827631103 32G Linux RAID
5 5827631104 5860532223 15,7G Linux RAID
fdisk -l /dev/sdb
# Start End Size Type Name
1 2048 5758418943 2,7T Linux RAID
2 5758418944 5825531903 32G Linux RAID
3 5825531904 5858433023 15,7G Linux RAID
```
Une fois cette correspondance faite, on va dire à mdadm d'activer les volumes raid.
L'objectif ici est de **rapprocher** les partitions qui "vont ensembles" en raid mdadm, en utilisant leur taille, puisque 2 partitions en raid doivent être identiques.
On observe par exemple que
- sda3 est liée à sdb1
- sda4 est liée à sdb2 # Au passage, cette partition est notre partition root, à repérer pour savoir quelle partition monter dans le chroot
- sda5 est liée à sdb3
Une fois cette correspondance faite, on va dire à mdadm d'activer les volumes raid.
On prends ici l'exemple d'un raid1 avec 2 disques, dans le cas de raid5, ou 6, ajoutez les partitions nécessaires.
```
@ -218,7 +228,7 @@ chroot /mount/openvz
Une fois dans le chroot, les choses marrantes reprennent ;-)
La connexion au boot se fera exclusivement avec une clef SSH. Si vous avez besoin de générer une clef SSH, vous pouvez vous référer à [cet article](https://blog.victor-hery.com/2012/08/connexion-ssh-par-cle.html#generation-de-la-cle-les-choses-serieuses-commencent) .
Commencez donc par poser votre clef ssh dans le chroot directement.
Commencez donc par poser votre clef ssh dans le chroot directement, ainsi elle sera prête pour votre connexion une fois le serveur démarré.
mkdir -p /root/.ssh
vim /root/.ssh/authorized_keys # Entrez votre clef SSH personnelle
@ -226,7 +236,7 @@ Commencez donc par poser votre clef ssh dans le chroot directement.
chmod 600 /root/.ssh/authorized_keys
J'utilisais précédemment [dracut-crypt-ssh](https://github.com/dracut-crypt-ssh/dracut-crypt-ssh) qui implémentait DropbearSSH, mais après plusieurs années de bons et loyaux services, il n'est plus maintenu.
On peut avantageusement le remplacer désormais par [dracut-sshd](https://github.com/gsauthof/dracut-sshd).
On peut avantageusement le remplacer désormais par [dracut-sshd](https://github.com/gsauthof/dracut-sshd) qui utilise pour sa part openssh.
```
yum install yum-plugin-copr
@ -237,12 +247,12 @@ mkdir /etc/dracut-sshd
cp /root/.ssh/authorized_keys /etc/dracut-sshd/
```
**Si vous utilisez un raid** il est nécessaire d'indiquer à dracut de charger le driver correspondant
**Si vous utilisez un raid software** il est nécessaire d'indiquer à dracut de charger le driver correspondant
```
vim /etc/dracut.conf
# Modifier et décommentez l'entrée add_drivers
add_drivers+="raid1" # Dans le cas d'un raid1
add_drivers+="raid1" # Dans le cas d'un raid1, sinon raid5, raid6, raid0, ...
```
Par défaut, dracut va générer un initramfs pour le noyau sur lequel le serveur est démarré, à savoir celui du rescue.
@ -279,21 +289,67 @@ Une fois le fichier enregistré, regénérez la configuration grub :
## Configuration de grub : luks
Sur les dernières versions, j'ai noté que par défaut openvz ne configurait le grub pour déchiffrer que les partitions root et swap.
Sur les dernières versions d'openvz, j'ai noté que par défaut le grub n'est parfois configuré que pour déchiffrer que les partitions root et swap.
Cela nous pose problème, car il demande le mot de passe pour déchiffrer la partition /vz bien plus tard, **après** le process initramfs mais **avant** d'avoir lancé les services. Pas de ssh pour le déverrouiller donc !
Pour corriger cela, on va devoir ajuster la configuration du grub nous-même.
Pour corriger cela, on va devoir vérifier la configuration du grub nous-même.
Tout se passe dans le fichier `/etc/default/grub`, à la section `GRUB_CMDLINE_LINUX`.
Tout d'abord, récupérez les noms des partitions luks :
```
# blkid |grep luks
/dev/mapper/luks-c80672a4-6644-4c0a-bc11-2ab2674fd4ec: UUID="16609b0b-983e-4982-9dd0-972f66a0c115" TYPE="swap"
/dev/mapper/luks-40bc8a84-7296-4df4-b872-6b67aa037174: UUID="51390ed2-dddf-4f61-8c29-19bd43022863" TYPE="ext4"
/dev/mapper/luks-02313a5d-c3af-4372-9ea5-ead11f2ce244: UUID="5b63074f-c886-46bf-a1c9-1c43a0059667" TYPE="ext4"
```
On récupère ce qui est après le `/dev/mapper`, par exemple `luks-c80672a4-6644-4c0a-bc11-2ab2674fd4ec`
Une fois le fichier enregistré, regénérez la configuration grub :
Pour chaque volume luks à déchiffrer au boot, vous devez avoir une section de type
```
rd.luks.uuid=luks-02313a5d-c3af-4372-9ea5-ead11f2ce244
```
grub2-mkconfig --output /etc/grub2.cfg
dans la `GRUB_CMDLINE_LINUX` du fichier `/etc/default/grub. (cf un exemple complet ci-dessous)
<p>
<details>
<summary>Si vous utilisez en outre un raid soft, cliquez</summary>
Vous devez récupérer les volumes raid :
```
# blkid | grep md
/dev/md127: UUID="6f09377e-dda8-4d11-83b6-c3c3cc17b6b9" TYPE="crypto_LUKS"
/dev/md126: UUID="03988b26-4004-4551-969b-461a7d2f37e6" TYPE="crypto_LUKS"
/dev/md125: UUID="0d60f8ec-7167-4e07-a92a-8f58fe89c22a" TYPE="crypto_LUKS"
```
On va utiliser le paramètre `rd.md.uuid` de grub MAIS celui-ci prends un format bien précis d'uuid, séparé par des points.
Prenez donc l'UUID de vos disques, et tous les 8 caractères, enlevez le tiret et mettez un `:` à la place :
```
6f09377e-dda8-4d11-83b6-c3c3cc17b6b9 => 6f09377e:dda84d11:83b6c3c3:cc17b6b9
03988b26-4004-4551-969b-461a7d2f37e6 => 03988b26:40044551:969b461a:7d2f37e6
...
```
Il faudra ensuite ajouter dans la ligne `GRUB_CMDLINE_LINUX` une option `rd.md.uuid=XXX` pour chaque partition raid. (cf exemple complet ci-dessous)
</details>
</p>
Voici un exemple complet de la ligne finale avec un raid1 :
```
# cat /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.luks.uuid=luks-03988b26-4004-4551-969b-461a7d2f37e6 rd.md.uuid=4e7537f2:97d36823:1495a4b6:5e02ee30 rd.luks.uuid=luks-6f09377e-dda8-4d11-83b6-c3c3cc17b6b9 rd.md.uuid=d57b1ed4:ea77ea71:27bcaadd:39321bd9 rd.luks.uuid=luks-0d60f8ec-7167-4e07-a92a-8f58fe89c22a rd.md.uuid=5e66072c:1ffb2033:ff97ca5a:6ab13de0 biosdevname=0 net.ifnames=0 quiet rd.neednet=1 ip=IP_SERVEUR::PASSERELLE_SERVEUR:MASQUE_SERVEUR:centos:enp0s3:off dns=DNS_SERVEUR nameserver=DNS_SERVEUR"
```
Une fois le fichier enregistré, regénérez la configuration grub :
grub2-mkconfig --output /etc/grub2.cfg
## Sortir du chroot
@ -316,7 +372,7 @@ vgchange -a n
</p>
<p>
<details>
<summary>Cliquez pour sortir du chroot avec raid</summary>
<summary>Cliquez pour sortir du chroot avec raid soft</summary>
```
exit
umount /mount/openvz/dev
@ -337,14 +393,19 @@ N'oubliez pas de désactiver le mode rescue de votre serveur, pour éviter qu'il
Si tout s'est bien passé, au bout de quelques minutes (selon votre serveur), le réseau devrait se remettre à pinguer. Quelques instant plus tard, le SSH devrait être disponible.
% ssh root@IP_SERVEUR -p 22
# console_peek # Pour voir ce qu'affiche la console, notamment la demande de mot de passe
# console_auth # Pour vous permettre de taper la clef des disques dur
```
% ssh root@IP_SERVEUR -p 22
# Cette commande permet de passer le mot de passe de déchiffrement à systemd
# Sur une install standard, vous avez 3 disques à déchiffrer (/root, /vz et swap), il faudra donc entrer la commande 3 fois
systemd-tty-ask-password-agent
systemd-tty-ask-password-agent
systemd-tty-ask-password-agent
```
Si le mot de passe est correcte, le boot va continuer, votre shell va se terminer et votre serveur terminer de démarrer tranquillement.
Si le mot de passe est correct, le boot va continuer, votre shell va se terminer et votre serveur terminer de démarrer tranquillement.
Vous devriez ensuite pouvoir vous connecter de manière tout à fait classique avec vos identifiants (le mot de passe root indiqué à l'installation).
Si jamais initramf ne continue pas, n'hésitez pas à utiliser de nouveau `console_peek` pour récupérer le contenu de la console et voir ce qui coince.
Si jamais initramf ne continue pas, n'hésitez pas à utiliser la commande `systemd-tty-ask-password-agent --list` pour récupérer la liste des disques non débloqués et voir ce qui coince.
# Troubleshooting
Cette procédure est normalement fonctionnelle, mais pas mal de chose peuvent mal se passer malheureusement, sans accès console, c'est difficile à debuguer...
@ -388,5 +449,5 @@ Je remercie ces différents auteurs qui m'ont permis d'arriver à ce résultat e
* [Install Virtuozzo via VNC](https://docs.virtuozzo.com/virtuozzo_7_installation_guide/installing-virtuozzo/installing-virtuozzo-via-vnc.html)
* [Centos6 disk encryption with remote password](http://roosbertl.blogspot.com/2012/12/centos6-disk-encryption-with-remote.html)
* [crypt-wait for dracut](https://bitbucket.org/bmearns/dracut-crypt-wait/src)
* [Dracut crypt-ssh](https://github.com/dracut-crypt-ssh/dracut-crypt-ssh)
* [Dracut sshd](https://github.com/gsauthof/dracut-sshd)
* [Dracut documentation](https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html)

Loading…
Cancel
Save