Difference between revisions of "Изменения в версии 3.9.0"

From EjudgeWiki
(progress...)
(3.9.1 released)
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Разработка]]/[[История версий]]/[[Изменения в версии 3.9.0]]
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Разработка]]/[[История версий]]/[[Изменения в версии 3.9.0]]
  
Время выхода: г.
+
Время выхода: 27 декабря 2021 г.
  
[[Изменения в версии 3.8.0|Предыдущая версия]]
+
[[Изменения в версии 3.8.0|Предыдущая версия]] [[Изменения в версии 3.9.1|Следующая версия]]
 +
 
 +
[[Инсталляция ejudge на Fedora с нуля]]
  
 
[[Изоляция недоверенных процессов в контейнерах]]
 
[[Изоляция недоверенных процессов в контейнерах]]
Line 12: Line 14:
 
Это решает несколько проблем предыдущих версий:
 
Это решает несколько проблем предыдущих версий:
  
* Больше не требуется компиляция и инсталляция модифицированной
+
* Больше не требуется компиляция и инсталляция модифицированной версии ядра Linux.
версии ядра Linux.
+
* Поддерживается безопасное выполнение программ на языках программирования, которые ранее были "небезопасными", например, C#.
* Поддерживается безопасное выполнение программ на языках
+
* Поддерживается безопасная компиляция программ на C/C++ (includebin хак не работает).
программирования, которые ранее были "небезопасными",
 
например, C#.
 
* Поддерживается безопасная компиляция программ на C/C++ (includebin
 
хак не работает).
 
  
 
Для использования этой возможности потребуется несложная настройка
 
Для использования этой возможности потребуется несложная настройка
Line 49: Line 47:
  
 
Для поддержки безопасного выполнения программ добавился
 
Для поддержки безопасного выполнения программ добавился
атрибут <tt>force_container</tt> элемента <tt>config</tt>.
+
атрибут <code>force_container</code> элемента <code>config</code>.
  
 
Для поддержки безопасной компиляции программ добавился
 
Для поддержки безопасной компиляции программ добавился
атрибут <tt>enable_compile_container</tt> элемента <tt>config</tt>.
+
атрибут <code>enable_compile_container</code> элемента <code>config</code>.
  
 
Для поддержки аутентификации пользователей по протоколу OAUTH2
 
Для поддержки аутентификации пользователей по протоколу OAUTH2
добавился атрибут <tt>enable_oauth</tt> элемента <tt>config</tt>.
+
добавился атрибут <code>enable_oauth</code> элемента <code>config</code>.
  
 
=== [[contest.xml]] ===
 
=== [[contest.xml]] ===
  
Добавлены новые атрибуты в элемент <tt>contest</tt>:
+
Добавлены новые атрибуты в элемент <code>contest</code>:
  
* <tt>[[contest.xml:read_only_name|read_only_name]]</tt> &mdash;
+
* <code>[[contest.xml:read_only_name|read_only_name]]</code> &mdash; запрет редактирования поля <code>name</code>
запрет редактирования поля <tt>name</tt>
+
* <code>[[contest.xml:enable_oauth|enable_oauth]]</code> &mdash; разрешение входа в данный турнир по OAUTH2
* <tt>[[contest.xml:enable_oauth|enable_oauth]]</tt> &mdash;
+
* <code>[[contest.xml:enable_reminders|enable_reminders]]</code> &mdash; разрешение ежедневных уведомлений о неотвеченных сообщениях, неподтвержденных посылках.
разрешение входа в данный турнир по OAUTH2
 
* <tt>[[contest.xml:enable_reminders|enable_reminders]]</tt> &mdash;
 
разрешение ежедневных уведомлений о неотвеченных сообщениях,
 
неподтвержденных посылках.
 
  
Добавлен новый элемент <tt>[[contest.xml:oauth_rules|oauth_rules]]</tt>
+
Добавлен новый элемент <code>[[contest.xml:oauth_rules|oauth_rules]]</code>
элемента <tt>contest</tt>. Он позволяет управлять доступом
+
элемента <code>contest</code>. Он позволяет управлять доступом
 
пользователей с помощью OAUTH2.
 
пользователей с помощью OAUTH2.
  
Line 77: Line 71:
 
Новые параметры:
 
Новые параметры:
  
* <tt>allow_compile_error</tt> &mdash; на данном тесте компиляция должна
+
* <code>allow_compile_error</code> &mdash; на данном тесте компиляция должна завершиться с ошибкой, вместо сданного текста программы будет подставлена специальная заглушка.
завершиться с ошибкой, вместо сданного текста программы будет
 
подставлена специальная заглушка.
 
  
* <tt>max_rss_size</tt> &mdash; установить ограничение на RSS (использованный
+
* <code>max_rss_size</code> &mdash; установить ограничение на RSS (использованный объем оперативной памяти) для данного теста.
объем оперативной памяти) для данного теста.
 
  
 
=== [[ej-jobs]] ===
 
=== [[ej-jobs]] ===
Line 92: Line 83:
 
=== [[ej-super-run]] ===
 
=== [[ej-super-run]] ===
  
Добавлена опция командной строки <tt>-x</tt> которая позволяет
+
Добавлена опция командной строки <code>-x</code> которая позволяет
 
задавать пользователя, под которым будут исполняться тестируемые
 
задавать пользователя, под которым будут исполняться тестируемые
 
программы. Опция необходима, когда в рамках одного сервера
 
программы. Опция необходима, когда в рамках одного сервера
Line 98: Line 89:
  
 
Конфигурационная переменная задачи
 
Конфигурационная переменная задачи
<tt>[[serve.cfg:problem:enable_extended_info|enable_extended_info]]</tt>
+
<code>[[serve.cfg:problem:enable_extended_info|enable_extended_info]]</code>
 
поддерживается и для проверяющих программ.
 
поддерживается и для проверяющих программ.
 +
 +
=== [[ej-compile]] ===
 +
 +
В режиме компиляции в контейнерах программа ej-compile работает под обычным пользователем, а не под пользователем ejcompile.
  
 
=== [[ej-contests]] ===
 
=== [[ej-contests]] ===
Line 105: Line 100:
 
Новые конфигурационные переменные языков программирования:
 
Новые конфигурационные переменные языков программирования:
  
* <tt>[[serve.cfg:language:container_options|container_options]]</tt> &mdash;
+
* <code>[[serve.cfg:language:container_options|container_options]]</code> &mdash; позволяет задать дополнительные опции для запуска компилятора данного языка в контейнере.
позволяет задать дополнительные опции для запуска компилятора данного языка
 
в контейнере.
 
  
* <tt>[[serve.cfg:language:max_rss_size|max_rss_size]]</tt> &mdash; позволяет задать ограничение на максимальный потребленный объем оперативной памяти для компилятора.
+
* <code>[[serve.cfg:language:max_rss_size|max_rss_size]]</code> &mdash; позволяет задать ограничение на максимальный потребленный объем оперативной памяти для компилятора.
  
* <tt>[[serve.cfg:language:run_max_rss_size|run_max_rss_size]]</tt> &mdash; позволяет переопределить ограничение на максимальный потребленный объем оперативной памяти для всех программ на этом языке программирования.
+
* <code>[[serve.cfg:language:run_max_rss_size|run_max_rss_size]]</code> &mdash; позволяет переопределить ограничение на максимальный потребленный объем оперативной памяти для всех программ на этом языке программирования.
  
 
Новые конфигурационные переменные задач:
 
Новые конфигурационные переменные задач:
  
* <tt>[[serve.cfg:problem:allow_ip|allow_ip]]</tt> &mdash; позволяет задать ограничение на IP-адреса, с которых возможна сдача задачи.
+
* <code>[[serve.cfg:problem:allow_ip|allow_ip]]</code> &mdash; позволяет задать ограничение на IP-адреса, с которых возможна сдача задачи.
  
* <tt>[[serve.cfg:problem:enable_container|enable_container]]</tt> &mdash; включает выполнение программ в защищенном контейнере.
+
* <code>[[serve.cfg:problem:checker_max_rss_size|checker_max_rss_size]]</code> &mdash; задает ограничение на использованный объем оперативной памяти для проверяющих программ, интеракторов, программ оценивания.
  
* <tt>[[serve.cfg:problem:container_options|container_options]]</tt> &mdash; позволяет задать дополнительные опции для выполнения в контейнере.
+
* <code>[[serve.cfg:problem:checker_max_stack_size|checker_max_stack_size]]</code> &mdash; задает ограничение на стек для проверяющих программ, интеракторов, программ оценивания.
  
* <tt>[[serve.cfg:problem:lang_container_options|lang_container_options]]</tt> &mdash; позволяет задать дополнительные опции для выполнения в контейнере в зависимости от языка программирования.
+
* <code>[[serve.cfg:problem:checker_max_vm_size|checker_max_vm_size]]</code> &mdash; задает ограничение на размер виртуального адресного пространства для проверяющих программ, интеракторов, программ оценивания.
  
* <tt>[[serve.cfg:problem:max_rss_size|max_rss_size]]</tt> &mdash; позволяет задать ограничение на максимальный объем потребленной оперативной памяти.
+
* <code>[[serve.cfg:problem:checker_time_limit_ms|checker_time_limit_ms]]</code> &mdash; задает ограничение на процессорное время для проверяющих программ и программ оценивания.
  
* <tt>[[serve.cfg:problem:lang_max_rss_size|lang_max_rss_size]]</tt> &mdash; позволяет задать ограничение на максимальный объем потребленной оперативной памяти в зависимости от языка программирования.
+
* <code>[[serve.cfg:problem:container_options|container_options]]</code> &mdash; позволяет задать дополнительные опции для выполнения в контейнере.
  
* <tt>[[serve.cfg:problem:enable_control_socket|enable_control_socket]]</tt> &mdash; включает режим управления контейнером через сокет.
+
* <code>[[serve.cfg:problem:enable_container|enable_container]]</code> &mdash; включает выполнение программ в защищенном контейнере.
  
* <tt>[[serve.cfg:problem:checker_time_limit_ms|checker_time_limit_ms]]</tt> &mdash; задает ограничение на процессорное время для проверяющих программ, интеракторов, программ оценивания.
+
* <code>[[serve.cfg:problem:enable_control_socket|enable_control_socket]]</code> &mdash; включает режим управления контейнером через сокет.
  
* <tt>[[serve.cfg:problem:checker_max_vm_size|checker_max_vm_size]]</tt> &mdash; задает ограничение на размер виртуального адресного пространства для проверяющих программ, интеракторов, программ оценивания.
+
* <code>[[serve.cfg:problem:lang_container_options|lang_container_options]]</code> &mdash; позволяет задать дополнительные опции для выполнения в контейнере в зависимости от языка программирования.
  
* <tt>[[serve.cfg:problem:checker_max_stack_size|checker_max_stack_size]]</tt> &mdash; задает ограничение на стек для проверяющих программ, интеракторов, программ оценивания.
+
* <code>[[serve.cfg:problem:lang_max_rss_size|lang_max_rss_size]]</code> &mdash; позволяет задать ограничение на максимальный объем потребленной оперативной памяти в зависимости от языка программирования.
  
<tt>[[serve.cfg:problem:checker_max_rss_size|checker_max_rss_size]]</tt> &mdash; задает ограничение на использованный объем оперативной памяти для проверяющих программ, интеракторов, программ оценивания.
+
* <code>[[serve.cfg:problem:max_rss_size|max_rss_size]]</code> &mdash; позволяет задать ограничение на максимальный объем потребленной оперативной памяти.

Latest revision as of 10:54, 23 March 2022

Навигация: Главная страница/Система ejudge/Разработка/История версий/Изменения в версии 3.9.0

Время выхода: 27 декабря 2021 г.

Предыдущая версия Следующая версия

Инсталляция ejudge на Fedora с нуля

Изоляция недоверенных процессов в контейнерах

Поддерживается исполнение тестируемых программ в контейнере и компиляция программ в контейнере.

Это решает несколько проблем предыдущих версий:

  • Больше не требуется компиляция и инсталляция модифицированной версии ядра Linux.
  • Поддерживается безопасное выполнение программ на языках программирования, которые ранее были "небезопасными", например, C#.
  • Поддерживается безопасная компиляция программ на C/C++ (includebin хак не работает).

Для использования этой возможности потребуется несложная настройка системы ejudge, описанная в данном документе.

Аутентификация с помощью OAUTH2

Поддерживается аутентификация пользователей с помощью протокола OAUTH2. Поддерживается регистрация пользователей при первом входе по OAUTH2. В этой версии поддерживается аутентификация с помощью Google и VK. Для других OAUTH2-провайдеров потребуется написание соответствующего плагина.

ejudge-change-contests

Эта программа позволяет менять настройки нескольких турниров из командной строки. Можно открывать доступ к турнирам, закрывать доступ, добавлять привилегированных пользователей и т. п.

ej-suid-container

Эта программа реализует запуск других программ в контейнере.

ej-suid-update-scripts

Вспомогательная программа для обновления служебных программ, используемых для запуска программ на java, C#.

ejudge.xml

Для поддержки безопасного выполнения программ добавился атрибут force_container элемента config.

Для поддержки безопасной компиляции программ добавился атрибут enable_compile_container элемента config.

Для поддержки аутентификации пользователей по протоколу OAUTH2 добавился атрибут enable_oauth элемента config.

contest.xml

Добавлены новые атрибуты в элемент contest:

  • read_only_name — запрет редактирования поля name
  • enable_oauth — разрешение входа в данный турнир по OAUTH2
  • enable_reminders — разрешение ежедневных уведомлений о неотвеченных сообщениях, неподтвержденных посылках.

Добавлен новый элемент oauth_rules элемента contest. Он позволяет управлять доступом пользователей с помощью OAUTH2.

.inf-файлы

Новые параметры:

  • allow_compile_error — на данном тесте компиляция должна завершиться с ошибкой, вместо сданного текста программы будет подставлена специальная заглушка.
  • max_rss_size — установить ограничение на RSS (использованный объем оперативной памяти) для данного теста.

ej-jobs

Внешний интерфейс программы не изменился, но программа полностью переписана. Теперь используется UNIX-сокет вместо обмена данными через файлы.

ej-super-run

Добавлена опция командной строки -x которая позволяет задавать пользователя, под которым будут исполняться тестируемые программы. Опция необходима, когда в рамках одного сервера работают несколько экземпляров ej-super-run.

Конфигурационная переменная задачи enable_extended_info поддерживается и для проверяющих программ.

ej-compile

В режиме компиляции в контейнерах программа ej-compile работает под обычным пользователем, а не под пользователем ejcompile.

ej-contests

Новые конфигурационные переменные языков программирования:

  • container_options — позволяет задать дополнительные опции для запуска компилятора данного языка в контейнере.
  • max_rss_size — позволяет задать ограничение на максимальный потребленный объем оперативной памяти для компилятора.
  • run_max_rss_size — позволяет переопределить ограничение на максимальный потребленный объем оперативной памяти для всех программ на этом языке программирования.

Новые конфигурационные переменные задач:

  • allow_ip — позволяет задать ограничение на IP-адреса, с которых возможна сдача задачи.
  • checker_max_rss_size — задает ограничение на использованный объем оперативной памяти для проверяющих программ, интеракторов, программ оценивания.
  • checker_max_stack_size — задает ограничение на стек для проверяющих программ, интеракторов, программ оценивания.
  • checker_max_vm_size — задает ограничение на размер виртуального адресного пространства для проверяющих программ, интеракторов, программ оценивания.
  • checker_time_limit_ms — задает ограничение на процессорное время для проверяющих программ и программ оценивания.
  • container_options — позволяет задать дополнительные опции для выполнения в контейнере.
  • enable_container — включает выполнение программ в защищенном контейнере.
  • enable_control_socket — включает режим управления контейнером через сокет.
  • lang_container_options — позволяет задать дополнительные опции для выполнения в контейнере в зависимости от языка программирования.
  • lang_max_rss_size — позволяет задать ограничение на максимальный объем потребленной оперативной памяти в зависимости от языка программирования.
  • max_rss_size — позволяет задать ограничение на максимальный объем потребленной оперативной памяти.