3. Ajuster les limites

Les règles de bac à sable empêchent la sandboxee d'appeler des appels système spécifiques, ce qui réduit la surface d'attaque. Cependant, un pirate informatique peut toujours provoquer des effets indésirables en exécutant un processus indéfiniment ou en épuisant la mémoire RAM et d'autres ressources.

Pour contrer cette menace, le bac à sable s'exécute par défaut avec des limites d'exécution strictes. Si ces limites par défaut entraînent des problèmes d'exécution légitime de votre programme, vous pouvez les ajuster à l'aide de la classe sandbox2::Limits en appelant limits() sur l'objet exécuteur.

L'extrait de code ci-dessous présente quelques exemples d'ajustements des limites. Toutes les options disponibles sont documentées dans le fichier d'en-tête limits.h.

// Restrict the address space size of the sandboxee to 4 GiB.
executor->limits()->set_rlimit_as(4ULL << 30);
// Kill sandboxee with SIGXFSZ if it writes more than 1 GiB to the filesystem.
executor->limits()->set_rlimit_fsize(1ULL << 30);
// Number of file descriptors which can be used by the sandboxee.
executor->limits()->set_rlimit_nofile(1ULL << 10);
// The sandboxee is not allowed to create core files.
executor->limits()->set_rlimit_core(0);
// Maximum 300s of real CPU time.
executor->limits()->set_rlimit_cpu(300);
// Maximum 120s of wall time.
executor->limits()->set_walltime_limit(absl::Seconds(120));

Pour obtenir un exemple d'utilisation de la classe sandbox2::Limits, consultez l'exemple d'outil.