- Auf dem Server installiere ich redis und Minio (S3-kompatibler Storage). Alle Schüler erhalten eine eigene Redis-DB und einen eigenen S3-Bucket.
- Jeder Schüler gibt mir seinen öffentlichen SSH-Schlüssel an (per Pull Request in eine YAML-Datei). Ich erstelle dann die Benutzer und hinterlege den SSH-Schlüssel.
- Auf dem Server können die Schüler dann ein kleines Monitoringsystem bestehend aus drei Komponenten laufen lassen: Konfiguration mit Redis als Speicherort (welche URLs wie gemonitored werden sollen), Monitoring (periodisches Prüfen der URLs) und Alerting (steuert einen Slack-Webhook an). Diese Services lassen sie dann einfach im Vordergrund laufen, d.h. nur während des Unterrichts. Die Logdaten vom Monitoring sollen dann in den S3-Bucket geschrieben werden (z.B. beim Beenden des Prozesses mit SIGTERM).
Viele Sachen muss ich noch klären, z.B. wie ich das mit dem Release der Software machen will. (Code via Git ziehen und lokal bauen, oder Artefakte vom Git-Server herunterladen.) Das bringe ich schon noch hin.
Bei anderen Sachen habe ich überhaupt keine Erfahrung. Hier wäre ich um einige Vorschläge von erfahrenen Sysadmins froh:
- Wie kann ich die Speicheressourcen pro User sinnvollerweise einschränken? Nimmt man dafür quota, oder gibt es da noch andere Alternativen?
- Für CPU- und Memory gibt es cgroups/slices. Hat jemand Erfahrungen damit gesammelt? Oder soll man das einfach mal laufen lassen und auf die Fairness des Schedulers vertrauen?
- Jeder Benutzer soll eine fixe Port-Range erhalten, z.B. von 17100-17199, die er binden kann. Nimmt man dafür iptables, oder wie konfiguriert man sowas?
- Was gibt es sonst noch sicherheitstechnisch so zu beachten? Natürlich sollen die Benutzer kein sudo können. fail2ban habe ich auch immer im Einsatz, obwohl das von einer Schule aus problematisch sein könnte. (Ein fehlerhaft authentifizierter Benutzer blockeirt die ganzes Klasse.)