Компиляция под отдельным пользователем

From EjudgeWiki

Навигация: Главная страница/Система 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