Как ограничить возможности процесса? - PullRequest
1 голос
/ 25 июня 2011

Я пишу своего рода универсальную систему борьбы для решений ACM (таких как TopCoder, Timus и другие). Когда пользователь отправляет свое решение через веб-сервис, мне нужно запустить / скомпилировать его. И я хочу установить для него ограничения, чтобы обеспечить их безопасную работу (нет доступа к внешним файлам, нет возможности получить системное время, невозможно изменить рабочий каталог и т. Д.) Существует два вида пользовательских решений:

  • решения, которые могут быть скомпилированы (aka c / c ++ / pascal), а также решения jit-ed и bytecode (c #, java)

  • интерпретируемые решения (lisp / ruby ​​/ python / php)

Система борьбы написана на C # для .NET 3.5. Contester может работать в Linux на Mono и в Windows на .NET.

Какой лучший способ сделать это? Если есть возможность ограничить скомпилированные решения (используя PermissionAttributes), но я не знаю, как ограничить интерпретируемые решения.

1 Ответ

0 голосов
/ 26 июня 2011

Самый простой (видимо, вам нужно полное доверие) - запустить под очень ограниченной учетной записью пользователя. Гостевая учетная запись IIRC не может быть использована для этого.

Редактировать:

Чистая ВМ может быть идеальной.

...