Łatwy sposób tworzenia piaskownicy (przy założeniu, że Linux jako system operacyjny, który jest wspólny dla ACM), używa (starożytnego) chroota lub niektórych łat jądra. Istnieje kilka zaawansowanych technik Piaskownica w jądrze teraz, na przykład:
seccomp - Linux 2.6.12+ - proces może poprosić OS za pomocą specjalnego prset
połączenia, aby ograniczyć możliwości technologicznych do: wyjściu, czytania i pisania już otwarte pliki. OS odmówi wykonania jakiegokolwiek innego wywołania systemowego, skutecznie izolując program od świata zewnętrznego. I nie ma sposobu, aby zresetować te możliwości. (To rozwiązanie może złamać niektóre języki progresywne, takie jak python, perl, ruby itp., Które chcą załadować niektóre wtyczki podczas pracy.)
Izolacja przestrzeni nazw - cgroups. chroot to program do zmiany (wyizolowania) tylko obszaru nazw systemu plików, a istnieją także inne przestrzenie nazw, np. sieć lub proces. Używając cgroups możemy ograniczyć więcej niż to możliwe, używając tylko chroot.
Niektóre łatki na jądro napisane dla sędziów online, np. * ejudge.ru ma łatki do 2.6.38.8, 3.4.15, 3.7.5; a także niektóre rozwiązania dla Windows. (Strona w języku rosyjskim.) Myślę, że ten system może być używany w niektórych konkursach w Rosji, nie jestem pewien co do 1/4 ACM ICPC.
Niektóre systemy sędziowskie używają systemu ptrace()
syscall - innymi słowy, działają jak debugger dla testowanego programu, a sędzia może kontrolować wszystkie syscalls i może anulować dowolne z nich bez przekazywania go do jądra.
Istnieją także systemy sędziowskie typu open-source, np. https://openjudge.net/ (libsandbox)
Czym dokładnie jest więzienie chroot? –
Jest to środowisko dostępne w niektórych systemach UNIX, które pozwala na uruchomienie programu bez dostępu do pełnego systemu plików. Procesy działające wewnątrz więzienia widzą pewien podkatalog jako katalog główny i nie mają dostępu do niczego poza nim. W szczególności wywołanie systemowe ustawia fałszywy katalog główny, a wszystkie procesy potomne dziedziczą go. – thirtyseven