Призвана для обучения в нестандартной форме командам Linux. В готовом и развернутом виде поиграть можно тут: escape.myctf.ru
Этот репозиторий предназначен именно для разработки! Если вы совсем-совсем новичок в Linux, пробуйте сначала поиграть, а потом уже заняться разбором платформы и созданию новых заданий.
- ansible предназначена для выкатки платформы на некоторый игровой сервер
- chain содержит данные для сборки уровней
- suzen_website содержит веб интерфейс для игры (жюрейная система не является открытым продуктом и не входит в этот репозиторий)
- Ваша операционная система должна поддерживать 64-разрядные виртуальные машины.
- Теоретически платформу можн поднять на любой ОС, которая поддерживает
VirtualBox
иVagrant
, но проверялось только наDebian
иUbuntu
-
Установить следующий набор ПО:
- vagrant
- virtualbox
- rsync (или apt install rsync)
- ansible
-
Выполнить поднятие виртуальной машины
vagrant up
-
В случае получения ошибки выполнить команду:
vagrant provision
-
Платформа развернута и готова. Задания доступы через
ssh
, гдеXX
- номер уровняssh -p 2222 [email protected]
-
Доступ к веб интерфейсу:
http://127.0.0.1:8080
Добавьте строки в ~/.ssh/config. Переменную TOKEN изменять не надо.
для внешнего сервиса, например:
Host escape.myctf.ru
SendEnv TOKEN
для локальных сборок с vagrant:
Host 127.0.0.1
SendEnv TOKEN
осуществите подключение с помощью команды: (например для vagrant. укажите порт и хост если они отличаются)
TOKEN="INSERT YOUR TOKEN HERE" ssh -p 2222 [email protected]
Обратите внимание, что некоторые роли можно контролировать, например включать и отключать. Это существенно ускоряет разворачивание проекта при отладке. См. "Используемые переменные".
Роль | Описание |
---|---|
install_docker |
Устанавливает docker engine на указанный сервер |
registry |
Разворачивает локальный Docker image registry |
build_containers |
Собирает контейнеры с задачами и выгружает их в Docker image registry |
deploy_web |
Собирает контейнер с веб интерфейсом и разворачивает его на указанном сервере |
deploy_tasks |
Разворачивает задания на указанном сервере |
Сборку осуществляет корневой скрипт build.py
, который принимает в качестве аргумента номер собираемого уровня. Аргумент может быть ключевым словом all
— сборка всех уровней, либо перечисление номеров через пробел.
-
Выполнить сборку всех уровней:
./build.py all
-
Выполнить сборку определенных уровней:
./build.py 1 3 7
-
Сборка веб-интерфейса:
docker build -t 127.0.0.1:5000/suzenescape/web . && docker push 127.0.0.1:5000/suzenescape/web
В случае если вы хотите разворачивать платформу с использованием стороннего docker registry, укажите его в
ansible/values.yaml
в переменной docker_registry
.
Также в рамках перехода на единый сборщик, существует еще системный контейнер: bykva/busybinaries
,
он собирается в директории busybox-custom
. Я разместил его на Docker Hub для уменьшения количества шагов в быстром старте.
Все переменные проекта собраны в файле ansible/values.yaml
Конфигурационные параметры сборки платформы:
Параметр | Описание | Значение по-умолчанию |
---|---|---|
deploy_registry |
Контролирует сборку и установку контейнера Docker image registry | true |
registry_proto |
Global Docker image registry protocol | http |
registry_url |
Global Docker image registry url | 127.0.0.1:5000 |
vagrant |
Указатель среды в которой происходит работа ansible | vagrant |
deploy_web |
Контролирует сборку и установку контейнера с веб интерфейсом | true |
build_containers |
Контролирует сборку и установку контейнеров с задачами | true |
tasks_to_build |
Устанавливает номер(а) задания для сборки. Строка. Может принимать значения: "1 2 3 ... N" |
all |
install_docker |
Контролирует установку Docker engine на указанный сервер | true |
is_online |
Используется для сборки в оффлайн режиме. Применимо ТОЛЬКО после сборки в онлайн режиме. | yes |
Переменные специфичные для задач:
Параметр | Описание | Пример |
---|---|---|
name |
Порядковый номер уровня. Используется для ssh авторизации | suzen5 |
password |
Пароль, используемый при ssh-авторизации для доступа к уровню. | suzen5 или dmVlNFdvaE42ZWVoMFpvN3dhcGgK |
sault |
Строка данных, для защиты пароля от перебора. Принимает значение rand([:alnum:]{8}) |
Yy9aP4bg |
config |
Список исполняемых файлов, которые будут доступны пользователю на уровне | cd|ls|mknod|sh |
rohome |
Устанавливает доступность для записи домашней директории пользователя | true |
chain |
Принадлежность задачи цепочке | 2 |
servers |
Словарь, описывающий серверную часть задания при ее наличии | [] |
flag |
Устанавливаемый при сборке флаг для конкретного уровня | dmVlNFdvaE42ZWVoMFpvN3dhcGgK |
- Задачи с флагом внутри: флаг дается за то что игрок догадался куда смотреть или выполнил набор действий, который привел его к флагу.
- Задачи с внешней проверкой: используется
cronjob
, которые прописываются вansible\templates
. (Также нужно прописать вsite.yaml
). Согласно cron будет выполняться достижение некоторого заданного состояния, за который игроку обещан флаг. Состояние и проверка выдумываются автором такого задания. - Задачи с подключением к стороннему контейнеру. см таски
5
и9
.