Компиляция под отдельным пользователем
Навигация: Главная страница/Система ejudge/Использование/Компиляция под отдельным пользователем
При компиляции программы обычно на компилятор не накладывается никаких ограничений доступа к локальным ресурсам. Поэтому злонамеренная программа может получить информацию об окружении компиляции, в частности о тестирующей системе и системных настройках, которая не должна быть доступной для пользователя, сдающего решения на проверку. Поэтому желательно, чтобы и компиляция программ выполнялась в изолированном окружении, например, виртуальной машине или контейнере. Самый простой способ достичь минимального уровня изоляции процесса компиляции от основной тестирующей системы - это выполнять компиляцию программ под отдельным пользователем.
Компиляция под отдельным пользователем поддерживается в ejudge с версии Изменения в версии 3.7.9. В данном документе описывается настройка режима компиляции под отдельным пользователем.
В дальнейшем мы предполагаем, что все процессы ejudge работают под пользователем ejudge. Это будет основной пользователь ejudge.
Создание пользователя
Предположим, что компиляция будет выполняться под пользователем ejcompile, находящимся в группе ejcompile. Для создания пользователя и группы выполните из-под пользователя root следующие команды:
groupadd ejcompile useradd -c 'ejudge compiler' -g ejcompile -s /sbin/nologin -M -d /home/judges/compile ejcompile usermod -a -G ejcompile ejudge
Последняя команда добавляет пользователя ejudge в группу ejcompile. Это нужно, чтобы ej-contests и ej-compile могли обмениваться файлами.
Конфигурирование ejudge
Для включения режима компиляции под отдельным пользователем необходимо добавить опции в командную строку configure, запускаемую при сборке ejudge из исходных кодов.
Например, на fedora linux для компиляции ejudge в строку configure могут передаваться следующие параметры:
./configure --prefix=/opt/ejudge --enable-charset=utf-8 --with-httpd-cgi-bin-dir=/var/www/cgi-bin --with-httpd-htdocs-dir=/var/www/html --enable-ajax --enable-local-dir=/var/lib/ejudge --enable-hidden-server-bins --enable-werror --with-primary-user=ejudge --with-exec-user=ejexec --with-compile-user=ejcompile
Добавились параметры --with-primary-user, --with-exec-user, --with-compile-user. --with-primary-user задает основного пользователя, под которым работают процессы ejudge. --with-compile-user задает пользователя, под которым работает сервис компиляции ej-compile. --with-exec-user задает пользователя, под которым выполняется запуск тестируемых программ. Пока аргумент --with-exec-user игнорируется, пользователь ejexec фиксирован в исходном коде соответствующих утилит.
Если указана опция --with-compile-user утилита ej-compile-control, управляющая запуском и остановкой сервиса компиляции ej-compile, должна иметь права SUID-root. Поэтому после выполнения обычной команды
make install
выполните команду
make suidperms
которая установит необходимые права доступа на ej-compile-control.
Запуск и остановка ejudge
Запуск и остановка ejudge выполняется обычными командами ejudge-control. При первой остановке ejudge после обновления убедитесь, что процесс ej-compile был остановлен и отсутствует в списке процессов. Если это не так, убейте его вручную с помощью kill или killall
killall ej-compile