documentation/procédures/administration_vm_sans_root.md

143 lines
5.7 KiB
Markdown
Raw Normal View History

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 pour
trisquel-netinst_11.0_amd64.iso:
#!/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