
Machine virtuelle Linux côté client s'exécutant dans le navigateur via WebAssembly, avec réseau Tailscale, images personnalisées basées sur Dockerfile et prise en charge des défis CTF pour l'éducation et le développement en sécurité.
Ce dépôt héberge le code source de https://webvm.io, une machine virtuelle Linux qui s'exécute dans votre navigateur.
Essayez le nouvel environnement graphique Alpine / Xorg / i3 : https://webvm.io/alpine.html
WebVM est un environnement virtuel sans serveur fonctionnant entièrement côté client en HTML5/WebAssembly. Il est conçu pour être compatible avec l'ABI Linux et exécute une distribution Debian non modifiée, y compris de nombreuses chaînes d'outils de développement natives.
WebVM est propulsé par le moteur de virtualisation CheerpX, qui fournit :
[!NOTE] Visitez https://webvm.io pour commencer immédiatement dans votre navigateur. Aucune configuration requise.
Pour l'installation locale, les constructions d'images personnalisées et les instructions de fork/déploiement, consultez Développement et personnalisation.
WebVM prend en charge l'intégration Tailscale. Ainsi, votre VM de navigateur peut atteindre votre réseau privé et, avec un nœud de sortie, également Internet public.
[!NOTE] Certaines opérations réseau de bas niveau (notamment ICMP utilisé par
ping) ne sont actuellement pas disponibles dans cet environnement. Pour les vérifications de connectivité, utilisezcurlouwget.
WebVM a désormais accès à toutes les machines de votre réseau Tailscale !
[!TIP] Sur les connexions plus lentes, il peut y avoir un court délai avant l'initialisation. L'état de la connexion est indiqué par un point coloré sur le bouton : orange = réseau local, vert = global/internet. Le texte du bouton affiche votre adresse IP Tailscale une fois connecté.
Pour accéder à Internet public depuis WebVM, configurez un nœud de sortie sur un autre appareil de votre réseau Tailscale :
En alternative à la connexion interactive, ajoutez votre clé d'authentification Tailscale au fragment d'URL :
https://webvm.io/#authKey=<your-ephemeral-key>
Ceci est équivalent à l'option --login-server de Tailscale.
[!TIP] Si vous avez également besoin d'un serveur de contrôle personnalisé, ajoutez
controlUrldans le même fragment d'URL et séparez les valeurs par&, par exemple :#authKey=...&controlUrl=....
Nous prenons également en charge headscale, une implémentation open source auto-hébergée du serveur de contrôle Tailscale. Comme Headscale n'ajoute pas d'en-têtes CORS par défaut, vous aurez besoin d'un proxy devant lui. Consultez la documentation de configuration du proxy inverse Headscale pour un exemple.
Une fois prêt, ajoutez la ligne suivante à votre bloc location / dans votre fichier de configuration nginx.
if ($http_origin = "https://yourdomain.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Accédez ensuite à WebVM avec :
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] Les utilisateurs ont des privilèges root par défaut.
sudon'est pas installé, mais il peut être facilement ajouté au Dockerfile si nécessaire.
Il s'agit d'un workflow simple et adapté aux débutants. Pour l'hébergement local et la personnalisation, voir ci-dessous Service local et configuration d'image.
Forkez le dépôt WebVM pour déployer votre propre version sur GitHub Pages :
Deploy depuis Actionsdeploy_to_github_pages
Le même workflow Deploy construit également des images disque .ext2 personnalisées à partir d'un Dockerfile. Vous pouvez le pointer vers dockerfiles/debian_mini ou un autre Dockerfile, puis soit publier le résultat comme un artefact GitHub Release, soit déployer la construction Pages depuis votre fork.
[!NOTE]
dockerfiles/debian_largeest une image trop volumineuse pour GitHub Pages.
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/Ce dépôt inclut un répertoire persistant custom-disk-images/ pour les fichiers .ext2 locaux.
Pour utiliser l'image Debian mini officielle, téléchargez-la depuis les Releases :
debian_mini_20230519_5022088024.ext2
Vous pouvez également copier une image que vous avez construite vous-même.
Modifiez 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
Ouvrez ensuite http://127.0.0.1:8081 et profitez de votre WebVM local !
Pour l'environnement de bureau Alpine complet, voir leaningtech/alpine-image.
Pour plus de détails, consultez la documentation des images personnalisées CheerpX.
[!TIP] Pour un REPL Python3, le workflow
Deployprend en compte leCMDspécifié dans le Dockerfile.Pour construire un REPL, vous pouvez simplement changer
CMD [ "/bin/bash" ]enCMD [ "/usr/bin/python3" ]et déployer.
Pour accéder à Claude AI, vous avez besoin d'une clé API. Suivez ces étapes pour commencer :
« Résolvez le défi CTF dans /home/user/chall1.bin. Notez que le binaire lit depuis l'entrée standard. »
Important : Votre clé API est privée et ne doit jamais être partagée. Nous n'avons pas accès à votre clé, elle est uniquement stockée localement dans votre navigateur.
Signaler des problèmes : Utilisez les Issues GitHub pour signaler des bugs ou demander des fonctionnalités.
Discutez avec nous : Rejoignez notre communauté Discord pour discuter de WebVM, partager des idées et obtenir de l'aide.
Articles et ressources :
Exemple de déploiement :
Technologie derrière WebVM :
Ce projet est propulsé par :
Versioning :
WebVM utilise le package NPM CheerpX, qui est mis à jour à chaque version.
Chaque build est immuable. Si une version spécifique fonctionne bien pour vous aujourd'hui, elle continuera de fonctionner pour toujours.
WebVM est distribué sous la licence Apache, version 2.0.
Vous êtes libre d'utiliser, modifier et redistribuer le contenu de ce dépôt.
Le déploiement public de CheerpX est fourni en l'état et est gratuit pour l'exploration technologique, les tests et l'utilisation par des particuliers. Toute autre utilisation par des organisations, y compris à but non lucratif, académique et du secteur public, nécessite une licence. Télécharger une version de CheerpX dans le but de l'héberger ailleurs n'est pas autorisé sans une licence commerciale.
En savoir plus ici sur nos pratiques de licence.
Si vous souhaitez construire un produit basé sur CheerpX/WebVM, veuillez consulter nos autres options de licence : Licence CheerpX ou contactez-nous : [email protected]