
Máquina virtual Linux do lado do cliente executada no navegador via WebAssembly, com rede Tailscale, imagens personalizadas baseadas em Dockerfile e suporte a desafios CTF para educação e desenvolvimento em segurança.
Este repositório hospeda o código-fonte do https://webvm.io, uma máquina virtual Linux que é executada no seu navegador.
Experimente o novo ambiente gráfico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM é um ambiente virtual sem servidor que é executado totalmente no lado do cliente em HTML5/WebAssembly. Ele foi projetado para ser compatível com a ABI do Linux e executa uma distribuição Debian não modificada, incluindo muitas toolchains de desenvolvimento nativas.
WebVM é alimentado pelo motor de virtualização CheerpX, que fornece:
[!NOTE] Visite https://webvm.io para começar imediatamente no seu navegador. Nenhuma configuração necessária.
Para configuração local, criação de imagens personalizadas e orientações sobre fork/implantação, consulte Desenvolvimento e Personalização.
WebVM oferece suporte à integração com Tailscale. Dessa forma, sua VM no navegador pode acessar sua rede privada e, com um nó de saída (exit node), também a internet pública.
[!NOTE] Algumas operações de rede de baixo nível (especialmente ICMP usado pelo
ping) não estão disponíveis atualmente neste ambiente. Para verificações de conectividade, usecurlouwget.
Agora o WebVM tem acesso a todas as máquinas da sua rede Tailscale!
[!TIP] Em conexões mais lentas, pode haver um pequeno atraso antes da inicialização. O status da conexão é exibido como um ponto colorido no botão: laranja = rede local, verde = global/internet. O texto do botão mostra seu endereço IP do Tailscale assim que conectado.
Para acessar a internet pública a partir do WebVM, configure um Nó de Saída (Exit Node) em outro dispositivo da sua rede Tailscale:
Como alternativa ao login interativo, adicione sua chave de autenticação do Tailscale ao fragmento da URL:
https://webvm.io/#authKey=<your-ephemeral-key>
Isso é equivalente à opção --login-server do Tailscale.
[!TIP] Se você também precisar de um servidor de controle personalizado, adicione
controlUrlno mesmo fragmento da URL e separe os valores com&, por exemplo:#authKey=...&controlUrl=...
Também oferecemos suporte ao headscale, uma implementação de código aberto auto-hospedada do servidor de controle do Tailscale. Como o Headscale não adiciona cabeçalhos CORS por padrão, você precisará de um proxy na frente dele. Consulte a documentação de configuração de proxy reverso do Headscale para ver um exemplo.
Quando estiver pronto, adicione a seguinte linha ao bloco location / do seu arquivo de configuração do nginx.
if ($http_origin = "https://yourdomain.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Em seguida, acesse o WebVM com:
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] Os usuários têm privilégios de root por padrão. O
sudonão está instalado, embora possa ser facilmente adicionado ao Dockerfile, se necessário.
Este é um fluxo de trabalho simples e amigável para iniciantes. Para hospedagem local e personalização, veja abaixo Servidor Local e Configuração de Imagem.
Faça um fork do repositório WebVM para implantar sua própria versão no GitHub Pages:
Deploy em Actionsdeploy_to_github_pages
O mesmo fluxo de trabalho Deploy também cria imagens de disco .ext2 personalizadas a partir de um Dockerfile. Você pode apontá-lo para dockerfiles/debian_mini ou outro Dockerfile, e então publicar o resultado como um artefato de Release do GitHub ou implantar a compilação do Pages a partir do seu fork.
[!NOTE]
dockerfiles/debian_largeé uma imagem muito grande para o GitHub Pages.
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/Este repositório inclui um diretório persistente custom-disk-images/ para arquivos .ext2 locais.
Para usar a imagem Debian mini oficial, faça o download dela em Releases:
debian_mini_20230519_5022088024.ext2
Você também pode copiar uma imagem que você mesmo criou.
Edite config_public_terminal.js:
export const diskImageUrl =
"/custom-disk-images/debian_mini_20230519_5022088024.ext2";
export const diskImageType = "bytes";
npm install
npm run build
nginx -p . -c nginx.conf
Em seguida, abra http://127.0.0.1:8081 e aproveite seu WebVM local!
Para o ambiente de área de trabalho Alpine completo, veja leaningtech/alpine-image.
Para mais detalhes, consulte a documentação de Imagens Personalizadas do CheerpX.
[!TIP] Para REPL Python3, o fluxo de trabalho
Deployleva em consideração oCMDespecificado no Dockerfile.Para criar um REPL, você pode simplesmente alterar
CMD [ "/bin/bash" ]paraCMD [ "/usr/bin/python3" ]e implantar.
Para acessar o Claude AI, você precisa de uma chave de API. Siga estas etapas para começar:
"Resolva o desafio CTF em /home/user/chall1.bin. Note que o binário lê do stdin."
Importante: Sua chave de API é privada e nunca deve ser compartilhada. Não temos acesso à sua chave, ela é armazenada apenas localmente no seu navegador.
Relatar problemas: Use o GitHub Issues para relatar bugs ou solicitar funcionalidades.
Converse conosco: Junte-se à nossa comunidade no Discord para discutir o WebVM, compartilhar ideias e obter ajuda.
Artigos e Recursos:
Exemplo de Implantação:
Tecnologia Por Trás do WebVM:
Este projeto é alimentado por:
Versionamento:
O WebVM usa o pacote NPM CheerpX, que é atualizado a cada lançamento.
Cada compilação é imutável. Se uma versão específica funcionar bem para você hoje, ela continuará funcionando para sempre.
O WebVM é lançado sob a Licença Apache, Versão 2.0.
Você é bem-vindo para usar, modificar e redistribuir o conteúdo deste repositório.
A implantação pública do CheerpX é fornecida como está e é gratuita para exploração tecnológica, testes e uso por indivíduos. Qualquer outro uso por organizações, incluindo sem fins lucrativos, academia e setor público, requer uma licença. O download de uma compilação do CheerpX com o objetivo de hospedá-la em outro lugar não é permitido sem uma licença comercial.
Leia mais aqui sobre nossas práticas de licenciamento.
Se você deseja construir um produto baseado no CheerpX/WebVM, consulte nossas outras opções de licenciamento: Licenciamento CheerpX ou entre em contato: [email protected]