
Client-seitige Linux-Virtual-Maschine, die im Browser über WebAssembly läuft, mit Tailscale-Netzwerk, Dockerfile-basierten benutzerdefinierten Images und CTF-Challenge-Unterstützung für Sicherheitsausbildung und -entwicklung.
Dieses Repository enthält den Quellcode für https://webvm.io, eine Linux-VM, die in Ihrem Browser läuft.
Probieren Sie die neue Alpine-/Xorg-/i3-Grafikumgebung aus: https://webvm.io/alpine.html
WebVM ist eine serverlose virtuelle Umgebung, die vollständig clientseitig in HTML5/WebAssembly läuft. Es ist für Linux-ABI-Kompatibilität ausgelegt und führt eine unveränderte Debian-Distribution mit vielen nativen Entwicklungswerkzeugen aus.
WebVM wird von der CheerpX-Virtualisierungs-Engine betrieben, die Folgendes bietet:
[!NOTE] Besuchen Sie https://webvm.io, um sofort in Ihrem Browser zu starten. Keine Einrichtung erforderlich.
Für lokale Einrichtung, benutzerdefinierte Image-Erstellung und Fork/Deploy-Anleitung siehe Entwicklung & Anpassung.
WebVM unterstützt die Tailscale-Integration. So kann Ihre Browser-VM Ihr privates Netzwerk erreichen und, mit einem Exit-Node, auch das öffentliche Internet.
[!NOTE] Einige Low-Level-Netzwerkoperationen (insbesondere ICMP, das von
pingverwendet wird) sind in dieser Umgebung derzeit nicht verfügbar. Verwenden Sie für Konnektivitätsprüfungencurloderwget.
WebVM hat jetzt Zugriff auf alle Maschinen in Ihrem Tailscale-Netzwerk!
[!TIP] Bei langsameren Verbindungen kann es zu einer kurzen Verzögerung vor der Initialisierung kommen. Der Verbindungsstatus wird als farbiger Punkt auf der Schaltfläche angezeigt: Orange = lokales Netzwerk, Grün = global/Internet. Der Schaltflächentext zeigt nach der Verbindung Ihre Tailscale-IP-Adresse an.
Um aus WebVM auf das öffentliche Internet zuzugreifen, richten Sie auf einem anderen Gerät in Ihrem Tailscale-Netzwerk einen Exit-Node ein:
Als Alternative zur interaktiven Anmeldung fügen Sie Ihren Tailscale-Authentifizierungsschlüssel zum URL-Fragment hinzu:
https://webvm.io/#authKey=<your-ephemeral-key>
Dies entspricht der Option --login-server von Tailscale.
[!TIP] Wenn Sie auch einen benutzerdefinierten Steuerungsserver benötigen, fügen Sie
controlUrlim selben URL-Fragment hinzu und trennen Sie die Werte mit&, z. B.:#authKey=...&controlUrl=....
Wir unterstützen auch headscale, eine selbstgehostete Open-Source-Implementierung des Tailscale-Steuerungsservers. Da Headscale standardmäßig keine CORS-Header hinzufügt, benötigen Sie einen Proxy davor. Siehe die Headscale-Reverse-Proxy-Setup-Dokumentation für ein Beispiel.
Fügen Sie dann die folgende Zeile zu Ihrem location /-Block in Ihrer nginx-Konfigurationsdatei hinzu.
if ($http_origin = "https://yourdomain.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Greifen Sie dann wie folgt auf WebVM zu:
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] Benutzer haben standardmäßig Root-Rechte.
sudoist nicht installiert, kann aber bei Bedarf einfach zum Dockerfile hinzugefügt werden.
Dies ist ein einfacher, anfängerfreundlicher Workflow. Für lokales Hosting und Anpassung siehe unten Lokales Bereitstellen & Image-Konfiguration.
Forken Sie das WebVM-Repository, um Ihre eigene Version auf GitHub Pages bereitzustellen:
Deploy-Workflow ausführen unter Actionsdeploy_to_github_pages angezeigt wird
Der gleiche Deploy-Workflow erstellt auch benutzerdefinierte .ext2-Datenträger-Images aus einem Dockerfile. Sie können ihn auf dockerfiles/debian_mini oder ein anderes Dockerfile verweisen und das Ergebnis entweder als GitHub-Release-Asset veröffentlichen oder den Pages-Build aus Ihrem Fork bereitstellen.
[!NOTE]
dockerfiles/debian_largeist ein zu großes Image für GitHub Pages.
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/ abDieses Repository enthält ein persistentes Verzeichnis custom-disk-images/ für lokale .ext2-Dateien.
Um das offizielle Debian-Mini-Image zu verwenden, laden Sie es von den Releases herunter:
debian_mini_20230519_5022088024.ext2
Sie können auch ein selbst erstelltes Image kopieren.
Bearbeiten Sie 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
Öffnen Sie dann http://127.0.0.1:8081 und genießen Sie Ihr lokales WebVM!
Für die vollständige Alpine-Desktop-Umgebung siehe leaningtech/alpine-image.
Weitere Details finden Sie in der CheerpX-Dokumentation zu benutzerdefinierten Images.
[!TIP] Für Python3-REPL berücksichtigt der
Deploy-Workflow das im Dockerfile angegebeneCMD.Um eine REPL zu erstellen, ändern Sie einfach
CMD [ "/bin/bash" ]inCMD [ "/usr/bin/python3" ]und stellen Sie bereit.
Um auf Claude AI zuzugreifen, benötigen Sie einen API-Schlüssel. Folgen Sie diesen Schritten, um loszulegen:
„Löse die CTF-Herausforderung in /home/user/chall1.bin. Beachte, dass die Binärdatei von stdin liest.“
Wichtig: Ihr API-Schlüssel ist privat und sollte niemals weitergegeben werden. Wir haben keinen Zugriff auf Ihren Schlüssel, er wird nur lokal in Ihrem Browser gespeichert.
Probleme melden: Nutzen Sie GitHub Issues, um Fehler zu melden oder Funktionen anzufragen.
Chatten Sie mit uns: Treten Sie unserer Discord-Community bei, um über WebVM zu diskutieren, Ideen auszutauschen und Hilfe zu erhalten.
Artikel & Ressourcen:
Beispielbereitstellung:
Technologie hinter WebVM:
Dieses Projekt wird angetrieben von:
Versionierung:
WebVM verwendet das CheerpX NPM-Paket, das bei jeder Veröffentlichung aktualisiert wird.
Jeder Build ist unveränderlich. Wenn eine bestimmte Version heute für Sie gut funktioniert, wird sie für immer funktionieren.
WebVM wird unter der Apache License, Version 2.0, veröffentlicht.
Sie sind herzlich eingeladen, die Inhalte dieses Repositorys zu verwenden, zu modifizieren und weiterzuverbreiten.
Die öffentliche CheerpX-Bereitstellung wird wie besehen zur Verfügung gestellt und ist kostenlos nutzbar für technologische Erkundung, Tests und Nutzung durch Einzelpersonen. Jede andere Nutzung durch Organisationen, einschließlich gemeinnütziger Organisationen, akademischer Einrichtungen und des öffentlichen Sektors, erfordert eine Lizenz. Das Herunterladen eines CheerpX-Builds zum Zweck des Hostings an anderer Stelle ist ohne kommerzielle Lizenz nicht gestattet.
Lesen Sie hier mehr über unsere Lizenzierungspraktiken.
Wenn Sie ein Produkt auf Basis von CheerpX/WebVM entwickeln möchten, sehen Sie sich bitte unsere anderen Lizenzoptionen an: CheerpX-Lizenzierung oder kontaktieren Sie uns: [email protected]