
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: