Патч К Ядру Для Ejudge

Ejudge компилирует и запускает программы на стороне сервера, что чревато последствиями с точки зрения безопасности. Программа, запущенная с обычными правами, без особых привилегий, может выполнить множество действий, такие как: открытие файлов, запуск сетевых процессов, операции с процессами и другое.

Чтобы ограничить программу, необходимо запустить ее в изолированной среде с минимальными правами. Для этого системы для проведения олимпиад используют различные варианты защиты. Например CMS использует isolate для запуска ненадежных исполняемых файлов. Он использует преимущества функций, характерных для ядра Linux, такие как пространства имен и группы управления.

В системе ejudge для безопасного запуска используется патч на ядро системы. С помощью патча отнимаются права на большинство операций, оставляя минимум прав для корректной работы.

Данный патч не обязателен для функционирования системы. При обнаружении патча, система автоматически включит его возможности.

Патч реализован для архитектур i386 и x86_64.

Более подробно можете прочитать тут:

К сожалению, не исключены случаи, когда операционная система может перестать реагировать и не включиться после установки. Делайте на свой страх и риск.

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. Скачивание и применение патча

Все доступные патчи доступны по ссылке

http://www.ejudge.ru/download/

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*

После окончания перезагружаем сервер