Files
44r0n7 0265afa054 chore: bootstrap lean sysadmin-chronicles repo
Import the runnable game code, content, docs, scripts, and repo guidance while leaving local agent state, dependency installs, build output, and backup copies out of the published tree.
2026-05-02 11:49:07 -04:00

101 lines
4.6 KiB
JSON

{
"id": "Q001",
"title": "Welcome Aboard",
"tier": 1,
"primary_vm": "workstation",
"required_vms": ["workstation"],
"ticket_id": "T001",
"baseline_snapshot": "baseline.day-one",
"summary": "The player's first task. Their SSH key was never added to the workstation's authorized_keys during provisioning. Marcus walks them through where things are. The fix is trivial but teaches navigation and file inspection.",
"clue_fingerprint": {
"description": "SSH key is missing from authorized_keys. The provisioning script ran but the key was never appended. Evidence is visible in ~/.ssh/authorized_keys being absent entirely and in /var/log/auth.log showing permission denied publickey.",
"evidence": [
{ "type": "file_absent", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys" },
{ "type": "log_contains", "vm": "workstation", "path": "/var/log/auth.log", "contains": "Permission denied (publickey)" }
]
},
"objectives": [
{
"id": "ssh-dir-exists",
"description": "Ensure the .ssh directory exists with correct permissions",
"check_mode": "passive",
"validation": {
"type": "and",
"rules": [
{ "type": "directory_exists", "vm": "workstation", "path": "/home/player/.ssh" },
{ "type": "file_mode", "vm": "workstation", "path": "/home/player/.ssh", "mode": "0700" }
]
}
},
{
"id": "authorized-key-present",
"description": "Add the provided public key to authorized_keys",
"check_mode": "passive",
"validation": {
"type": "and",
"rules": [
{ "type": "file_exists", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys" },
{ "type": "file_mode", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys", "mode": "0600" },
{ "type": "file_owner", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys", "user": "player", "group": "player" }
]
}
}
],
"solution_branches": [
{
"id": "correct-setup",
"label": "Correct Setup",
"priority": 100,
"validation": {
"type": "and",
"rules": [
{ "type": "file_exists", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys" },
{ "type": "file_mode", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys", "mode": "0600" },
{ "type": "file_mode", "vm": "workstation", "path": "/home/player/.ssh", "mode": "0700" },
{ "type": "file_owner", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys", "user": "player", "group": "player" }
]
},
"trust_delta": 1,
"world_flags": ["player_ssh_configured"],
"follow_up_dialogue": "marcus-Q001-complete-clean",
"follow_up_ticket": "T002"
},
{
"id": "permissive-setup",
"label": "Permissive Setup",
"priority": 50,
"validation": {
"type": "and",
"rules": [
{ "type": "file_exists", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys" },
{ "type": "file_owner", "vm": "workstation", "path": "/home/player/.ssh/authorized_keys", "user": "player", "group": "player" }
]
},
"trust_delta": 0,
"world_flags": ["player_ssh_configured", "player_loose_permissions"],
"follow_up_dialogue": "marcus-Q001-complete-permissive",
"follow_up_ticket": "T002",
"_note": "Key is present and owned correctly but permissions are too open. SSH will still reject it. Marcus will mention this later."
}
],
"pressure_profile": null,
"blast_radius": [],
"unlock_requirements": [],
"narrative_phase": "normal_work",
"linux_concepts": ["ssh-keygen", "authorized_keys", "file permissions"],
"failure_conditions": ["SSH keys not added", "authorized_keys permissions too broad"],
"behavior_impact": {
"correct-setup": { "curiosity_delta": 0, "obedience_delta": 1, "risk_delta": 0, "suspicion_delta": 0 },
"permissive-setup": { "curiosity_delta": 0, "obedience_delta": 0, "risk_delta": 1, "suspicion_delta": 1 },
"default": { "curiosity_delta": 0, "obedience_delta": 0, "risk_delta": 0, "suspicion_delta": 0 }
},
"hidden_hook": null,
"access_requirements": {
"minimum_access": { "workstation": "basic_user" },
"requires_root": false,
"temporary_grants_allowed": []
},
"tags": ["onboarding", "ssh", "permissions", "workstation"],
"internal_notes": "This quest has no time pressure and no incidents. It is purely tutorial. Marcus is present and talkative. The only failure mode is giving up, which cannot happen mechanically."
}