
Framework de manipulação de máquinas virtuais
Mofos é uma ferramenta projetada para criar, executar e gerenciar máquinas virtuais. Ela utiliza Libvirt/QEMU/KVM e Python, sendo compatível com qualquer distribuição Linux. Fortemente inspirado pelo Qubes OS (https://www.qubes-os.org/), o Mofos visa replicar muitos dos seus recursos.
A ferramenta foi extensivamente testada no Debian com máquinas virtuais baseadas em Debian. Embora outras distribuições Linux devam funcionar, pode ser necessária alguma configuração adicional. Mais detalhes serão adicionados.
O Mofos oferece uma variedade de recursos focados no gerenciamento seguro de máquinas virtuais, incluindo:
Uma máquina mofos consiste em dois discos combinados usando overlayfs. O primeiro disco, conhecido como camada inferior, é um disco de template somente leitura, enquanto o segundo disco armazena todas as alterações feitas pela máquina virtual. Este disco de template é compartilhado entre várias máquinas virtuais. Como resultado, criar uma nova máquina virtual requer apenas clonar um disco vazio que já está particionado para armazenar os dados modificados. Essa abordagem garante que novas máquinas virtuais possam ser criadas rapidamente, ao mesmo tempo que permite que o template seja atualizado de forma independente. Quaisquer atualizações no template terão efeito para as máquinas virtuais dependentes no próximo reboot.
Dependendo da distribuição Linux, o Makefile pode ser utilizado para gerar um pacote deb ou instalar os arquivos diretamente.```
make deb
apt install ./mofos-VERSION.deb
Durante a instalação via `apt`, várias configurações serão solicitadas. As opções padrão podem, em geral, ser aceitas. A única configuração que requer atenção é o endereço de sub-rede usado pela rede libvirt do mofos (padrão: `192.168.90.0/24`).
OU
Instale as seguintes dependências:
- 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
Dependendo da distribuição, os ficheiros Python copiados para /usr/lib/python3/dist-packages podem não ser detetados pelo intérprete Python e devem ser colocados noutro local. Por exemplo, no Fedora, os ficheiros Python devem ser copiados para /usr/lib/python3.11/site-packages.
[!WARNING] Atenção, a partir do Debian trixie, o
xprajá não é empacotado; é necessário instalá-lo manualmente a partir dos seus repositórios personalizados. Consulte https://github.com/Xpra-org/xpra/wiki/Download#-for-debian-based-distributions para obter instruções detalhadas.
O Mofos utiliza a sessão de sistema QEMU/KVM; portanto, para permitir que o comando virsh aceda às máquinas virtuais e aos recursos relacionados, defina a variável de ambiente LIBVIRT_DEFAULT_URI para qemu:///system:```console
export LIBVIRT_DEFAULT_URI=qemu:///system
### Considerações de segurança
O uso de sessões de sistema QEMU/KVM melhora o isolamento entre o host e as máquinas virtuais convidadas, executando instâncias qemu sob um usuário dedicado (`libvirt-qemu`) e aplicando perfis de segurança específicos a cada instância.
No entanto, por padrão, usuários comuns não podem interagir com o socket de sistema do `libvirtd` para gerenciar máquinas, redes e outros recursos. Para conseguir acesso, os usuários devem ser membros do grupo Unix libvirt ou usar sudo. Historicamente, vulnerabilidades de escalonamento local de privilégios exploraram a associação ao grupo libvirt para obter privilégios de root.
Para mitigar esses riscos, este repositório fornece um perfil AppArmor reforçado para o processo `libvirtd` em sistemas que usam AppArmor. Esse perfil restringe significativamente onde o `libvirtd` pode gravar arquivos e quais programas ele pode executar.
Além disso, regras `polkit` são incluídas para controlar ainda mais as ações permitidas aos membros do grupo `libvirt`.
Observe que os perfis AppArmor são empacotados no pacote `deb`, mas não são instalados pelo alvo `install_files` do Makefile e, portanto, devem ser instalados separadamente.
## Configuração do Mofos
O Mofos requer um arquivo de configuração localizado em `$HOME/.config/mofos/config.toml` com configurações mínimas para funcionar corretamente. Um exemplo mínimo de configuração pode ser encontrado em `/usr/share/mofos/config.minimal.toml`, enquanto uma configuração mais abrangente está documentada em `/usr/share/mofos/config.sample.toml`.
O seguinte erro indica que o arquivo de configuração não foi encontrado:```
[-] Copy the sample configuration file from /usr/share/mofos/config.minimal.toml to ~/.config/mofos/config.toml
O seguinte erro indica que o usuário atual não é membro do grupo libvirt:``` [-] libvirtError("authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'")
As principais definições de configuração a personalizar nos arquivos de configuração são as seguintes:
- key (caminho): O arquivo de chave privada SSH usado para acessar as máquinas virtuais. Recomenda-se criar uma chave dedicada para esse fim.
- user (string): O nome de usuário para acesso SSH às máquinas virtuais.
- root_password (valor com hash): A senha raiz com hash a ser definida durante a instalação de um novo template.
- root_ssh_pubkey (string): A chave pública SSH a ser instalada no diretório do usuário root durante a instalação do template.
Além disso, os seguintes parâmetros devem ser configurados para a instalação do template:
- ntp
- dns (opcional se um proxy for fornecido)
- proxy
## Instalar um template
### Configurar o firewall