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

From EjudgeWiki
(...)
(progress...)
Line 6: Line 6:
  
 
[[Изоляция недоверенных процессов в контейнерах]]
 
[[Изоляция недоверенных процессов в контейнерах]]
 +
 +
Поддерживается исполнение тестируемых программ
 +
в контейнере и компиляция программ в контейнере.
 +
 +
Это решает несколько проблем предыдущих версий:
 +
 +
* Больше не требуется компиляция и инсталляция модифицированной
 +
версии ядра Linux.
 +
* Поддерживается безопасное выполнение программ на языках
 +
программирования, которые ранее были "небезопасными",
 +
например, C#.
 +
* Поддерживается безопасная компиляция программ на C/C++ (includebin
 +
хак не работает).
 +
 +
Для использования этой возможности потребуется несложная настройка
 +
системы ejudge, описанная в [[Изоляция недоверенных процессов в контейнерах|данном документе]].
  
 
[[Аутентификация с помощью OAUTH2]]
 
[[Аутентификация с помощью OAUTH2]]
 +
 +
Поддерживается аутентификация пользователей с помощью протокола OAUTH2.
 +
Поддерживается регистрация пользователей при первом входе по OAUTH2.
 +
В этой версии поддерживается аутентификация с помощью Google и VK.
 +
Для других OAUTH2-провайдеров потребуется написание соответствующего
 +
плагина.
  
 
=== [[ejudge-change-contests]] ===
 
=== [[ejudge-change-contests]] ===
  
Новая программа...
+
Эта программа позволяет менять настройки нескольких турниров
 +
из командной строки. Можно открывать доступ к турнирам,
 +
закрывать доступ, добавлять привилегированных пользователей и т. п.
  
 
=== [[ej-suid-container]] ===
 
=== [[ej-suid-container]] ===
  
Эта программа предназначена для исполнения тестируемых программ
+
Эта программа реализует запуск других программ в контейнере.
в контейнере.
 
  
 
=== [[ej-suid-update-scripts]] ===
 
=== [[ej-suid-update-scripts]] ===
  
новая программа
+
Вспомогательная программа для обновления служебных программ,
 +
используемых для запуска программ на java, C#.
  
 
=== [[ejudge.xml]] ===
 
=== [[ejudge.xml]] ===
  
force_container
+
Для поддержки безопасного выполнения программ добавился
enable_compile_container
+
атрибут <tt>force_container</tt> элемента <tt>config</tt>.
enable_oauth
+
 
 +
Для поддержки безопасной компиляции программ добавился
 +
атрибут <tt>enable_compile_container</tt> элемента <tt>config</tt>.
 +
 
 +
Для поддержки аутентификации пользователей по протоколу OAUTH2
 +
добавился атрибут <tt>enable_oauth</tt> элемента <tt>config</tt>.
  
 
=== [[contest.xml]] ===
 
=== [[contest.xml]] ===
  
<tt>[[contest.xml:read_only_name|read_only_name]]</tt>
+
Добавлены новые атрибуты в элемент <tt>contest</tt>:
<tt>[[contest.xml:enable_oauth|enable_oauth]]</tt>
+
 
<tt>[[contest.xml:oauth_rules|oauth_rules]]</tt>
+
* <tt>[[contest.xml:read_only_name|read_only_name]]</tt> &mdash;
<tt>[[contest.xml:enable_reminders|enable_reminders]]</tt>
+
запрет редактирования поля <tt>name</tt>
 +
* <tt>[[contest.xml:enable_oauth|enable_oauth]]</tt> &mdash;
 +
разрешение входа в данный турнир по OAUTH2
 +
* <tt>[[contest.xml:enable_reminders|enable_reminders]]</tt> &mdash;
 +
разрешение ежедневных уведомлений о неотвеченных сообщениях,
 +
неподтвержденных посылках.
 +
 
 +
Добавлен новый элемент <tt>[[contest.xml:oauth_rules|oauth_rules]]</tt>
 +
элемента <tt>contest</tt>. Он позволяет управлять доступом
 +
пользователей с помощью OAUTH2.
  
 
=== [[.inf-файлы]] ===
 
=== [[.inf-файлы]] ===
  
<tt>allow_compile_error</tt>
+
Новые параметры:
<tt>max_rss_size</tt>
+
 
 +
* <tt>allow_compile_error</tt> &mdash; на данном тесте компиляция должна
 +
завершиться с ошибкой, вместо сданного текста программы будет
 +
подставлена специальная заглушка.
 +
 
 +
* <tt>max_rss_size</tt> &mdash; установить ограничение на RSS (использованный
 +
объем оперативной памяти) для данного теста.
  
 
=== [[ej-jobs]] ===
 
=== [[ej-jobs]] ===
переписана
+
 
 +
Внешний интерфейс программы не изменился, но программа полностью
 +
переписана. Теперь используется UNIX-сокет вместо обмена данными
 +
через файлы.
  
 
=== [[ej-super-run]] ===
 
=== [[ej-super-run]] ===
  
<tt>[[serve.cfg:problem:enable_extended_info|enable_extended_info]]</tt> поддерживается для проверяющих программа
+
Добавлена опция командной строки <tt>-x</tt> которая позволяет
 +
задавать пользователя, под которым будут исполняться тестируемые
 +
программы. Опция необходима, когда в рамках одного сервера
 +
работают несколько экземпляров ej-super-run.
 +
 
 +
Конфигурационная переменная задачи
 +
<tt>[[serve.cfg:problem:enable_extended_info|enable_extended_info]]</tt>
 +
поддерживается и для проверяющих программ.
  
 
=== [[ej-contests]] ===
 
=== [[ej-contests]] ===
  
языки программирования:
+
Новые конфигурационные переменные языков программирования:
<tt>[[serve.cfg:language:container_options|container_options]]</tt>
+
 
<tt>[[serve.cfg:language:max_rss_size|max_rss_size]]</tt>
+
* <tt>[[serve.cfg:language:container_options|container_options]]</tt> &mdash;
<tt>[[serve.cfg:language:run_max_rss_size|run_max_rss_size]]</tt>
+
позволяет задать дополнительные опции для запуска компилятора данного языка
 +
в контейнере.
 +
 
 +
* <tt>[[serve.cfg:language:max_rss_size|max_rss_size]]</tt> &mdash; позволяет задать ограничение на максимальный потребленный объем оперативной памяти для компилятора.
 +
 
 +
* <tt>[[serve.cfg:language:run_max_rss_size|run_max_rss_size]]</tt> &mdash; позволяет переопределить ограничение на максимальный потребленный объем оперативной памяти для всех программ на этом языке программирования.
 +
 
 +
Новые конфигурационные переменные задач:
 +
 
 +
* <tt>[[serve.cfg:problem:allow_ip|allow_ip]]</tt> &mdash; позволяет задать ограничение на IP-адреса, с которых возможна сдача задачи.
 +
 
 +
* <tt>[[serve.cfg:problem:enable_container|enable_container]]</tt> &mdash; включает выполнение программ в защищенном контейнере.
 +
 
 +
* <tt>[[serve.cfg:problem:container_options|container_options]]</tt> &mdash; позволяет задать дополнительные опции для выполнения в контейнере.
 +
 
 +
* <tt>[[serve.cfg:problem:lang_container_options|lang_container_options]]</tt> &mdash; позволяет задать дополнительные опции для выполнения в контейнере в зависимости от языка программирования.
 +
 
 +
* <tt>[[serve.cfg:problem:max_rss_size|max_rss_size]]</tt> &mdash; позволяет задать ограничение на максимальный объем потребленной оперативной памяти.
 +
 
 +
* <tt>[[serve.cfg:problem:lang_max_rss_size|lang_max_rss_size]]</tt> &mdash; позволяет задать ограничение на максимальный объем потребленной оперативной памяти в зависимости от языка программирования.
 +
 
 +
* <tt>[[serve.cfg:problem:enable_control_socket|enable_control_socket]]</tt> &mdash; включает режим управления контейнером через сокет.
 +
 
 +
* <tt>[[serve.cfg:problem:checker_time_limit_ms|checker_time_limit_ms]]</tt> &mdash; задает ограничение на процессорное время для проверяющих программ, интеракторов, программ оценивания.
 +
 
 +
* <tt>[[serve.cfg:problem:checker_max_vm_size|checker_max_vm_size]]</tt> &mdash; задает ограничение на размер виртуального адресного пространства для проверяющих программ, интеракторов, программ оценивания.
 +
 
 +
* <tt>[[serve.cfg:problem:checker_max_stack_size|checker_max_stack_size]]</tt> &mdash; задает ограничение на стек для проверяющих программ, интеракторов, программ оценивания.
  
задачи:
+
<tt>[[serve.cfg:problem:checker_max_rss_size|checker_max_rss_size]]</tt> &mdash; задает ограничение на использованный объем оперативной памяти для проверяющих программ, интеракторов, программ оценивания.
<tt>[[serve.cfg:problem:allow_ip|allow_ip]]</tt>
 
<tt>[[serve.cfg:problem:enable_container|enable_container]]</tt>
 
<tt>[[serve.cfg:problem:container_options|container_options]]</tt>
 
<tt>[[serve.cfg:problem:lang_container_options|lang_container_options]]</tt>
 
<tt>[[serve.cfg:problem:lang_max_rss_size|lang_max_rss_size]]</tt>
 
<tt>[[serve.cfg:problem:max_rss_size|max_rss_size]]</tt>
 
<tt>[[serve.cfg:problem:enable_control_socket|enable_control_socket]]</tt>
 
<tt>[[serve.cfg:problem:checker_time_limit_ms|checker_time_limit_ms]]</tt>
 
<tt>[[serve.cfg:problem:checker_max_vm_size|checker_max_vm_size]]</tt>
 
<tt>[[serve.cfg:problem:checker_max_stack_size|checker_max_stack_size]]</tt>
 
<tt>[[serve.cfg:problem:checker_max_rss_size|checker_max_rss_size]]</tt>
 

Revision as of 13:06, 18 December 2021

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

Время выхода: г.

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

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

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

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

  • Больше не требуется компиляция и инсталляция модифицированной

версии ядра 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:

запрет редактирования поля name

разрешение входа в данный турнир по OAUTH2

разрешение ежедневных уведомлений о неотвеченных сообщениях, неподтвержденных посылках.

Добавлен новый элемент 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-contests

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

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

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

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

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

checker_max_rss_size — задает ограничение на использованный объем оперативной памяти для проверяющих программ, интеракторов, программ оценивания.