
클라이언트 측 Linux 가상 머신이 WebAssembly를 통해 브라우저에서 실행되며, Tailscale 네트워킹, Dockerfile 기반 사용자 정의 이미지, 그리고 보안 교육 및 개발을 위한 CTF 챌린지 지원을 제공합니다.
이 저장소는 https://webvm.io의 소스 코드를 호스팅합니다. 브라우저에서 실행되는 Linux 가상 머신입니다.
새로운 Alpine / Xorg / i3 그래픽 환경을 사용해 보세요: https://webvm.io/alpine.html
WebVM은 HTML5/WebAssembly에서 완전히 클라이언트 측에서 실행되는 서버리스 가상 환경입니다. Linux ABI 호환성을 위해 설계되었으며, 많은 네이티브 개발 툴체인을 포함한 수정되지 않은 Debian 배포판을 실행합니다.
WebVM은 CheerpX 가상화 엔진에 의해 구동되며, 다음을 제공합니다:
[!NOTE] https://webvm.io를 방문하여 브라우저에서 즉시 시작하세요. 설정이 필요하지 않습니다.
로컬 설정, 사용자 이미지 빌드, fork/배포 가이드는 개발 및 커스터마이징을 참조하세요.
WebVM은 Tailscale 통합을 지원합니다. 따라서 브라우저 VM이 개인 네트워크에 연결할 수 있고, 출구 노드를 사용하면 공용 인터넷에도 연결할 수 있습니다.
[!NOTE] 일부 저수준 네트워킹 작업(
ping에서 사용하는 ICMP 등)은 현재 이 환경에서 사용할 수 없습니다. 연결 확인에는curl또는wget을 사용하세요.
이제 WebVM이 Tailscale 네트워크의 모든 머신에 액세스할 수 있습니다!
[!TIP] 느린 연결에서는 초기화 전에 약간의 지연이 있을 수 있습니다. 연결 상태는 버튼의 색상 점으로 표시됩니다. 주황색 = 로컬 네트워크, 녹색 = 글로벌/인터넷. 연결되면 버튼 텍스트에 Tailscale IP 주소가 표시됩니다.
WebVM에서 공용 인터넷에 액세스하려면 Tailscale 네트워크의 다른 장치에서 출구 노드(Exit Node) 를 설정하세요:
대화형 로그인의 대안으로, URL 프래그먼트에 Tailscale 인증 키를 추가할 수 있습니다:
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;
}
그런 다음 다음을 사용하여 WebVM에 액세스합니다:
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] 사용자는 기본적으로 루트 권한을 가집니다.
sudo는 설치되어 있지 않지만, 필요한 경우 Dockerfile에 쉽게 추가할 수 있습니다.
초보자에게 친숙한 간단한 워크플로입니다. 로컬 호스팅 및 커스터마이징은 아래의 로컬 서빙 및 이미지 설정을 참조하세요.
WebVM 저장소를 fork하여 자신만의 버전을 GitHub Pages에 배포하세요:
Deploy 워크플로를 실행합니다.deploy_to_github_pages 작업 아래에 표시된 URL을 엽니다.
동일한 Deploy 워크플로는 Dockerfile에서 사용자 지정 .ext2 디스크 이미지도 빌드합니다. dockerfiles/debian_mini 또는 다른 Dockerfile을 가리킨 다음, 결과를 GitHub Release 자산으로 게시하거나 fork에서 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 미니 이미지를 사용하려면 Releases에서 다운로드하세요:
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 챌린지를 해결하세요. 바이너리는 stdin에서 읽습니다."
중요: API 키는 비공개이며 절대 공유되어서는 안 됩니다. 당사는 귀하의 키에 접근할 수 없으며, 브라우저에만 로컬로 저장됩니다.
문제 보고: GitHub Issues를 사용하여 버그를 신고하거나 기능을 요청하세요.
채팅: Discord 커뮤니티에 가입하여 WebVM에 대해 논의하고, 아이디어를 공유하며 도움을 받으세요.
기사 및 자료:
예제 배포:
WebVM의 기술적 배경:
이 프로젝트는 다음에 의해 구동됩니다:
버전 관리:
WebVM은 릴리스마다 업데이트되는 CheerpX NPM 패키지를 사용합니다.
모든 빌드는 불변입니다. 특정 버전이 오늘 잘 작동한다면, 영원히 계속 작동할 것입니다.
WebVM은 Apache License, Version 2.0 하에 배포됩니다.
이 저장소의 내용을 자유롭게 사용, 수정, 재배포할 수 있습니다.
공개 CheerpX 배포판은 있는 그대로 제공되며, 개인의 기술 탐구, 테스트 및 사용을 위해 무료로 사용할 수 있습니다. 비영리, 학계 및 공공 부문을 포함한 조직의 기타 사용은 라이선스가 필요합니다. 다른 곳에 호스팅하기 위해 CheerpX 빌드를 다운로드하는 것은 상업 라이선스 없이 허용되지 않습니다.
라이선스 관행에 대한 자세한 내용은 여기에서 읽어보세요.
CheerpX/WebVM 기반 제품을 구축하려면 다른 라이선스 옵션을 확인하세요: CheerpX 라이선싱 또는 문의: [email protected]