Labtainers: Docker 기반 사이버 랩 프레임워크
Labtainers에는 50개 이상의 사이버 랩 실습과 직접 제작할 수 있는 도구가 포함되어 있습니다. 단일 VM 어플라이언스를 가져오거나 Linux 시스템에 설치하면, 학생들은 이 실습과 향후 랩 실습을 위한 프로비저닝 및 관리 설정을 완료할 수 있습니다.
- Docker 컨테이너를 통한 일관된 랩 실행 환경 및 자동 프로비저닝
- 적당한 성능의 노트북 컴퓨터에서의 다중 구성 요소 네트워크 토폴로지
- 학생 랩 활동 및 진행 상황의 자동 평가
- 해결책 공유를 방지하기 위한 개별화된 랩 실습
Labtainers는 학생들이 자신의 컴퓨터에 설치된 Linux 배포판과 패키지에 관계없이 전적으로 자신의 컴퓨터 내에서 랩을 수행할 수 있는 통제되고 일관된 실행 환경을 제공합니다. Labtainers는 [VM 어플라이언스][vm-appliancee] 또는 Docker가 설치된 모든 Linux에서 실행됩니다. 또한 Labtainers는 Student Guide에 설명된 대로 Azure와 같은 클라우드 기반 VM으로도 사용할 수 있습니다.
설치 및 사용 방법은 Student Guide를, 학생 평가는 Instructor Guide를 참조하십시오. 랩 실습의 개발 및 사용자 정의는 Designer Guide에 설명되어 있습니다.
프레임워크에 대한 추가 정보는 Papers를 참조하십시오.
Labtainers 웹사이트 및 다운로드(Labtainers가 사전 설치된 VM 어플라이언스 포함)는 https://nps.edu/web/c3o/labtainers에서 확인할 수 있습니다.
Distribution created: 09/11/2026 11:33
Revision: v1.4.4n
Commit: 9f1012dc
Branch: master
Content
Distribution and Use
Guide to directories
Support
Release notes
Distribution and Use
라이선스 및 배포 정보는
docs/license.md 파일을 참조하십시오.
Guide to directories
-
scripts/labtainers-student -- 학생 랩을 실행하고
테스트하기 위한 작업 디렉터리입니다. 학생 랩을 실행하려면
해당 디렉터리에 있어야 합니다.
-
scripts/labtainers-instructor -- 자동 평가를 실행하고 테스트하며
학생 결과를 확인하기 위한 작업 디렉터리입니다.
-
labs -- 각 랩에 특화된 파일
-
setup_scripts -- Labtainers와 Docker를 설치하고 Labtainers를 업데이트하기 위한 스크립트
-
docs -- labdesigner.pdf의 latex 소스 및 기타 문서.
-
UI -- Labtainers 랩 편집기 소스 코드 (Java).
-
headless-lite -- Docker Workstation 및 Labtainers의 클라우드 인스턴스(네이티브 X11 서버가 없는 시스템)를
관리하기 위한 스크립트.
-
scripts/designer -- 새로운 랩을 구축하고 기본 Docker 이미지를 관리하기 위한 도구.
-
config -- 시스템 전역 구성 설정 (랩별 구성 설정이
아닙니다).
-
distrib -- 배포 지원 스크립트, 예: Docker hub에 랩을 게시하기 위한 스크립트.
-
testsets -- 테스트 절차 및 예상 결과. (SimLab용 랩별 드라이버는
배포되지 않습니다).
-
pkg-mirrors -- 테스트 및 배포 중 외부 패키지 풀링을 줄이기 위한 내부 NPS 패키지 미러링용 유틸리티 스크립트.
Support
GitHub 이슈 보고서를 사용하거나 [email protected]로 이메일을 보내주십시오.
https://my.nps.edu/web/c3o/support1도 참조하십시오.
Release notes
표준 Labtainers 배포판에는 새로운 랩 개발에 필요한 파일이 포함되어 있지 않습니다. 해당 파일은 labtainer/trunk/setup_scripts 디렉터리에서 ./update-designer.sh를 실행하십시오.
설치 스크립트와 update-designer.sh 스크립트는 환경 변수를 설정하므로, Labtainers를 처음 사용하기 전에 로그아웃/로그인하거나 새로운 bash 셸을 시작하는 것이 좋습니다.
2026년 1월 6일
- 들여쓰기로 인해 설치 스크립트에 발생한 버그를 수정했습니다.
2025년 12월 30일
- checkwork 보고서 형식을 세로형으로 수정; headless용 비디오 가이드; 편의 경로
2025년 10월 15일
- packet-introspection 랩을 수정하여 maxmind 지리 위치 데이터베이스의 링크를 업데이트하고 레거시 데이터베이스 사용을 명시했습니다.
2025년 4월 24일
- pull request #96에 따라 누락된 디렉터리를 올바르게 생성하도록 imodule을 수정했습니다.
2024년 11월 22일
- Google Cloud VM을 교체했습니다. 이번에는 컨테이너 내부의 systemd 실패 때문이었습니다.
2024년 9월 23일
- 잘못된 Docker 버전을 사용하던 Google Cloud VM을 교체했습니다.
2024년 9월 10일
2024년 7월 26일
- 컨테이너에서 실행할 때 충돌하는 것으로 보이는 grantpt clib 함수를 사용하지 않도록 capinout을 수정했습니다.
2024년 7월 22일
- Ubuntu22용 기본 컨테이너와 이를 지원하기 위한 프레임워크 변경 사항을 추가했습니다.
2024년 7월 5일
- VM 어플라이언스로 Ubuntu 24로 마이그레이션
- docker python 패키지가 깨진 python http 라이브러리를 사용하므로 패키지 다운그레이드가 필요합니다.
- Ubuntu의 python 패키지 잠금을 피하기 위해 가상 python 환경을 사용합니다.
- 컨테이너와 VM 간에 systemd를 공유할 수 있도록 부팅 매개변수를 추가했습니다.
- 업데이트 시 깨진 tar 유틸리티의 오류 메시지를 리디렉션합니다.
- 버전 18 VM의 msc 패키지에 대한 Ubuntu 업데이트 문제 (update-ubuntu.sh 참조)
- docker-compose 명령이 깨졌으므로 "docker compose"를 사용하십시오.
- headless labtainers에서 소켓 권한을 강제합니다.
- headless Labtainers를 Ubuntu 24를 사용하도록 업데이트했습니다.
2023년 11월 27일
- ec2 머신의 ubuntu22용 Google Cloud Platform 옵션을 추가했습니다.
2023년 9월 18일
2023년 8월 8일
- DockerHub 이미지 json 형식 변경을 처리했습니다. Kees에게 감사드립니다!
2023년 4월 17일
- 최신 랩 버전을 강제로 사용하도록 했습니다. 예: iptables 대신 iptables2. 탭 완성이 최신 버전만 표시하도록 수정했습니다. (이슈 #77)
- X11 경쟁 조건으로 인해 CyberCIEGE 랩 설치가 실패했습니다. (이슈 #76)
- CyberCIEGE readme에 학생들이 수집한 로그를 $HOME 디렉터리에 저장하도록 안내하는 내용을 추가했습니다. (이슈 #75)
- Radius 랩 checkwork가 "radiusd not running"을 잘못 보고했으며, prestop 스크립트가 누락되었습니다. (이슈 #74)
- MACVLAN_EXT 옵션을 사용할 때 Labedit이 시작 구성 파일을 손상시켰습니다. (이슈 #73)
2023년 2월 1일
- 비기본 사용자의 Bash 기록이 저장되지 않았습니다.
2023년 1월 26일
- VM 이름을 한정하기 위해 선택한 영역을 사용하도록 gcloud용 powershell 스크립트를 수정했습니다.
2023년 1월 4일
- systemd를 사용하는 컨테이너가 Ubuntu 22에 있는 최신 systemd에서 실패했습니다.
- set_defaults 스크립트에서 파생된 값을 사용하여 google cloud 스크립트에 --zone 매개변수를 추가했습니다.
2022년 12월 21일
- xforge 결과 기준이 경로명을 기대하지 않도록 수정하고, 프로필 편집을 위해 POST가 발행되었는지 확인하는 검사를 추가했습니다. 또한 공격자
http 서버가 홈 디렉터리에서 실행되도록 수정했습니다.
2022년 12월 19일
- 시스템 호출 추적을 소개하는 strace 랩을 추가했습니다.
- /tmp/.X11-unix 디렉터리에 여러 장치가 있는 경우 X11 DISPLAY 값이 잘못되었습니다.
- 인수 없이 python/bash/sh/etc를 사용하면 capinout이 충돌했습니다.
2022년 12월 9일
- Azure Community Gallery의 사전 빌드된 Labtainer VM 이미지를 사용하도록 Azure vm 생성 스크립트를 수정했습니다.
- 클라우드 VM의 터미널이 시작 중이나 터미널을 마우스 오른쪽 버튼으로 클릭할 때 알 수 없는 이유로 충돌합니다. 터미널을 시작/중지하여
해결을 시도했습니다.
2022년 12월 5일
- 아티팩트를 수집할 때 비기본 사용자의 디렉터리에서 수정된 파일(예: bash 기록)을 포함합니다.
- 새로운 "other user" 파일을 표시하도록 웹 평가를 변경했습니다.
- 각 컨테이너의 .local/bin에 있는 파일을 아티팩트에 포함합니다. 강사가 웹 평가를 통해 이러한 파일을 사용할 수 있도록 하기 위한 것입니다.
- ACL 랩에서 강사가 참조할 수 있도록 결과에 /shared_data/bob/fun 파일을 포함합니다.
- 명령줄에서 "sh" 또는 "bash" 사용을 감지하고 주어진 명령을 파싱할 때 건너뜁니다. 예: "time" 또는 "sudo"에서 수행하는 것처럼.
- tcpip 랩에서 후속 랩 세션 중에 서버에 ssh할 수 없었으며, /run/sshd 디렉터리가 다시 생성되지 않았습니다.
2022년 11월 16일
- snort 랩에서 Snort 매뉴얼 경로를 수정했습니다.
- ossec 매뉴얼에서 manage_agents 경로를 수정했습니다.
2022년 10월 12일
- Google cloud에서 gnome-terminal 명령의 백그라운드 연산자를 제거했습니다. 마우스 오른쪽 버튼 클릭 시 여전히 충돌하지만
newterm.sh를 실행한 후에는 안정적인 것으로 보입니다.
2022년 10월 10일
- Google cloud newterm.sh를 수정했습니다. 부팅 디스크를 30G로 확장했습니다.
2022년 9월 20일
- 랩 매뉴얼에 TCP/IP 랩의 사용자 ID와 비밀번호를 명시했습니다.
2022년 8월 30일
- 컨테이너의 .profile에서 DISPLAY를 설정할 때 X11 소켓 이름을 사용합니다.
2022년 8월 9일
- grader에서 processValueMax 함수의 이름을 수정했습니다. 이슈 #63
2022년 8월 4일
- labedit 프로그램이 잘못된 JDK로 재빌드되어 이전 JRE에서 labedit을 실행할 수 없었습니다.
2022년 7월 18일
- IModule 내에서 Ubuntu20 기반 컨테이너 생성이 실패했습니다. 이슈 #61.
2022년 3월 23일
- tap lock 디렉터리 경로를 수정했습니다. 네트워크 탭을 사용하는 랩의 실패 원인이었습니다.
- java 환경의 새로운 grassmarlin에 필요한 openjfx를 갖도록 plc-traffic netmon 컴퓨터를 업데이트했습니다.
- docker에서 매우 느린 chown -R을 피하여 랩 시작 속도를 높였습니다.
- 컨테이너 /tmp 디렉터리에서 X11 링크 삭제를 피하기 위한 또 다른 시도.
- webtrack의 방문 사이트 카운팅을 수정하고 더 이상 사용할 수 없는 live-headers 목표를 제거했습니다.
일부 랩 매뉴얼 단계를 명확히 했습니다.
2022년 3월 2일
- 새로운 ssh-tunnel 랩을 추가했습니다 (GWD에게 감사드립니다!)
- new_lab_setup에서 설정한 X11 값을 반영하지 못하는 labedit 실패를 수정했습니다.
- 컨테이너를 매개변수화하지 않는 옵션을 추가했습니다.
2022년 2월 23일
- 새로운 컨테이너 추가 후 labedit이 start.config를 손상시켰습니다.
- 학생 README 파일의 학생 가이드 경로가 잘못되었습니다. 클라우드 구성에 대해 동적으로 변경합니다.
- update-labtainer.sh의 잘못된 확장자
- Msc 가이드 개선
- Ghidra 랩을 업데이트하여 Ghidra 버전 10.1.2를 포함했습니다.
2022년 2월 15일
- Azure 클라우드 지원을 각 학생별 프로비저닝으로 되돌렸습니다. Azure는 리소스 공유를 권장하지 않습니다.
2022년 1월 24일
- Azure 클라우드는 이제 각 학생별 프로비저닝 대신 Azure blob에 저장된 이미지를 사용합니다.
- Google Cloud 지원을 추가했습니다.
2022년 1월 19일
- Azure 클라우드에서 Labtainers를 소개했습니다. 사용 방법에 대한 자세한 내용은 Student Guide를 참조하십시오.
2022년 1월 3일
- setuid-env 랩을 수정하여 더 나은 평가를 추가했습니다. simlab 테스트 및 printenv 자식에서 sighup을 방지합니다.
- false의 결과 태그 값을 제외하도록 평가 목표 카운트 지시문을 수정했습니다.
- debug 옵션으로 시작된 grader와 함께 gradelab -a를 사용할 때 labname을 요구하지 않습니다.
- 명령 프로세스 자식의 고아화를 처리하도록 capinout (stdin/stdout 미러링)을 수정하고 문서와 오류 처리를 개선했습니다.
- 랩을 처음 실행할 때 풀링되는 docker 이미지의 진행률 표시줄을 추가했습니다.
- 컨테이너 초기화 진행 상황에 대한 사용자 피드백.
- pcap-lib 랩에 자동 평가에 필요한 notify 파일이 누락되었습니다. Lab Manual에서 불필요한 단계를 제거했습니다.
2021년 11월 23일
- 테스트 VM에서 ubuntu 팝업 오류를 비활성화했습니다.
- 다양한 DISPLAY 변수 형식 처리를 수정했습니다.