Патч к ядру Linux

From EjudgeWiki
Revision as of 13:18, 18 June 2012 by Cher (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Навигация: Главная страница/Система ejudge/Патч к ядру Linux

Чтобы проверить правильность программы она должна быть запущена на выполнение. Если не предпринимать никаких специальных мер, программа будет выполняться с полномочиями обычного пользователя. Даже обычный пользователь системы Linux может сделать достаточно много: он может открывать любые доступные ему файлы и каталоги, может получать информацию о системе и других процессах, может порождать другие процессы, открывать сетевые соединения и пр. Эти операции не нужны программе, которая должна считывать данные со стандартного потока ввода и выводить результат на стандартный поток вывода, но могут использоваться для попыток взлома системы или приведения её в нерабочее состояние.

Можно попытаться настроить систему, чтобы запускать программу с изменённым корнем файловой системы, с квотированием дискового пространства и лимитированием доступных ресурсов, помещая её на компьютер, из которого внешняя сеть недоступна, аккуратно настраивая права доступа к файлам. Это сложно и чревато ошибками, и при этом не может запретить выполнения некоторых операций.

Данный патч к ядру Linux позволяет решить эту проблему с другой стороны. Она позволяет во время выполнения процесса отнимать у него права на выполнение большинства операций с файловой системой, процессами и пр. Такой "бесправный" процесс может только читать из уже открытых файловых дескрипторов, записывать в открытие файловые дескрипторы, получать минимум информации о себе и системе, устанавливать обработчики сигналов и обрабатывать их. Процесс не может открывать файлов, каталогов, порождать другие процессы, создавать сетевые соединения. Такой режим работы процесса называется безопасным.

Начиная с версии 2.4.31-chеr2 патч добавляет в ядро следующие полезные свойства:

  • Поддержка ограничения процессорного времени с точностью до миллисекунды.
  • Поддержка жёсткого контроля размера адресного пространства процесса и размера стека процесса.

Патч для серии ядер 2.6 реализует все возможности патча 2.4.31-chеr2. Начиная с версии 2.6.23 поддерживается обнаружение ошибки Security Violation.

Начиная с версии 2.6.30-cher1 поддерживается обнаружение превышения максимального времени выполнения процесса непосредственно в ядре. В случае, если процесс снимается с выполнения из-за превышения времени выполнения, устанавливается флаг, доступный другим процессам через статус завершения процесса. Эта возможность призвана устранить проблему неточного распознавания ошибки превышения максимального времени выполнения процесса на нагруженных системах.

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

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

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