
Клиентская виртуальная машина 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, чтобы начать работу прямо в браузере. Никакой настройки не требуется.
Инструкции по локальной настройке, сборке собственных образов и форку/развертыванию см. в разделе Разработка и настройка.
WebVM поддерживает интеграцию с Tailscale. Таким образом, ваша браузерная ВМ может получать доступ к вашей частной сети, а при наличии выходного узла — и к публичному интернету.
[!NOTE] Некоторые низкоуровневые сетевые операции (особенно ICMP, используемый
ping) в настоящее время недоступны в этом окружении. Для проверки подключения используйтеcurlилиwget.
Теперь WebVM имеет доступ ко всем машинам в вашей сети Tailscale!
[!TIP] При медленном соединении может быть небольшая задержка перед инициализацией. Состояние подключения отображается в виде цветной точки на кнопке: оранжевый — локальная сеть, зеленый — глобальный интернет. Текст кнопки показывает ваш IP-адрес Tailscale после подключения.
Чтобы получить доступ к публичному интернету из WebVM, настройте Выходной узел на другом устройстве в вашей сети Tailscale:
В качестве альтернативы интерактивному входу можно добавить свой ключ аутентификации Tailscale во фрагмент URL:
https://webvm.io/#authKey=<ваш-эфимерный-ключ>
Это эквивалентно опции Tailscale --login-server.
[!TIP] Если вам также нужен собственный сервер управления, добавьте
controlUrlв тот же фрагмент URL и разделите значения символом&, например:#authKey=...&controlUrl=....
Мы также поддерживаем headscale — самостоятельную реализацию сервера управления Tailscale с открытым исходным кодом. По умолчанию Headscale не добавляет заголовки CORS, поэтому перед ним потребуется прокси. См. документацию Headscale по настройке обратного прокси для примера.
После настройки добавьте следующую строку в блок location / вашего конфигурационного файла nginx.
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=<ваш-url-headscale>
[!NOTE] Пользователи по умолчанию имеют права root. Однако
sudoне установлен, но его легко добавить в Dockerfile при необходимости.
Это простой рабочий процесс, подходящий для начинающих. Инструкции по локальному хостингу и настройке см. ниже в разделе Локальный запуск и настройка образа.
Форкните репозиторий WebVM, чтобы развернуть свою собственную версию на GitHub Pages:
Deploy из вкладки Actions.deploy_to_github_pages.
Тот же рабочий процесс Deploy также собирает пользовательские образы дисков .ext2 из Dockerfile. Вы можете указать его на 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/В этом репозитории есть постоянная директория custom-disk-images/ для локальных файлов .ext2.
Чтобы использовать официальный минимальный образ Debian, скачайте его из релизов:
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 Desktop см. в leaningtech/alpine-image.
Более подробную информацию см. в документации CheerpX Custom Images.
[!TIP] Для REPL Python3 рабочий процесс
DeployучитываетCMD, указанный в Dockerfile.Чтобы создать REPL, просто измените
CMD [ "/bin/bash" ]наCMD [ "/usr/bin/python3" ]и разверните.
Для доступа к Claude AI вам понадобится API-ключ. Выполните следующие шаги, чтобы начать:
"Реши CTF-задачу из /home/user/chall1.bin. Учти, что бинарник читает из stdin."
Важно: Ваш API-ключ является приватным и не должен никому передаваться. У нас нет доступа к вашему ключу, он хранится только локально в вашем браузере.
Сообщить об ошибках: Используйте GitHub Issues, чтобы сообщить об ошибках или запросить функции.
Пообщайтесь с нами: Присоединяйтесь к нашему сообществу в Discord, чтобы обсудить WebVM, поделиться идеями и получить помощь.
Статьи и ресурсы:
Пример развертывания:
Технологии, лежащие в основе WebVM:
Этот проект работает на:
Версионирование:
WebVM использует NPM-пакет CheerpX, который обновляется с каждым релизом.
Каждая сборка неизменна. Если конкретная версия работает у вас сегодня хорошо, она будет работать всегда.
WebVM распространяется под лицензией Apache License, Version 2.0.
Вы можете свободно использовать, изменять и распространять содержимое этого репозитория.
Публичное развертывание CheerpX предоставляется как есть и бесплатно для использования для технологического исследования, тестирования и использования частными лицами. Любое другое использование организациями, включая некоммерческие, академические и государственные учреждения, требует лицензии. Загрузка сборки CheerpX с целью размещения ее в другом месте не допускается без коммерческой лицензии.
Подробнее о нашей лицензионной практике читайте здесь.
Если вы хотите создать продукт на основе CheerpX/WebVM, ознакомьтесь с другими вариантами лицензирования: CheerpX licensing или свяжитесь с нами: [email protected]