использовать namespace и cgroups или seccomp для реализации онлайн судьи? - PullRequest
0 голосов
/ 05 апреля 2019

Я пишу онлайн-судью (поддержка C / C ++ 、 GoLang). Я хочу реализовать песочницу самостоятельно. моя идея:

  1. пространство имен и группы

    • статически компилировать исходный код пользователя
    • запустить исполняемый файл в совершенно новом пространстве имен (CLONE_NEWUSER, CLONE_NEWNET, CLONE_NEWPID, CLONE_NEWIPC, CLONE_NEWUTS, CLONE_NEWNS)
    • используйте PivotRoot для установки нового корня (ничего в корне, кроме исполняемого файла)
    • использовать cgroups для управления ресурсом (память / процессор / pid)
    • установить время ожидания (используйте time.AfterFunc от GoLang)
    • из-за ограничения ресурсов и заполнения нового пространства имен я не буду фильтровать системные вызовы
  2. Seccomp

    • использовать seccomp для фильтрации неправильных системных вызовов
    • установить тайм-аут и ограничить память

онлайн-судья пишет для моей школы. нет секретных данных о том, где работает моя песочница.

какой из них лучше или безопаснее? или любая другая хорошая идея?

...