
Я хочу настроить сервер, на который студенты смогут загружать код на языке C. Сервер компилирует код на языке C, запускает двоичный файл и показывает вывод студентам.
Теперь у меня возникли опасения по поводу безопасности. Студенты могут загружать любой код, но я хочу, чтобы они могли получить доступ fopen
только к 2 указанным файлам (1 для чтения и 1 для записи с помощью ) и stdout. Я не хочу, чтобы они имели доступ к Интернету или любым другим файлам в системе.
У меня есть контейнеризованный сервер Linux, и у меня нет прав root.
Я думал о следующих решениях:
chroot
илиfirejail
. (У меня нет root сервера. Он контейнеризирован, установка euid не допускается)используйте некоторые
gcc
опции, или.h
файлы, или ограничение библиотеки C. (У меня мало знаний о компиляции. Теоретически люди могут делать с C все что угодно, не используя никаких заголовочных файлов или библиотек)используйте что-то вроде
strace
или ,ptrace
чтобы контролировать процесс и завершать его, если он захочет сделать то, что мне не нужно.
Возможно ли это сделать?