
Labtainers: фреймворк киберлабораторий на основе Docker
Labtainers: фреймворк киберлабораторий на базе Docker ============================================== Labtainers включает более 50 упражнений по кибербезопасности и инструменты для создания собственных. Импортируйте один [VM-образ][vm-appliance] или установите на систему Linux — и ваши студенты избавлены от необходимости заниматься провижинингом и административной настройкой для этих и будущих лабораторных работ. * Единообразные среды выполнения лабораторий и автоматизированный провижининг через контейнеры Docker * Многокомпонентные сетевые топологии на ноутбуке скромной производительности * Автоматизированная оценка активности и прогресса студентов в лабораторных работах * Индивидуализированные лабораторные упражнения, препятствующие обмену решениями Labtainers обеспечивают контролируемые и единообразные среды выполнения, в которых студенты выполняют лабораторные работы полностью в пределах своего компьютера, независимо от дистрибутива Linux и установленных на компьютере студента пакетов. Labtainers работают на нашем [VM-образе][vm-appliancee] или на любом Linux с установленным Docker. Кроме того, Labtainers доступны в виде облачных VM, например, в Azure, как описано в [Student Guide][student-guide]. См. [Student Guide][student-guide] для установки и использования, и [Instructor Guide][instructor-guide] для оценки студентов. Разработка и настройка лабораторных упражнений описаны в [Designer Guide][designer-guide]. См. [Papers][Papers] для дополнительной информации о фреймворке. Веб-сайт Labtainers и загрузки (включая VM-образы с предустановленными Labtainers) находятся по адресу <https://nps.edu/web/c3o/labtainers>. [vm-appliance]: https://nps.edu/web/c3o/virtual-machine-images [student-guide]: https://raw.githubusercontent.com/mfthomps/labtainers/master/docs/student/labtainer-student.pdf [instructor-guide]: https://raw.githubusercontent.com/mfthomps/labtainers/master/docs/instructor/labtainer-instructor.pdf [designer-guide]: https://raw.githubusercontent.com/mfthomps/labtainers/master/docs/labdesigner/labdesigner.pdf [Papers]: https://nps.edu/web/c3o/labtainers#papers Distribution created: 09/11/2026 11:33 </br> Revision: v1.4.4n </br> Commit: 9f1012dc </br> Branch: master </br> ## Содержание [Распространение и использование](#distribution-and-use) [Руководство по каталогам](#guide-to-directories) [Поддержка](#support) [Примечания к выпуску](#release-notes) ## Распространение и использование Информацию о лицензировании и распространении см. в [файле docs/license.md](https://github.com/mfthomps/labtainers/blob/master/docs/license.md). ## Руководство по каталогам * scripts/labtainers-student -- рабочий каталог для запуска и тестирования студенческих лабораторных работ. Для запуска студенческих лабораторных работ необходимо находиться в этом каталоге. * scripts/labtainers-instructor -- рабочий каталог для запуска и тестирования автоматизированной оценки и просмотра результатов студентов. * labs -- файлы, специфичные для каждой лабораторной работы * setup\_scripts -- скрипты для установки Labtainers и Docker и обновления Labtainers * docs -- исходники latex для labdesigner.pdf и другая документация. * UI -- исходный код редактора лабораторий Labtainers (Java). * headless-lite -- скрипты для управления Docker Workstation и облачными экземплярами Labtainers (системами, не имеющими нативных серверов X11). * scripts/designer -- инструменты для создания новых лабораторий и управления базовыми образами Docker. * config -- общесистемные настройки конфигурации (это не конфигурационные настройки конкретных лабораторий). * distrib -- скрипты поддержки распространения, например, для публикации лабораторий в Docker hub. * testsets -- процедуры тестирования и ожидаемые результаты. (Драйверы SimLab для отдельных лабораторий не распространяются). * pkg-mirrors -- служебные скрипты для внутреннего зеркалирования пакетов NPS, чтобы сократить внешнюю загрузку пакетов во время тестирования и распространения. ## Поддержка Используйте отчёты о проблемах на GitHub или напишите мне на [email protected] Также см. <https://my.nps.edu/web/c3o/support1> ## Примечания к выпуску Стандартный дистрибутив Labtainers не включает файлы, необходимые для разработки новых лабораторий. Для них запустите ./update-designer.sh из каталога labtainer/trunk/setup\_scripts. Скрипт установки и скрипт update-designer.sh устанавливают переменные окружения, поэтому перед первым использованием Labtainers вам, возможно, стоит выйти из системы и войти снова или запустить новый bash shell. 6 января 2026 - Исправлена ошибка, внесённая в скрипт установки из-за отступов. 30 декабря 2025 - Формат отчёта checkwork изменён на вертикальный; видеоруководство для headless; удобные пути 15 октября 2025 - Переработана лаборатория packet-introspection для обновления ссылки на базу геолокации maxmind и отмечено использование устаревшей базы данных. 24 апреля 2025 - Исправлен imodule для корректного создания отсутствующих каталогов согласно pull request #96 22 ноября 2024 - Заменена google cloud VM, на этот раз из-за сбоя systemd внутри контейнеров. 23 сентября 2024 - Заменена google cloud VM, в которой использовалась неправильная версия Docker 10 сентября 2024 - Опечатка при создании пути imodule 26 июля 2024 - Изменён capinout, чтобы не использовать clib-функцию grantpt, которая, судя по всему, теперь падает при запуске из контейнера. 22 июля 2024 - Добавлен базовый контейнер для Ubuntu22 и изменения в фреймворке для его поддержки. 5 июля 2024 - Переход на Ubuntu 24 в качестве VM-образа - Пакет docker pyhton использует сломанную python http-библиотеку, требуется понижение версии пакета. - Использование виртуального окружения python, чтобы обойти блокировку python-пакетов в Ubuntu. - Добавлен параметр загрузки, позволяющий совместно использовать systemd между контейнерами и VM. - Перенаправление сообщений об ошибках от сломанной утилиты tar при обновлениях. - Поломка обновления Ubuntu для пакетов msc (см. update-ubuntu.sh) для VM версии 18 - Команда docker-compose сломана, используйте "docker compose" - Принудительная установка прав на сокет в headless labtainers. - Обновление headless Labtainers для использования Ubuntu 24 27 ноября 2023 - Добавлена опция Google Cloud Platform для ubuntu22 на машине ec2. 18 сентября 2023 - Предыдущая реализация исправления была ошибочной. 8 августа 2023 - Обработка изменения формата json образов DockerHub. Спасибо, Kees! 17 апреля 2023 - Принудительное использование последней версии лаборатории, например, iptables2 вместо iptables. Исправлено автодополнение по Tab, чтобы отображалась только последняя версия. (Issue #77) - Установка лаборатории CyberCIEGE падала из-за состояния гонки X11. (Issue #76) - Примечание в readme CyberCIEGE, чтобы направить студентов сохранять собранные логи в каталог $HOME. (Issue #75) - Проверка работы лаборатории Radius некорректно сообщала "radiusd not running", отсутствовал скрипт prestop. (Issue #74) - Labedit повреждал файл начальной конфигурации при использовании опции MACVLAN\_EXT. (Issue #73) 1 февраля 2023 - История Bash для пользователей, отличных от пользователя по умолчанию, не сохранялась. 26 января 2023 - Изменены скрипты powershell для gcloud, чтобы использовать выбранную зону для уточнения имён VM. 4 января 2023 - Контейнеры, использующие systemd, падали на более новом systemd, присутствующем в Ubuntu 22 - Добавлен параметр --zone в скрипты google cloud, значение берётся из скрипта set\_defaults. 21 декабря 2022 - Исправлены критерии результатов xforge, чтобы не ожидать pathname, и добавлена проверка, был ли отправлен POST для редактирования профиля. Также исправлен http-сервер атакующего для запуска из домашнего каталога. 19 декабря 2022 - Добавлена лаборатория strace для знакомства с трассировкой системных вызовов. - Значение X11 DISPLAY было некорректным при наличии нескольких устройств в каталоге /tmp/.X11-unix. - Использование python/bash/sh/etc без аргументов приводило к падению capinout. 9 декабря 2022 - Изменён скрипт создания Azure vm, чтобы использовать предварительно собранный образ Labtainer VM из Azure Community Gallery. - Терминалы на облачных VM падают по неизвестным причинам во время запуска или при щелчке правой кнопкой мыши по терминалу. Попытка решить проблему путём запуска/остановки терминала. 5 декабря 2022 - При сборе артефактов включать изменённые файлы из каталогов пользователей, отличных от пользователя по умолчанию, например, их истории bash. - Изменена веб-оценка для отображения новых файлов "other user". - Включать файлы из .local/bin в каждом контейнере в артефакты. Предназначено для предоставления их инструктору через веб-оценку. - В лаборатории ACL включить файл /shared\_data/bob/fun в результаты для справки инструктором. - Перехватывать использование "sh" или "bash" из командной строки и пропускать при разборе заданной команды, например, как это делается с "time" или "sudo". - В лаборатории tcpip не удавалось выполнить ssh на сервер во время последующих сессий лаборатории, каталог /run/sshd не создавался заново. 16 ноября 2022 - Исправлен путь к Snort Manual в лаборатории snort. - В руководстве ossec исправлен путь к manage\_agents 12 октября 2022 - Google cloud: удалён фоновый оператор из команды gnome-terminal, всё ещё падает при щелчке правой кнопкой, но, похоже, стабильно работает после запуска newterm.sh. 10 октября 2022 - Исправлен Google cloud newterm.sh; расширен загрузочный диск до 30G. 20 сентября 2022 - Указаны идентификатор пользователя и пароль для лаборатории TCP/IP в руководстве лаборатории. 30 августа 2022 - Использовать имя сокета X11 при установке DISPLAY из .profile контейнера 9 августа 2022 - Исправлено имя функции processValueMax в grader. Issue #63 4 августа 2022 - Программа labedit была пересобрана с неправильным JDK, что не позволяло старым JRE запускать labedit 18 июля 2022 - Создание контейнеров на базе Ubuntu20 падало внутри IModules. Issue #61. 23 марта 2022 - Исправлен путь к каталогу блокировки tap; это вызывало сбой лабораторий, использующих сетевые taps - Обновлён компьютер plc-traffic netmon, чтобы иметь openjfx, необходимый для нового grassmarlin в java-окружении - Ускорен запуск лаборатории за счёт отказа от chown -R, который очень медленный в docker. - Ещё одна попытка избежать удаления ссылки X11 в каталоге /tmp контейнера. - Исправлен подсчёт посещённых сайтов в webtrack и удалена цель live-headers, этот инструмент больше недоступен. Уточнены некоторые шаги руководства лаборатории. 2 марта 2022 - Добавлена новая лаборатория ssh-tunnel (спасибо GWD!) - Исправлен сбой labedit, связанный с отражением значения X11, установленного new\_lab\_setup - Добавлена опция не параметризовать контейнер 23 февраля 2022 - labedit повреждал start.config после добавления новых контейнеров - Некорректный путь к руководству студента в файле README для студентов; динамическое изменение для облачных конфигураций - Некорректное расширение в update-labtainer.sh - Улучшения руководства Msc - Обновлена лаборатория ghidra для включения версии 10.1.2 Ghidra 15 февраля 2022 - Возврат поддержки Azure cloud к провижинингу для каждого студента. Azure не поощряет совместное использование ресурсов. 24 января 2022 - Azure cloud теперь использует образ, хранящийся в Azure blob, вместо провижининга для каждого студента. - Добавлена поддержка Google Cloud. 19 января 2022 - Представлены Labtainers в облаке Azure. Подробности использования см. в Student Guide. 3 января 2022 - Переработана лаборатория setuid-env для добавления лучшей оценки; тестирование simlab и предотвращение sighup в дочернем процессе printenv. - Исправлена директива подсчёта целей оценки, чтобы исключать значения тега результата false. - Не требовать labname при использовании gradelab -a с grader, запущенным с опцией debug. - Переработан capinout (зеркалирование stdin/stdout) для обработки осиротения дочерних процессов команды, улучшена документация и обработка ошибок. - Добавлено отображение индикаторов прогресса загрузки образов docker при первом запуске лаборатории. - Обратная связь с пользователем о прогрессе инициализации контейнера. - В лаборатории pcap-lib отсутствовал файл notify, необходимый для автоматизированной оценки; Удалён лишний шаг из Lab Manual. 23 ноября 2021 - Отключены всплывающие ошибки ubuntu на тестовой VM. - Исправлена обработка различных форматов переменной DISPLAY. 22 октября 2021 - Переработано руководство лаборатории tcpip, чтобы отметить, что успешная syn-flood атака невозможна. Исправлена её автоматизированная оценка и добавлены скрипты SimLab. - Изменено расширение файла артефакта с zip на lab, и добавлена преамбула, чтобы запутать GUI-файловые менеджеры. Студенты открывали zip и отправляли его содержимое. - Опция -r для gradelab сделана по умолчанию, добавлена опция -c для кумулятивного использования grader. - Изменён refresh\_mirror, чтобы ссылаться на локальную дату выпуска и избежать частых запросов к DockerHub. Каждый такой запрос считается загрузкой образа, а они теперь пытаются монетизировать это. 30 сентября 2021 - Изменено руководство и оценка лаборатории bufoverflow, чтобы не ожидать успеха при включённом ASLR, оценивается, была ли она запущена. - Обработка ошибок для веб-grader в случаях, когда у студента отсутствуют результаты. - Вывод предупреждения при запуске устаревшей лаборатории. - Изменена оценка formatstring для удаления неиспользуемого описания "\_leaked\_secret" и уточнения значения leaked\_no\_scanf. - Также изменена оценка formatstring, чтобы разрешить любое имя для уязвимого исполняемого файла. 29 сентября 2021 - Обработка ошибок Gradelab, сокращение случаев падения из-за плохих zip-файлов. - Ограничение файлов артефактов stdout до 1MB 17 сентября 2021 - В руководстве лаборатории Ghidra был неправильный IP-адрес, она не была пересобрана из исходников. 14 сентября 2021 - Примеры лабораторий для LDAP и Mariadb с использованием SSL. Предназначены как шаблоны для новых лабораторий. - Обработка формата логов Mariadb - Добавлены параметры для каждого контейнера для ограничения использования CPU или привязки контейнера к набору CPU. - Создание Labpack теперь доступно через GUI (makepackui). - Автодополнение по Tab для команд labtainer, labpack и gradelab. - Новая лаборатория параллельных вычислений ``parallel'' с использованием MPI. 3 августа 2021 - Добавлена опция конфигурации "WAIT\_FOR", заставляющая контейнер отложить параметризацию до завершения параметризации другим контейнером. - Поддержка форматов логов Mariadb при разборе результатов - Удалена поддержка использования Docker Desktop на Mac и Windows. Этот продукт слишком нестабилен для нашей поддержки. - Подавление сообщений stderr, когда пользователь использует встроенные команды bash, такие как "which". - Исправления ошибок в программах makepack/labpack. 19 июля 2021 - Добавлена лаборатория DNS для знакомства с протоколом и конфигурацией DNS. - Переработан образ VirtualBox appliance, чтобы запускаться с правильным скриптом обновления. - Параметр nameserver из resolv.conf вынесен из поля конфигурации lab\_gw в отдельное значение. - Команда IModule падала, если запускалась до запуска каких-либо лабораторий. 5 июля 2021 - Ошибки в управлении переменной окружения DISPLAY ломали GUI-приложения на Docker Desktop. 1 июля 2021 - Поддержка установки пакета headless Labtainers на Mac. - Автоматизированная оценка лаборатории routing-basics падала из-за отсутствия файлов treataslocal - Исправлены опечатки и неправильные адреса в лаборатории routing-basics, и исправлена автоматизированная оценка. - Оценка pcapanalysis падала. 10 июня 2021 - Все PDF-руководства лабораторий теперь находятся в репозитории github - Инструкции vpnlab и vpnlab2 преобразованы в PDF-руководства лабораторий. 25 мая 2021 - Добавлены ключевые слова для поиска в каждую лабораторию. Использование см. в "labtainer -h". - Расширена лаборатория routing-basics и руководство лаборатории - Удалена лаборатория routing-basics2, теперь она избыточна. - sudo на некоторых контейнерах падал, потому что имена хостов удаляют подчёркивания, что приводило к несоответствию с файлом hosts. Исправлено дополнительной записью в файле hosts с именем контейнера без подчёркивания. - Новая функция Labpack для упаковки коллекции лабораторий и инструмент makepack для создания Labpacks. - Проверка ошибок для каталога /sbin при использовании ubuntu20 -- иначе это было бы молчаливым фатальным сбоем. - Новая лаборатория network-basics 5 мая 2021 - Представлена новая лаборатория users для знакомства с управлением пользователями/группами - Подавление сообщений хоста Apparmor в syslog контейнера centos 28 апреля 2021 - В новых образах base2 отсутствовали man-страницы. Использован unminimize для их восстановления в базовом образе. - Представлена лаборатория OSSEC host-based IDS. 13 апреля 2021 - Лаборатория CyberCIEGE падала, потому что сокет X11 не был перемещён до запуска Wine через fixlocal. 9 апреля 2021 - Новая обучающая лаборатория gdb-cpp для использования GDB на простой программе на C++. - Исключения с плавающей точкой раскрывали использование exec\_wrap.sh для зеркалирования stdin/stdout. 7 апреля 2021 - Лаборатория ldap падала при переносе на Ubuntu 20. Проблема прослежена до проблемы с кэшем pwd в nscd. Лаборатория ldap перенесена на Ubuntu 20 23 марта 2021 - Параметризация с RANDOM не включала верхнюю границу. - Добавлен необязательный параметр шага в RANDOM, например, для обеспечения границ слов. - Лаборатория db-access: добавлен mysql-workbench на компьютер базы данных. - Новая лаборатория overrun для иллюстрации обращений к памяти за пределами границ структур данных c. - Новая лаборатория printf для знакомства с обращениями к памяти, выполняемыми функцией printf. 19 марта 2021 - gradelab игнорирует ошибку makdirs, проблема с Windows rmtree на общих папках. - gradelab обрабатывает пробелы в именах zip-файлов студентов. - gradelab обрабатывает имена zip-файлов из Moodle, включая загрузки сборок. 12 марта 2021 - UI labedit: Удалён старый образ wireshark из списка базовых образов. - UI labedit: Увеличены некоторые размеры шрифтов. - Веб-интерфейс grader не отображал руководства лабораторий, если имя руководства не соответствует соглашениям об именовании. 11 марта 2021 - UI labedit: добавлена настройка registry в новой глобальной панели конфигурации лаборатории. 10 марта 2021 - Исправления UI labedit, чтобы не собирать при синтаксической ошибке в лаборатории - Исправление индикатора "Lab running" в UI labedit для отражения текущей лаборатории. 8 марта 2021 - Устаревшее использование HOST\_HOME\_XFER, все лаборатории используют каталог согласно файлу labtainer.config. - Добавлен комментарий с документацией к start.config для REGISTRY и BASE\_REGISTRY 5 марта 2021 - Обработка ошибок в веб-интерфейсе gradelab при отсутствии результатов. - Добавление precheck в labedit, исправления ошибок msc. 26 февраля 2021 - В лаборатории dmz-example были ошибки в маршрутизации и настройке dnsmasq на некоторых компонентах. 18 февраля 2021 - UI пересобирал образы, потому что обновлял времена файлов без причины - Очистка кода UI для удаления некоторых избыточных копий данных. 14 февраля 2021 - Добавлена опция локальной сборки в UI - Создан пустой faux\_init для баз centos6. 11 февраля 2021 - Исправлена обработка редактирования файлов в UI. Переработан макет и удалены неиспользуемые поля. - Добавлена базовая конфигурация ubuntu20 base2 вместе с ssh2, network2 и wireshark2 - Новый wireshark решает проблему чёрных/шумных окон. - Отображение /tmp/.X11-unix на /var/tmp и создание ссылки. Необходимо для ubuntu20 (удалялся /tmp?) и может исправить другие. 4 февраля 2021 - Добавлена опция SIZE для артефактов результатов - Упрощена оценка и параметризация wireshark-intro и добавлено PDF-руководство лаборатории. - Предоставление значений списка параметров скрипту pregrade.sh в виде переменных окружения - включение X11 на grader - помещение update-designer.sh в путь пользователя. 19 января 2021 - Изменено управление датой/ревизией README для обновления файла в исходном репозитории. - Представлен GUI для создания/редактирования лабораторий -- см. команду labedit. 21 декабря 2020 --- [Read more](https://github.com/mfthomps/labtainers)