{"id":21469902,"url":"https://github.com/dobin/yookiterm-server","last_synced_at":"2025-07-04T07:06:47.840Z","repository":{"id":60976753,"uuid":"68512375","full_name":"dobin/yookiterm-server","owner":"dobin","description":"Main yookiterm backend","archived":false,"fork":false,"pushed_at":"2023-03-31T14:31:58.000Z","size":118,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-08T23:53:54.666Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dobin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-18T09:51:01.000Z","updated_at":"2023-05-23T11:50:45.000Z","dependencies_parsed_at":"2024-06-20T17:13:45.058Z","dependency_job_id":"ede39644-8e1e-42f1-9dbd-6b20429f21ff","html_url":"https://github.com/dobin/yookiterm-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dobin/yookiterm-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobin%2Fyookiterm-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobin%2Fyookiterm-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobin%2Fyookiterm-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobin%2Fyookiterm-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dobin","download_url":"https://codeload.github.com/dobin/yookiterm-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobin%2Fyookiterm-server/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263464200,"owners_count":23470475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-23T09:19:21.869Z","updated_at":"2025-07-04T07:06:47.822Z","avatar_url":"https://github.com/dobin.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yookiterm-server\n\nThe main backend part of yookiterm. Provides challenges, and hints to where the actual \nyookiterm-lxdserver are. The UI will mostly query this server.\n\n\n## What is yookiterm\n\nYookiterm provides per-user Linux root containers via JavasScript\nterminal, and accompagning tutorials and writeups of\ncertain topics. It is currently used as a plattform\nteaching exploit development at an university.\n\n## What is yookiterm-server\n\nyookiterm-server provides the following functionality: \n* authentication (user based and SSO)\n* Provide the HTML UI\n* Deliver challenges (from `yookiterm-challenges`)\n\nIt does not: \n* Interact directly with containers (thats what `yookiterm-lxdserver` is for)\n\n\n## Install\n\nMake sure you have something like the following directory structure: \n* /home/yookiterm/\n  * yookiterm-server/ (this)\n  * yookiterm/ (Angular UI)\n  * yookiterm-slides/ (slides PDF)\n  * yookiterm-challenges/ (challenges markdown)\n\n\nInstall yookiterm-server:\n```\n$ cd /home/yookiterm\n$ git clone https://github.com/dobin/yookiterm-server.git\n$ cd yookiterm-server\n\n# build\n$ go get\n$ go build\n\n# configure\n$ cp yookierm-server.yml.sample yookiterm-server.yml\n$ vi yookiterm-server.yml\n\n# create base container\n$ lxd.lxc init images:debian/11/amd64 Debian64\n$ lxd.lxc init images:debian/11/i386  Debian32\n```\n\nOther:\n```\n# get challenges\n$ cd /home/yookiterm\n$ git clone https://github.com/dobin/yookiterm-challenges.git\n\n# provide UI (optional)\n$ git clone https://github.com/dobin/yookiterm.git\n```\n\n## configure reverse proxy\n\n`Caddyfile`:\n```\nexploit.courses {\n        reverse_proxy http://10.10.10.100:8080\n}\n\nvmaslr.yookiterm.ch {\n        reverse_proxy http://10.10.10.101:8000\n}\n\nvmnoaslr.yookiterm.ch {\n        reverse_proxy http://10.10.10.102:8000\n}\n```\n\n`10.10.10.100` will run `yookiterm-server` (so this) in a container.\n\n`10.10.10.101` and `10.10.10.102` are VM's providing `yookiterm-lxdserver`.\n\n\n## Config file\n\nThings to update:\n* jwtsecret: A unique random string, keep it secret. **Use the same for yookiterm-lxdserver**!\n* admin_password\n* user_password\n* container_hosts\n* base_containers\n\n`yookiterm-server.yml`:\n```yml\njwtsecret: \"supersecret\"\nserver_addr: \"[::]:80\"\nserver_banned_ips:\nserver_url: \"https://my.website\"  # used for SSO\n\nchallenges_dir: \"../yookiterm-challenges\"\nslides_dir: \"../yookiterm-slides/\"\nfrontend_dir: \"../yookiterm/app/\"\n\nadmin_password: \"\u003cpw\u003e\"  # admin access\nuser_password: \"\u003cpw\u003e\"  # login without SSO, any username with this password\n\ngoogleId: \"\"\ngoogleSecret: \"\"\nazureId: \"\"\nazureSecret: \"\"\n\n# hostname is the public hostname/port of the VM hosting the relevant yookiterm-lxdserver\ncontainer_hosts:\n- hostnamealias: ubuntuaslr\n  hostname: container.my.website:41443\n  aslr: true\n  arch: intel\n  sshbaseport: 51000\n- hostnamealias: ubuntunoaslr\n  hostname: container.my.website:42443\n  aslr: false\n  arch: intel\n  sshbaseport: 52000\n#- hostnamealias: ubuntuarm\n#  hostname: container.my.website:43443\n#  aslr: true\n#  arch: arm\n#  sshbaseport: 53000\n\n# these containers are copied for each user on request\nbase_containers:\n- id: \"1\"\n  name: \"Debian32\"\n  bits: \"32\"\n- id: \"2\"\n  name: \"Debian64\"\n  bits: \"64\"\n\n```\n\n\n# Systemd Service \n\n```\ncp yookiterm.service /etc/systemd/system\nsystemctl enable yookiterm\nsystemctl start yookiterm\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdobin%2Fyookiterm-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdobin%2Fyookiterm-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdobin%2Fyookiterm-server/lists"}