Il existe plusieurs possibilités, en fonction du degré d'isolement souhaité.
Le plus simple est de faire confiance au code. Il semble que ce soit hors de question pour vous, sinon vous ne poseriez pas cette question.
L'étape suivante consiste à exécuter le code sur un compte d'utilisateur distinct, en tant que Vigneshwaren a suggéré . Si vous souhaitez restreindre l'accès au réseau à un compte d'utilisateur particulier, vous pouvez le faire au moyen de la procédure suivante iptables owner matching . Une fois cette opération effectuée, le compte de l'utilisateur peut être laissé en place ou supprimé, et tout processus s'exécutant sous l'égide de cet utilisateur peut être purement et simplement supprimé.
Une étape supplémentaire consiste à ajouter une prison chroot au compte d'utilisateur séparé. Cela peut poser des problèmes avec les bibliothèques ou les fichiers de configuration qui doivent être en place, mais s'il s'agit par exemple d'un pur exercice de calcul, cela peut être pratique. Cela permet de s'assurer que seuls les fichiers auxquels le code de l'élève doit pouvoir accéder sont accessibles à ce code.
L'étape finale consisterait à exécuter le code dans un environnement complètement séparé. On pense ici à une machine virtuelle, bien qu'un ordinateur physique séparé puisse accomplir la même chose. Le code peut s'exécuter dans un environnement totalement isolé, y compris lorsque le câble du réseau virtuel est débranché, et tout dommage qu'il pourrait causer, y compris le remplissage du disque ou l'utilisation d'une bombe à fourche, sera isolé au sein de la machine virtuelle et le pire qui puisse arriver est que vous deviez l'éteindre de force. Étant donné que la machine virtuelle disposera d'une installation de système d'exploitation totalement distincte, en particulier si vous supprimez la connexion réseau avant d'exécuter le logiciel, il ne peut y avoir de fuite de vos données sensibles. Avec une VM, vous pouvez utiliser des instantanés de disque pour vous permettre de revenir rapidement et facilement à un état connu après l'exécution du programme de chaque élève.
Tout dépend de l'endroit où vous placez vos élèves sur l'échelle effort-contre-confiance. Moins de confiance nécessite plus d'efforts de votre part pour veiller à ce que rien de mal ne se produise.