diff --git a/procédures/aministration_vm_sans_root.md b/procédures/aministration_vm_sans_root.md new file mode 100644 index 0000000..0ed5e8b --- /dev/null +++ b/procédures/aministration_vm_sans_root.md @@ -0,0 +1,142 @@ +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 +