
Framework de manipulation de machines virtuelles
Mofos est un outil conçu pour créer, exécuter et gérer des machines virtuelles. Il s'appuie sur Libvirt/QEMU/KVM et Python, ce qui le rend compatible avec toute distribution Linux. Fortement inspiré de Qubes OS (https://www.qubes-os.org/), Mofos vise à reproduire nombre de ses fonctionnalités.
L'outil a été largement testé sur Debian avec des machines virtuelles basées sur Debian. Bien que d'autres distributions Linux devraient fonctionner, une configuration supplémentaire peut être nécessaire. Plus de détails à venir.
Mofos propose un ensemble de fonctionnalités axées sur la gestion sécurisée des machines virtuelles, notamment :
Une machine mofos se compose de deux disques combinés à l'aide d'overlayfs. Le premier disque, appelé couche inférieure, est un disque modèle en lecture seule, tandis que le second disque stocke toutes les modifications apportées par la machine virtuelle. Ce disque modèle est partagé entre plusieurs machines virtuelles. Par conséquent, créer une nouvelle machine virtuelle ne nécessite que le clonage d'un disque vide déjà partitionné pour contenir les données modifiées. Cette approche garantit que les nouvelles machines virtuelles peuvent être créées rapidement, tout en permettant de mettre à jour le modèle indépendamment. Toute mise à jour du modèle prendra effet sur les machines virtuelles dépendantes lors de leur prochain redémarrage.
Selon la distribution Linux, le Makefile peut être utilisé pour générer un paquet deb ou installer directement les fichiers.```
make deb
apt install ./mofos-VERSION.deb
Lors de l'installation via `apt`, divers paramètres vous seront demandés. Les options par défaut peuvent généralement être acceptées. Le seul paramètre qui requiert votre attention est l'adresse de sous-réseau utilisée par le réseau libvirt mofos (par défaut : `192.168.90.0/24`).
OU
Installez les dépendances suivantes :
- guestfs-tools
- libnotify-bin
- libvirt
- libvirt-clients
- libvirt-daemon
- make
- python3-click
- python3-click-completion
- python3-colorama
- python3-cryptography
- python3-dbus
- python3-jinja2
- python3-lxml
- python3-prettytable
- python3-pyroute2
- python3-tqdm
- qemu-system-common
- qemu-system-modules-spice
- socat
- spice-client-gtk
- sudo
- virtinst
- virt-install
- virtiofsd
- virt-manager
- virt-viewer```
make install_files
Selon la distribution, les fichiers Python copiés dans /usr/lib/python3/dist-packages peuvent ne pas être détectés par l'interpréteur Python et doivent être placés ailleurs. Par exemple, sur Fedora, les fichiers Python doivent être copiés dans /usr/lib/python3.11/site-packages.
[!WARNING] Attention, depuis Debian trixie,
xpran'est plus empaqueté, vous devez l'installer manuellement depuis ses dépôts personnalisés. Voir https://github.com/Xpra-org/xpra/wiki/Download#-for-debian-based-distributions pour des instructions détaillées.
Mofos utilise la session système QEMU/KVM, donc pour permettre à la commande virsh d'accéder aux machines virtuelles et aux ressources associées, définissez la variable d'environnement LIBVIRT_DEFAULT_URI sur qemu:///system :```console
export LIBVIRT_DEFAULT_URI=qemu:///system
### Considérations de sécurité
L'utilisation de sessions système QEMU/KVM améliore l'isolation entre les machines virtuelles hôte et invitées en exécutant les instances qemu sous un utilisateur dédié (`libvirt-qemu`) et en appliquant des profils de sécurité spécifiques à chaque instance.
Cependant, par défaut, les utilisateurs ordinaires ne peuvent pas interagir avec le socket système `libvirtd` pour gérer les machines, les réseaux et d'autres ressources. Pour obtenir l'accès, les utilisateurs doivent soit être membres du groupe Unix libvirt, soit utiliser sudo. Historiquement, des vulnérabilités d'élévation de privilèges locaux ont exploité l'appartenance au groupe libvirt pour obtenir les privilèges root.
Pour atténuer ces risques, ce dépôt fournit un profil AppArmor renforcé pour le processus `libvirtd` sur les systèmes utilisant AppArmor. Ce profil restreint considérablement les endroits où `libvirtd` peut écrire des fichiers et les programmes qu'il peut exécuter.
De plus, des règles `polkit` sont incluses pour mieux contrôler les actions autorisées pour les membres du groupe `libvirt`.
Notez que les profils AppArmor sont empaquetés dans le paquet `deb` mais ne sont pas installés par la cible `install_files` du Makefile et doivent donc être installés séparément.
## Configuration de Mofos
Mofos nécessite un fichier de configuration situé dans `$HOME/.config/mofos/config.toml` avec des paramètres minimaux pour fonctionner correctement. Un exemple de configuration minimale se trouve dans `/usr/share/mofos/config.minimal.toml`, tandis qu'une configuration plus complète est documentée dans `/usr/share/mofos/config.sample.toml`.
L'erreur suivante indique que le fichier de configuration n'a pas été trouvé :```
[-] Copy the sample configuration file from /usr/share/mofos/config.minimal.toml to ~/.config/mofos/config.toml
L'erreur suivante indique que l'utilisateur actuel n'est pas membre du groupe libvirt :``` [-] libvirtError("authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'")
Les principaux paramètres de configuration à personnaliser dans les fichiers de configuration sont les suivants :
- key (chemin): Le fichier de clé privée SSH utilisé pour accéder aux machines virtuelles. Il est recommandé de créer une clé dédiée à cet effet.
- user (chaîne): Le nom d'utilisateur pour l'accès SSH aux machines virtuelles.
- root_password (valeur hachée): Le mot de passe root haché à définir lors de l'installation d'un nouveau modèle.
- root_ssh_pubkey (chaîne): La clé publique SSH à installer dans le répertoire de l'utilisateur root lors de l'installation du modèle.