
Marco de manipulación de máquinas virtuales.
Mofos es una herramienta diseñada para crear, ejecutar y gestionar máquinas virtuales. Utiliza Libvirt/QEMU/KVM y Python, lo que la hace compatible con cualquier distribución de Linux. Fuertemente inspirada en Qubes OS (https://www.qubes-os.org/), Mofos pretende replicar muchas de sus características.
La herramienta ha sido probada exhaustivamente en Debian con máquinas virtuales basadas en Debian. Aunque se espera que otras distribuciones de Linux funcionen, puede ser necesaria configuración adicional. Se añadirán más detalles.
Mofos proporciona una gama de características centradas en la gestión segura de máquinas virtuales, incluyendo:
Una máquina de mofos consta de dos discos combinados mediante overlayfs. El primer disco, conocido como capa inferior, es un disco de plantilla de solo lectura, mientras que el segundo disco almacena todos los cambios realizados por la máquina virtual. Este disco de plantilla se comparte entre múltiples máquinas virtuales. Como resultado, crear una nueva máquina virtual solo requiere clonar un disco vacío que ya está particionado para contener los datos modificados. Este enfoque garantiza que las nuevas máquinas virtuales puedan crearse rápidamente, al tiempo que permite actualizar la plantilla de forma independiente. Cualquier actualización de la plantilla tendrá efecto para las máquinas virtuales dependientes en su próximo reinicio.
Dependiendo de la distribución de Linux, el Makefile se puede utilizar para generar un paquete deb o instalar los archivos directamente.```
make deb
apt install ./mofos-VERSION.deb
Durante la instalación mediante `apt`, se solicitarán varios ajustes. Las opciones predeterminadas generalmente pueden aceptarse. El único ajuste que requiere atención es la dirección de subred utilizada por la red libvirt de mofos (predeterminada: `192.168.90.0/24`).
O
Instale las siguientes dependencias:
- 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
Según la distribución, es posible que el intérprete de Python no detecte los archivos Python copiados en /usr/lib/python3/dist-packages, por lo que deben colocarse en otra ubicación. Por ejemplo, en Fedora, los archivos Python deben copiarse en /usr/lib/python3.11/site-packages.
[!WARNING] Atención, desde Debian trixie,
xpraya no se distribuye como paquete; debes instalarlo manualmente desde sus repositorios personalizados. Consulta https://github.com/Xpra-org/xpra/wiki/Download#-for-debian-based-distributions para obtener instrucciones detalladas.
Mofos utiliza la sesión de sistema QEMU/KVM, por lo que para permitir que el comando virsh acceda a las máquinas virtuales y recursos relacionados, establece la variable de entorno LIBVIRT_DEFAULT_URI en qemu:///system:```console
export LIBVIRT_DEFAULT_URI=qemu:///system
### Consideraciones de seguridad
El uso de sesiones de sistema QEMU/KVM mejora el aislamiento entre las máquinas virtuales anfitrionas e invitadas al ejecutar las instancias de qemu bajo un usuario dedicado (`libvirt-qemu`) y aplicar perfiles de seguridad específicos a cada instancia.
Sin embargo, de forma predeterminada, los usuarios normales no pueden interactuar con el socket del sistema `libvirtd` para gestionar máquinas, redes y otros recursos. Para obtener acceso, los usuarios deben ser miembros del grupo Unix de libvirt o usar sudo. Históricamente, las vulnerabilidades locales de escalada de privilegios han explotado la pertenencia al grupo libvirt para obtener privilegios de root.
Para mitigar estos riesgos, este repositorio proporciona un perfil AppArmor reforzado para el proceso `libvirtd` en sistemas que usan AppArmor. Este perfil restringe significativamente dónde puede escribir archivos `libvirtd` y qué programas puede ejecutar.
Además, se incluyen reglas de `polkit` para controlar aún más las acciones permitidas a los miembros del grupo `libvirt`.
Tenga en cuenta que los perfiles AppArmor se incluyen en el paquete `deb`, pero no se instalan mediante el objetivo `install_files` del Makefile, por lo que deben instalarse por separado.
## Configuración de Mofos
Mofos requiere un archivo de configuración ubicado en `$HOME/.config/mofos/config.toml` con ajustes mínimos para funcionar correctamente. En `/usr/share/mofos/config.minimal.toml` se puede encontrar un ejemplo de configuración mínima, mientras que en `/usr/share/mofos/config.sample.toml` se documenta una configuración más completa.
El siguiente error indica que no se encontró el archivo de configuración:```
[-] Copy the sample configuration file from /usr/share/mofos/config.minimal.toml to ~/.config/mofos/config.toml
El siguiente error indica que el usuario actual no es miembro del grupo libvirt:``` [-] libvirtError("authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'")
Los ajustes de configuración principales que se deben personalizar en los archivos de configuración son los siguientes:
- key (ruta): El archivo de clave privada SSH utilizado para acceder a las máquinas virtuales. Se recomienda crear una clave dedicada para este propósito.
- user (cadena): El nombre de usuario para el acceso SSH a las máquinas virtuales.
- root_password (valor hash): La contraseña hash de root que se establecerá durante la instalación de una nueva plantilla.
- root_ssh_pubkey (cadena): La clave pública SSH que se instalará en el directorio del usuario root durante la instalación de la plantilla.