documentation/procédures/administration_vm_sans_root.md

5.7 KiB

Introduction

Comme beaucoup d'infrastructures d'hébergement, Libre en Communs à mis en pratique les politiques suivantes:

  • Elle réduisent la surface d'attaque de l'hôte faisant tourner les machines virtuelles en faisant en sorte que le minimum d'applications ou de services y soient installés.

  • Elle ne laisse pas l'accès root à tout le monde.

  • Elles permettent à beaucoup de monde d'avoir accès à des machines virtuelles.

Le fait que ce soit pertinent ou pas dépend de la situation et des buts des projets qui utilisent l'infrastructure. Il y'a pas mal de manières différentes de faire et chacunes ont leurs avantages et désavantages.

Un des désavantages avec cette approche est qu'on ne peut pas facilement installer une distribution non supportée par l'infrastructure, ou installer une distribution existante d'une façon non supportée par l'infrastructure.

Par exemple si on à du code pour créer une image Trisquel avec debootstrap, ou une image Guix avec Guix, il va falloir le faire tourner dans une machine virtuelle.

Ce document va regarder différentes approches pour contourner ce problème.

Roles et permissions

L'infrastructure utilise libvirt, notamment libvirt QEMU. LXC est aussi présent mais pas utilisé.

Certaines personnes on un accès root aux machines physiques et peuvent tout faire.

D'autres ont un shell (sans accès root) et un accès direct à libvirt par SSH. Pour l'instant l'accès shell permet aussi d'utiliser virsh, mais ce ne sera plus le cas dans le futur.

D'autres personnes ont seulement un accès SSH dans une ou plusieurs machines virtuelles.

Outils disponibles

On à une machine virtuelle Trisquel generic_trisquel.a-lec.org qui peut facilement être clonée par une personne avec un accès libvirt. Une fois clonée et l'accès SSH activé, on à 50GiB d'espace dedans.

Les personnes qui ont un accès libvirt ne doivent pas créer des VM avec une carte graphique pour des VM qui vont tourner en production car ça donne accès à la VM à n'importe quelle personne qui à un shell sur la machine physique[1].

Vu que l'accès shell ne va plus impliquer l'accès à libvirt dans le futur, et que ne pas avoir de carte graphique virtuelle protège aussi de l'accès par du code qui tourne sur d'autres comptes n'ayant pas accès à libvirt, il vaux mieux utiliser le port série.

Utiliser la VM generic_trisquel.a-lec.org

Si on à un accès à libvirt on peut se loguer dedans avec l'utilisateurice admin666 et 'sudo su' marche sans mot de passe. Pour ça faut utiliser le port série. A noter que c'est aussi disponible (et bien plus fiable) si on passe par SSH et un shell sur la machine avec la commande suivante:

virsh -c qemu:///system console generic_trisquel.a-lec.org

Commandes virsh intéressantes

Si on à un accès à libvirt on peut cloner une machine virtuelle avec virt-manager, ou cloner des disques virtuels en ligne de commande avec la command vol-clone de virsh. Par contre j'ai pas trouvé comment renomer un disque virtuel. Il faut donc le copier et le déléter après. A noter que les copies peuvent mettre un certain temps (~ 10 minutes pour 50 GiB).

On peut aussi augmenter la taille du disque virtuel d'une VM éteinte avec la commande vol-resize de virsh et d'une VM allumée avec la commande blockresize de virsh.

Utiliser un iso netinstall avec un port série.

Pas mal de medias d'installeurs n'activent pas le port série par défaut, sinon ça risquerait de casser certaines tablettes brailles très chères (ça l'a fait par le passé).

Et taper des commandes à l'aveugle dans virt-manager ne marche pas quand la carte graphique virtuelle est désactivée, du coup on doit utiliser un script à la place.

Voici un script qui active le port série sur une netinstall Trisquel 11.0 pour x86_64: #!/bin/sh # Copyright (C) 2023 Denis 'GNUtoo' Carikli # SPDX-License-Identifier: GPL-3.0-or-later virsh -c qemu:///system send-key trisquel-installer 15 # TAB virsh -c qemu:///system send-key trisquel-installer 46 # C virsh -c qemu:///system send-key trisquel-installer 24 # O virsh -c qemu:///system send-key trisquel-installer 49 # N virsh -c qemu:///system send-key trisquel-installer 31 # S virsh -c qemu:///system send-key trisquel-installer 24 # O virsh -c qemu:///system send-key trisquel-installer 38 # L virsh -c qemu:///system send-key trisquel-installer 18 # E virsh -c qemu:///system send-key trisquel-installer 13 # = virsh -c qemu:///system send-key trisquel-installer 20 # T virsh -c qemu:///system send-key trisquel-installer 20 # T virsh -c qemu:///system send-key trisquel-installer 21 # Y virsh -c qemu:///system send-key trisquel-installer 58 # CAPSLOCK virsh -c qemu:///system send-key trisquel-installer 31 # S virsh -c qemu:///system send-key trisquel-installer 11 # 0 virsh -c qemu:///system send-key trisquel-installer 28 # ENTER

Il faut attendre à peu près une seconde et lancer le script. Trisquel-installer est le nom de la VM dans libvirt sur mes machines, donc il faut ajuster ça.

Autres distributions

Trisquel à des paquets pour debootstrap et guix. L'article CrossDistroBootstrap[2] permet de savoir quelles distributions peuvent être installées avec ça. Pour que ça marche il faut aussi attacher un second disque virtuel à la machine virtuelle car dans generic_trisquel.a-lec.org la partition principale prend tout l'espace du disque.

Références

[1]https://github.com/virt-manager/virt-manager/issues/343 [2]https://libreplanet.org/wiki/Group:Software/FSDG_distributions/CrossDistroBootstrap