Méthode sécurisée pour tuer un processus et tous ses descendants

Je crée un environnement sandbox sous Linux en utilisant apparmor , setrlimit , cap_set_rpoc pour permettre aux utilisateurs anonymes d’exécuter du code arbitraire sur mon serveur dans le contexte d’une application scientifique. Une chose spécifiquement autorisée dans le bac à sable est le lancement de nouveaux processus en falsifiant et en appelant des exécutables (bien que le nombre total de processus par un utilisateur soit limité par RLIMIT_NPROC ).

Après une période donnée, disons 1 minute, le système va tuer le processus principal et tous les enfants potentiels. Je me fie actuellement à l’identifiant du groupe de processus pour identifier les enfants. Cependant, en théorie, un processus enfant pourrait appeler setpgid pour changer son groupe de processus, de sorte qu’il ne soit plus affecté lorsque j’appelle kill(-1 * pid) sur l’ID de processus principal (correct?). Malheureusement, il n’y a pas de capability Linux que je peux configurer pour empêcher les processus d’appeler setpgid .

Quelle serait une manière robuste de tuer un processus et tous ses enfants (récursifs), ce qui rendrait très difficile pour les enfants d’éviter d’une manière ou d’une autre le massacre et de continuer comme processus orphelin?

Si vous utilisez lxc (conteneurs Linux) pour isoler chaque arborescence de processus, vous pouvez utiliser lxc-stop pour supprimer tous les processus d’un conteneur. Voir la section “Démarrage / Arrêt d’un conteneur” de la page de manuel de lxc .