Difference between revisions of "Компиляция под отдельным пользователем"
(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