Ejudge компилирует и запускает программы на стороне сервера, что чревато последствиями с точки зрения безопасности. Программа, запущенная с обычными правами, без особых привилегий, может выполнить множество действий, такие как: открытие файлов, запуск сетевых процессов, операции с процессами и другое.
Чтобы ограничить программу, необходимо запустить ее в изолированной среде с минимальными правами. Для этого системы для проведения олимпиад используют различные варианты защиты. Например CMS использует isolate для запуска ненадежных исполняемых файлов. Он использует преимущества функций, характерных для ядра Linux, такие как пространства имен и группы управления.
В системе ejudge для безопасного запуска используется патч на ядро системы. С помощью патча отнимаются права на большинство операций, оставляя минимум прав для корректной работы.
Данный патч не обязателен для функционирования системы. При обнаружении патча, система автоматически включит его возможности.
Патч реализован для архитектур i386 и x86_64.
Более подробно можете прочитать тут:
- https://ejudge.ru/wiki/index.php/Патч_к_ядру_Linux
- https://odscpp.wordpress.com/2011/08/25/продолжаем-устанавливать-ejudge/
К сожалению, не исключены случаи, когда операционная система может перестать реагировать и не включиться после установки. Делайте на свой страх и риск.
1. Установка необходимых библиотек для компилирования
apt install kernel-package
Нажмите keep the local version currently installed
2. Скачивание и распаковка исходного кода ядра linux
Версию своего ядра можно узнать по команде
uname -srm
Например, скачиваем версию 2.6.26.3
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.3.tar.bz2
tar xvzf linux-2.6.26.3.tar.bz2
3. Скачивание и применение патча
Все доступные патчи доступны по ссылке
cd linux-2.6.26.3
wget http://www.ejudge.ru/download/linux-2.6.26.3-2.6.26.3-cher1.diff
patch -p1 < linux-2.6.26.3-2.6.26.3-cher1.diff
4. Конфигурация
Можно и желательно также скопировать конфигурационный файл от текущего ядра
cp /boot/config-ВЕРСИЯ-ЯДРА ./.config
make menuconfig
Загружаем текущую конфигурацию выбрав пункт Load Alternate Config File и вводим .config
Сохраняем настройки в .config через пункт Save Alternate Config File
5. Компиляция
make-kpkg --initrd kernel_image kernel_headers
Чтобы ускорить компиляцию, можно добавить параметр CONCURRENCY_LEVEL - который задает количество одновременных компиляций. Он должен равняться числу ядер в процессоре плюс 1 или 2
Например для двуядерного процессора:
CONCURRENCY_LEVEL=3 make-kpkg --initrd kernel_image kernel_headers
Узнать количество ядер можно по команде
cat /proc/cpuinfo | grep processor | wc -l
6. Установка
cd ..
dpkg --install linux-headers-2.6.26.3* linux-image-2.6.26.3*
После окончания перезагружаем сервер