Как начать работать с libsandbox
Я пытаюсь написать простой судья, который будет компилировать и выполнять пользовательские c файлы. Я нашел libsandbox и вопрос здесь о stackru.
Я установил модуль Python и в соответствии с инструкциями я пытаюсь запустить программу Hello World, написанную на C
➜ sandbox git:(V_0_3_x) ✗ ./hello
Hello World%
➜ sandbox git:(V_0_3_x) ✗ python sample2.py hello
result: RF
cpu: 2ms
mem: 288kB
Как вы можете видеть, когда я запускаю программу в песочнице, я ничего не получаю. Было бы замечательно, если бы кто-нибудь сказал мне, как правильно его использовать.
2 ответа
Пример кода libsandbox
запрещает системные вызовы для файловых операций, таких как open()
, stat()
, close()
, Тем не менее, вам нужно либо (1) связать программу hello world статически, чтобы избежать открытия файлов, таких как общие библиотеки (т.е. libc.so
) или (2) написать настраиваемую политику изолированной программной среды, которая разрешает соответствующие системные вызовы. Некоторые примеры настройки политик песочницы можно найти по адресу https://github.com/liuyu81/TR-OJA-201209A.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я автор libsandbox
,
Код результата RF был наиболее вероятен из-за неожиданных системных вызовов для файловых операций (то есть SYS_open(), SYS_close(), SYS_stat(), ...). Это происходит, когда (1) целевая программа фактически выполняет файловые операции, и (или) когда (2) она была динамически связана и должна загружать библиотеки.so во время выполнения. Поскольку ваша целевая программа не вызывает файловые операции, она относится к последнему случаю.
Затем, чтобы решить исход РФ, либо
статически связать целевую программу, чтобы избежать зависимостей от разделяемых библиотек; или расширить правила политики в скрипте-оболочке для обработки соответствующих событий SYSCALL / SYSRET;
Для статического связывания системных вызовов мы используем коды системных вызовов, например, 0,1,2 3-sys_read 1-sys_exit и т. Д. Перейдите по ссылке для получения дополнительной информации о списке системных вызовов с кодом: http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
Я изменяю это:
x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
за это:
x86_64=set([0,1,2,3,4,5,8,9,10,11,12,16,21,25,63,89,158,219,231,])
в sample2.py, и работает.
Модифицированный sample2.py доступен в моей ссылке на репозиторий github: https://github.com/palashmaran/libsandbox.git