Ciò di cui hai bisogno è relativamente semplice: devi assicurarti che gli account non privilegiati dei tuoi studenti siano ben confinati. Se non si dispone di un ambiente grafico, la situazione è relativamente semplice. Dovresti iniziare implementando le seguenti azioni:
- assicurati che gli utenti vengano creati senza privilegi amministrativi (nessun
sudo
, nessun admin
o wheel
gruppo)
- assicurati che gli utenti non siano in grado di emulare una schermata di accesso per falsificare la schermata di accesso (un classico per l'università, che ho visto accadere)
- verifica la corretta politica
polkitd
che impedisce agli utenti di sospendere / arrestare l'host
- assicurati di non eseguire servizi vulnerabili / obsoleti
suid
/ sgid
sull'host ( vedi come elencarli )
- assicurati che nessun singolo utente possa esaurire le risorse del sistema (configurando Systemd.cgroup imporre limiti di utilizzo delle risorse sull'intera sessione di ciascun utente)
- rafforza il tuo controllo di accesso obbligatorio installando e configurando correttamente SELinux (per limitare gli studenti a un ruolo da studente in cui possono scrivere solo nella loro casa e in / tmp)
- scadono gli account quando necessario per evitare indugiare sugli account con password eventualmente compromesse ( vedi questa domanda sul sito Unix )
- puoi persino eseguire sessioni degli studenti in contenitori separati usando Systemd.nspawn che è progettato per essere eseguito sistemi completamente funzionanti indipendentemente l'uno dall'altro, utilizzando spazi dei nomi Linux . Questo è il modo corretto di imprigionare una sessione, non
chroot
Potresti quindi notare che gli studenti usano le macchine per scopi diversi da quelli consentiti. Puoi limitare l'accesso alle macchine a orari specifici utilizzando pam_time
sebbene ciò possa intralciare il lavoro degli studenti e dovrebbe essere bilanciato con i benefici che offre. Inoltre, assicurati che gli amministratori di rete sappiano quale traffico aspettarsi su questo host in modo che possano rilevare il traffico indesiderato.
Tutto ciò detto, non vedo il punto in bianco - elencando binari specifici (inutile dato che gli studenti possono compilare ed eseguire il proprio codice) in quanto potrebbe intralciare il modo in cui gli studenti utilizzano strumenti di sviluppo legittimi, ad es. compilatori alternativi, toolchain di costruzione, strumenti di analisi del codice, strumenti per il controllo delle versioni del codice, ecc.
Finché gli utenti possono solo danneggiare se stessi e tu hai delle forti garanzie di ciò, il lavoro è fatto. In ogni caso, questo non è esattamente un sistema di produzione a lungo termine, gli studenti lo usano solo per scherzare con il codice educativo.