Il modo semplice per formare sandbox (presupponendo Linux come sistema operativo server, che è comune per ACM) è l'uso di chroot (antico) o di alcune patch del kernel. Ci sono alcune tecniche di sandboxing più avanzate nel kernel ora, ad esempio:
seccomp - Linux 2.6.12+ - processo può chiedere OS utilizzando speciale prset
chiamata, per limitare le capacità di processo: in uscita, lettura e scrittura già file aperti. Il sistema operativo si rifiuterà di fare qualsiasi altra chiamata di sistema che isola in modo efficace il programma dal mondo esterno. E non c'è modo di ripristinare queste funzionalità. (Questa soluzione può rompere alcune lingue progressive come Python, Perl, Ruby ecc che vuole caricare alcuni plugin in fase di esecuzione.) Isolamento
namespace - cgroups. chroot è un programma per modificare (isolare) solo lo spazio dei nomi del filesystem, e ci sono altri spazi dei nomi, ad es. rete o processo. Usando i cgroup possiamo limitare più del possibile usando solo chroot.
Alcune patch del kernel, scritto per i giudici on-line, per esempio * ejudge.ru ha patch per 2.6.38.8, 3.4.15, 3.7.5; e anche alcune soluzioni per Windows. (Il sito in russo.) Penso che questo sistema possa essere usato in alcuni concorsi in Russia, non sono sicuro di circa 1/4 ACM ICPC.
Alcuni sistemi di giudice utilizzano il syscall ptrace()
- in altre parole, agiscono come debugger per il programma testato e Judge può controllare tutte le syscalls e possono annullare qualsiasi di esse senza passarle nel kernel.
E ci sono sistemi di giudice open source, ad es. https://openjudge.net/ (libsandbox)
Che cos'è esattamente un carcere di chroot? –
È un ambiente disponibile in alcuni sistemi UNIX che consente l'esecuzione di un programma senza alcun accesso al file system completo. I processi in esecuzione all'interno della prigione vedono una determinata sottodirectory come directory principale e non possono accedere a nulla al di fuori di essa. In particolare, una chiamata di sistema imposta la directory radice fasulla e tutti i processi figli la ereditano. – thirtyseven