Bring Your Class: Groups, Weekly Goals, and the Real Linux Commands to Run Them

CLI-Games now has groups: one link brings a whole class in (no accounts needed on day one), every game gets a group leaderboard, and a weekly goal gives everyone a reason to come back. You run it all with groupadd, newgrp and gpasswd.

coauthored by Frank S. and Claude Opus 5.5
groupsclassroomteachinglinuxctfeducationcommunity

Bring Your Class

In September, classes started finding us on their own. A whole class would show up at once and work through the same first exercises side by side.

Then the lesson ended, and each of those students was on their own again. Nothing on the site knew they had arrived together. Nothing gave them a reason to come back later in the week, and most of them didn't.

So we built groups.

One link, a whole room

A teacher (or a club lead, or whoever organizes the friends) creates a group and shares one link. Anyone who opens it joins with a single click, with or without an account. A student who has never been here plays as a guest under a generated handle. If they decide to stay, registering turns the guest into their account: their scores and their seat in the group come with it.

No signup wall to get into the room. For the CTF training, students should register before they start (it takes an email address and a code): work done as a guest isn't verified by the server, so it can't count toward a module goal and counts only in part toward a training goal.

The commands are the lesson

Groups use the real Linux commands for groups. That isn't a gimmick: the commands you use to run your class have the same names and shapes as the ones you'd use to administer a Linux machine.

$ groupadd cs101
group cs101 created (gid 2001)
  join code: 7QX-4PM
  link:      https://www.cli-games.com/join/...
  page:      https://www.cli-games.com/groups/cs101

$ getent group cs101 cs101:x:2001:grace,ada,linus,margaret

$ gpasswd -A ada cs101 # set the administrators (here, just ada) $ gpasswd cs101 # issue a new code and link $ gpasswd -r cs101 # close the group to new members

On Linux, newgrp asks for the group's password. Here it asks for the join code, and the prompt says Password: because that is what the real tool says. A student who joins with newgrp has just used a command that will be waiting for them on every Linux box they ever touch.

The one command Linux doesn't have is goal. We invented that one, and it says so in its man page.

A reason to come back: the weekly goal

The class data told us what was missing: a reason to return that wasn't "the teacher assigned it". So a group can have a goal, set by its organizer, that runs for a week:

goal set cs101 training 40          # clear 40 CTF training scenarios together
goal set cs101 dailies 20           # finish 20 daily challenges together
goal set cs101 module linux-basics  # everyone finishes Linux Basics

Students see it when they sign in at the terminal, under groups, and at the top of the group page:

cs101: 23/40 training scenarios this week · 5 days left

Two details matter in a classroom. The teacher isn't counted. A class goal belongs to the class, so the owner and administrators are left out by default; goal include cs101 ada counts a student who happens to be an administrator back in. A finished module is proven. For a module goal, a student counts once the server has verified their work (the module's checkpoint exam, or every scenario if it has none), not because a page said "level complete". That also means a module goal counts registered students: a guest's work can't be verified until they have an account.

Boards made of people you know

Every game with a score board now has a group board:

leaderboard minesweeper group cs101
leaderboard wordie group cs101

A low spot on a global board isn't much of a reason to try again. Being two points behind the person sitting next to you is a very good one.

The group page, /groups/cs101, shows everyone's CTF training, Range solves, daily challenges and crowns in one table, so a teacher can see in a glance who has started and who is stuck.

Privacy, stated plainly

  • Before anyone joins, they're told what the group will see: their handle and their progress in the group, including its boards.
  • The group page is for members only, and so are the boards. Nobody outside the group can find out who is in it.
  • A player who turns on incognito shows as private on the group page and is left out of goal counts.
  • A guest left unused for 48 hours is retired, and its seat in the group goes with it. Registering keeps it.

Try it with your class

The Groups walkthrough covers everything step by step, including a plan for a class's first week. The short version:

1. groupadd your group. 2. goal set something everyone can reach in a week (the CTF Orientation module is a good first one). 3. Put the link on the screen, and have students register before they start the training.

If you run a class here, we'd love to hear how it goes. Type bugreport in the terminal and it comes straight to us, good news included.