
Macchina virtuale Linux lato client in esecuzione nel browser tramite WebAssembly, con rete Tailscale, immagini personalizzate basate su Dockerfile e supporto per sfide CTF per l'educazione e lo sviluppo della sicurezza.
Questo repository contiene il codice sorgente per https://webvm.io, una macchina virtuale Linux che gira nel tuo browser.
Prova il nuovo ambiente grafico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM è un ambiente virtuale senza server che gira interamente lato client in HTML5/WebAssembly. È progettato per essere compatibile con l'ABI Linux ed esegue una distribuzione Debian non modificata, inclusi molti toolchain di sviluppo nativi.
WebVM è alimentato dal motore di virtualizzazione CheerpX, che fornisce:
[!NOTE] Visita https://webvm.io per iniziare immediatamente nel tuo browser. Nessuna configurazione richiesta.
Per configurazione locale, build personalizzate di immagini e indicazioni su fork/deploy, consulta Sviluppo e personalizzazione.
WebVM supporta l'integrazione con Tailscale. In questo modo la VM del tuo browser può raggiungere la tua rete privata e, con un nodo di uscita, anche internet pubblico.
[!NOTE] Alcune operazioni di rete di basso livello (in particolare ICMP usato da
ping) non sono attualmente disponibili in questo ambiente. Per i controlli di connettività, usacurlowget.
WebVM ora ha accesso a tutte le macchine nella tua rete Tailscale!
[!TIP] Su connessioni più lente potrebbe esserci un breve ritardo prima dell'inizializzazione. Lo stato della connessione è mostrato come un punto colorato sul pulsante: arancione = rete locale, verde = internet globale. Il testo del pulsante mostra il tuo indirizzo IP Tailscale una volta connesso.
Per accedere a internet pubblico da WebVM, configura un Nodo di uscita su un altro dispositivo nella tua rete Tailscale:
In alternativa al login interattivo, aggiungi la tua chiave di autenticazione Tailscale al frammento dell'URL:
https://webvm.io/#authKey=<your-ephemeral-key>
Questo è equivalente all'opzione --login-server di Tailscale.
[!TIP] Se hai anche bisogno di un server di controllo personalizzato, aggiungi
controlUrlnello stesso frammento dell'URL e separa i valori con&, ad esempio:#authKey=...&controlUrl=....
Supportiamo anche headscale, un'implementazione open source self-hosted del server di controllo Tailscale. Poiché Headscale non aggiunge intestazioni CORS per impostazione predefinita, avrai bisogno di un proxy davanti a esso. Vedi la documentazione di Headscale per la configurazione del proxy inverso per un esempio.
Una volta pronto, aggiungi la seguente riga al tuo blocco location / nel file di configurazione nginx.
if ($http_origin = "https://yourdomain.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Poi accedi a WebVM con:
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] Gli utenti hanno privilegi di root per impostazione predefinita.
sudonon è installato, ma può essere facilmente aggiunto al Dockerfile se necessario.
Questo è un flusso di lavoro semplice e adatto ai principianti. Per l'hosting locale e la personalizzazione, vedi sotto Servizio locale e configurazione dell'immagine.
Forka il repository di WebVM per distribuire la tua versione su GitHub Pages:
Deploy dalle Actionsdeploy_to_github_pages
Lo stesso workflow Deploy costruisce anche immagini disco .ext2 personalizzate da un Dockerfile. Puoi puntarlo a dockerfiles/debian_mini o a un altro Dockerfile, quindi pubblicare il risultato come asset di Release su GitHub o distribuire la build Pages dal tuo fork.
[!NOTE]
dockerfiles/debian_largeè un'immagine troppo grande per GitHub Pages.
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/Questo repository include una directory persistente custom-disk-images/ per file .ext2 locali.
Per usare l'immagine Debian mini ufficiale, scaricala dalle Release:
debian_mini_20230519_5022088024.ext2
Puoi anche copiare un'immagine che hai costruito tu stesso.
Modifica 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
Poi apri http://127.0.0.1:8081 e goditi la tua WebVM locale!
Per l'ambiente desktop Alpine completo, vedi leaningtech/alpine-image.
Per maggiori dettagli, vedi Documentazione immagini personalizzate CheerpX.
[!TIP] Per un REPL Python3, il workflow
Deploytiene conto delCMDspecificato nel Dockerfile.Per costruire un REPL puoi semplicemente cambiare
CMD [ "/bin/bash" ]inCMD [ "/usr/bin/python3" ]e distribuire.
Per accedere a Claude AI, hai bisogno di una chiave API. Segui questi passaggi per iniziare:
"Risolvi la sfida CTF in /home/user/chall1.bin. Nota che il binario legge da stdin."
Importante: La tua chiave API è privata e non dovrebbe mai essere condivisa. Non abbiamo accesso alla tua chiave; viene memorizzata solo localmente nel tuo browser.
Segnala problemi: Usa GitHub Issues per segnalare bug o richiedere funzionalità.
Chatta con noi: Unisciti alla nostra community Discord per discutere di WebVM, condividere idee e ricevere aiuto.
Articoli e risorse:
Esempio di distribuzione:
Tecnologia alla base di WebVM:
Questo progetto è alimentato da:
Versionamento:
WebVM utilizza il pacchetto NPM CheerpX, che viene aggiornato a ogni release.
Ogni build è immutabile. Se una versione specifica funziona bene per te oggi, continuerà a funzionare per sempre.
WebVM è rilasciato sotto la Licenza Apache, Versione 2.0.
Sei libero di utilizzare, modificare e ridistribuire i contenuti di questo repository.
La distribuzione pubblica di CheerpX è fornita così com'è ed è gratuita per esplorazione tecnologica, test e uso da parte di privati. Qualsiasi altro uso da parte di organizzazioni, inclusi no-profit, università e settore pubblico, richiede una licenza. Scaricare una build di CheerpX allo scopo di ospitarla altrove non è consentito senza una licenza commerciale.
Leggi di più qui sulle nostre pratiche di licenza.
Se desideri costruire un prodotto basato su CheerpX/WebVM, consulta le nostre altre opzioni di licenza: Licenze CheerpX o contattaci: [email protected]