Доброго времени суток.
У меня за долгое время успешного использования ejudge в разных олимпиадах и сервисах накопилось два вопроса.
И оба из них связаны с поддержкой разных языков программирования в патче к ядру.
Первый — более технический и конкретный. Недавно один из участников попросил меня добавить на сервер поддержку языка Go.
Я попробовал воспользоваться как стандартным языковым скриптом для gccgo, так и google-версией. И в обоих случаях получал Run-Time даже на пустой программе. Результат strace везде был одинаковый.
Обе реализации Go пытались вызвать sigaltstack, получали от ядра EPERM, и крашились.
Есть ли какая-либо панацея от этого? Существует ли у кого-нибудь история успеха с поддержкой Go в безопасном режиме?
Второй вопрос — более общий. Насколько я понимаю, не существует никакого способа безопасного запуска .Net-программ в ejudge.
Однако я регулярно обращал внимание, что на большинстве соревнований, где используется ejudge, включена поддержка C#/Pascal ABC.Net, и других ЯП на основе .Net. Как организаторы соревнований выходят из ситуации, когда пользовательская программа способна нарушить работу тестирующего сервера на продолжительное время?
Спасибо за ответы.
Поддержка Go в ejudge
Re: Поддержка Go в ejudge
Нужно смотреть, какие системные вызовы используются в go. Запустить в обычном режиме под strace. Какой-нибудь sigaltstack можно и разрешить в безопасном режиме, вреда от него особого нет.
Для небезопасных языков можно (и нужно) использовать запуск под отдельным пользователем. В принципе, при запуске под отдельным пользователем можно настраивать разные cgroup и совсем изолировать процесс как в docker, но с этим нужно разбираться.
Для небезопасных языков можно (и нужно) использовать запуск под отдельным пользователем. В принципе, при запуске под отдельным пользователем можно настраивать разные cgroup и совсем изолировать процесс как в docker, но с этим нужно разбираться.