debootstrap доступ к оригинальной корневой системе chroot jail

Я пишу джуд-сайт онлайн-кодирования, такой как spoj.pl, и создаю тюрьму для компиляции и выполнения программы. Я написал скрипт, который берет исходный код на языке c / C++, компилирует и запускает код. Мне нужно выполнить эту программу в тюрьме, созданной debootstrap, но я должен ограничить разрешения для моего скрипта и разрешить двоичному файлу читать только файлы ввода-вывода, присутствующие в исходной системе / home / ubuntu.

Является ли это возможным?

Linux system:
/home/ubuntu:
   This folder has 
   online_judge/scripts.py ...
   input_output/input*.txt,output*.txt

/Jail 
    submissions/code.c
    submissions/code.cpp

Мне нужно вызвать scripts.py из / home / ubuntu в тюрьме с ограниченным пользователем тюрьмы, скомпилировать код и запустить бинарный файл. Пользователь Jail никогда не должен иметь доступ к каким-либо файлам / home / ubuntu, кроме input_output/input*txt, который я могу дать, а затем выполнить разрешение

2 ответа

Решение

Мне нужно вызвать scripts.py из / home / ubuntu в тюрьме с ограниченным пользователем тюрьмы,

Вы сказали, что scripts.py находится в / home / ubuntu / online_judge, который НЕ находится в / Jail. Таким образом, либо у вас есть пользователь тюрьмы ограничен / Jail или нет. Если пользователь с ограниченными правами должен выполнить online_judge / scripts.py, вам нужно сделать его доступным где-нибудь в / Jail.

Пользователь Jail никогда не должен иметь доступ к каким-либо файлам / home / ubuntu, кроме input_output / input * txt, который я могу дать, а затем выполнить разрешение

Жесткие ссылки могут помочь, например, "ln /home/ubuntu/online_judge/scripts.py /Jail/scripts.py", теперь у пользователя с ограниченными правами есть доступ к scripts.py через /Jail/scripts.py. Обязательно ограничьте доступ для записи к этому файлу, иначе он / она изменил бы обе "копии".

Вам нужно использовать debootstrap, вы можете скачать необходимые наборы инструментов для компиляции. так что вместо того, чтобы пытаться использовать существующие системные инструменты, использовать цепочку инструментов из предоставленной цепочки инструментов debootstrap, а также вы можете загрузить инструментальную цепь через apt-get из тюрьмы внутри. Если все не получается, попробуйте использовать scratchbox (www.scratchbox.org), он содержит всю необходимую для компиляции цепочку инструментов, а также среду исполнения. Надеюсь, это поможет!

Другие вопросы по тегам