Difference between revisions of "Компиляция под отдельным пользователем"

From EjudgeWiki
(Created page with "Навигация: Главная страница/Система ejudge/Использование/Компиляция под отдельным п...")
 
 
Line 1: Line 1:
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Компиляция под отдельным пользователем]]
 
Навигация: [[Main Page|Главная страница]]/[[Система 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

Latest revision as of 22:25, 2 January 2019

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