Здравствуйте. Ситуация: есть программа-сервер на C, которая запускает программы-клиенты (не только бинарники, но и java апплеты и python скрипты) и общается с ними с помощью каналов (перенаправив stdin/stdout). Работает он по такой схеме: запускает все клиенты, приостанавливает их; по очереди восстанавливает, обменивается сообщениями и приостанавливает опять. Клиенты уже ограничены в памяти и времени отклика. У меня есть непосредственный доступ к исходному коду клиентов (я их обрабатываю/компилирую перед запуском сервера).
Проблема: не дать клиенту выполнить потенциально опасный код (fork, exec, write, работа с файловой системой, сетью, потоками и т.д., тоесть [практически] все системные вызовы). Если остановить клиента перед системным вызовом, сервер сам его завершит, поскольку клиент не сможет вовремя ответить. Я пересмотрел исходный код ejudge, там используется ptrace(0x4281, 0, 0, 0), но нужно устанавливать патч ядра. Как можно организовать подобную защиту?