
クライアントサイドのLinux仮想マシンがWebAssemblyを介してブラウザ内で動作し、Tailscaleネットワーキング、Dockerfileベースのカスタムイメージ、およびCTFチャレンジサポートを備え、セキュリティ教育と開発向けです。
このリポジトリには、ブラウザ上で動作するLinux仮想マシンであるhttps://webvm.ioのソースコードが含まれています。
新しいAlpine/Xorg/i3グラフィカル環境をお試しください:https://webvm.io/alpine.html
WebVMは、HTML5/WebAssembly上で完全にクライアントサイドで動作するサーバーレスの仮想環境です。Linux ABI互換性を持つように設計されており、多くのネイティブ開発ツールチェーンを含む未改変のDebianディストリビューションを実行します。
WebVMはCheerpX仮想化エンジンを搭載しており、以下を提供します:
[!NOTE] https://webvm.ioにアクセスして、すぐにブラウザで使い始めてください。セットアップは不要です。
ローカルセットアップ、カスタムイメージのビルド、フォーク/デプロイのガイダンスについては、開発とカスタマイズを参照してください。
WebVMはTailscale統合をサポートしています。そのため、ブラウザVMはプライベートネットワークにアクセスでき、エグジットノードを使用すればパブリックインターネットにもアクセスできます。
[!NOTE] 一部の低レベルネットワーク操作(特に
pingで使用されるICMP)は、現在この環境では利用できません。接続確認にはcurlまたはwgetを使用してください。
これでWebVMはTailscaleネットワーク内のすべてのマシンにアクセスできます!
[!TIP] 低速な接続では、初期化前に少し遅延が発生する場合があります。接続状態はボタン上の色付きのドットで表示されます:オレンジ=ローカルネットワーク、緑=グローバル/インターネット。ボタンテキストには、接続後のTailscale IPアドレスが表示されます。
WebVMからパブリックインターネットにアクセスするには、Tailscaleネットワーク内の別のデバイスでエグジットノードをセットアップします:
インタラクティブなログインの代わりに、Tailscale認証キーをURLフラグメントに追加します:
https://webvm.io/#authKey=<your-ephemeral-key>
これはTailscaleの--login-serverオプションに相当します。
[!TIP] カスタムコントロールサーバーも必要な場合は、同じURLフラグメントに
controlUrlを追加し、値を&で区切ります。例:#authKey=...&controlUrl=...。
headscale(Tailscaleコントロールサーバーのセルフホスト型オープンソース実装)もサポートしています。HeadscaleはデフォルトでCORSヘッダーを追加しないため、その前にプロキシが必要です。例としてHeadscaleリバースプロキシ設定ドキュメントを参照してください。
準備ができたら、nginx設定ファイルのlocation /ブロックに次の行を追加します。
if ($http_origin = "https://yourdomain.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
その後、次のURLでWebVMにアクセスします:
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] ユーザーはデフォルトでroot権限を持っています。
sudoはインストールされていませんが、必要に応じてDockerfileに簡単に追加できます。
これはシンプルで初心者に優しいワークフローです。ローカルホスティングとカスタマイズについては、以下のローカルサーバーとイメージ設定を参照してください。
WebVMリポジトリをフォークして、独自のバージョンをGitHub Pagesにデプロイします:
Deployワークフローを実行 Actionsからdeploy_to_github_pagesジョブの下に表示されるURLを開く
同じDeployワークフローは、Dockerfileからカスタム.ext2ディスクイメージもビルドします。dockerfiles/debian_miniや別のDockerfileを指定し、結果をGitHubリリースアセットとして公開するか、フォークからPagesビルドをデプロイできます。
[!NOTE]
dockerfiles/debian_largeはGitHub Pagesには大きすぎるイメージです。
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/に配置このリポジトリには、ローカルの.ext2ファイル用の永続的なcustom-disk-images/ディレクトリが含まれています。
公式のDebian miniイメージを使用するには、リリースからダウンロードしてください:
debian_mini_20230519_5022088024.ext2
自分でビルドしたイメージをコピーすることもできます。
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
その後、http://127.0.0.1:8081 を開いて、ローカルのWebVMをお楽しみください!
完全なAlpineデスクトップ環境については、leaningtech/alpine-imageを参照してください。
詳細については、CheerpXカスタムイメージドキュメントを参照してください。
[!TIP] Python3 REPLの場合、
DeployワークフローはDockerfileで指定されたCMDを考慮します。REPLをビルドするには、
CMD [ "/bin/bash" ]をCMD [ "/usr/bin/python3" ]に変更してデプロイするだけです。
Claude AIにアクセスするには、APIキーが必要です。以下の手順に従って開始してください:
"/home/user/chall1.binのCTFチャレンジを解いてください。バイナリは標準入力から読み取ることに注意してください。"
重要: APIキーは非公開であり、決して共有しないでください。当社はお客様のキーにアクセスできず、ブラウザにローカルに保存されるだけです。
問題の報告: バグの報告や機能リクエストにはGitHub Issuesを使用してください。
チャット: Discordコミュニティに参加して、WebVMについて話し合い、アイデアを共有し、助けを求めてください。
記事とリソース:
デプロイ例:
WebVMを支える技術:
このプロジェクトは以下を搭載しています:
バージョニング:
WebVMはCheerpX NPMパッケージを使用しており、リリースごとに更新されます。
すべてのビルドは不変です。特定のバージョンが今日正常に動作する場合、それは永久に動作し続けます。
WebVMはApache License, Version 2.0の下で公開されています。
このリポジトリの内容は、自由に使用、変更、再配布していただけます。
パブリックなCheerpXデプロイメントは現状のまま提供され、個人による技術的な探求、テスト、使用のために無料で使用できます。非営利団体、学術機関、公共部門を含む組織によるその他の使用にはライセンスが必要です。商用ライセンスなしに、CheerpXビルドを他の場所でホスティングする目的でダウンロードすることは許可されていません。
ライセンス慣行の詳細はこちらをご覧ください。
CheerpX/WebVM上に製品を構築したい場合は、他のライセンスオプションをご覧ください:CheerpXライセンス またはお問い合わせ:[email protected]