Я использовал Systrace для песочницы ненадежных программ как в интерактивном, так и в автоматическом режиме.У него есть ptrace()
бэкэнд, который позволяет использовать его в системе Linux без особых привилегий, а также гораздо более быстрый и более мощный бэкэнд, который требует исправления ядра.
ItТакже возможно создать «песочницу» в Unix-подобных системах, используя chroot(1)
, хотя это не так просто и безопасно. Контейнеры Linux и Тюрьмы FreeBSD - лучшая альтернатива chroot.Другой альтернативой для Linux является использование инфраструктуры безопасности, такой как SELinux или AppArmor , что я бы предложил для производственных систем.
Мы сможем вам помочьбольше, если бы вы сказали, что именно вы хотите сделать.
РЕДАКТИРОВАТЬ:
Systrace будет работать для вашего случая, но я думаю, что что-то на основе Модель безопасности Linux , как AppArmor или SELinux, является более стандартной и, следовательно, предпочтительной альтернативой, в зависимости от вашего дистрибутива.
РЕДАКТИРОВАТЬ 2:
Хотя chroot(1)
доступно на большинстве (всех?) Unix-подобных системах, у него довольно много проблем:
Его можно устранить.Если вы собираетесь на самом деле компилировать или запускать ненадежные программы на Си в своей системе, вы особенно уязвимы для этой проблемы.И если ваши ученики похожи на меня, кто-то попытается вырваться из тюрьмы.
Вы должны создать полностью независимую иерархию файловой системы со всем, что необходимо для вашей задачи.Вам не нужно иметь компилятор в chroot, но все, что требуется для запуска скомпилированных программ, должно быть включено.Хотя есть утилиты, которые помогают с этим, это все же не тривиально.
Вы должны поддерживать chroot.Поскольку файлы chroot независимы, они не будут обновляться вместе с вашим дистрибутивом.Вам придется либо регулярно воссоздавать chroot, либо включать в него необходимые инструменты обновления, что, по сути, потребует, чтобы это был полноценный дистрибутив Linux.Вам также необходимо будет синхронизировать системные и пользовательские данные (пароли, входные файлы и т. Д.) С хост-системой.
chroot()
защищает только файловую систему.Это не препятствует тому, чтобы вредоносная программа открывала сетевые сокеты, а плохо написанная - высасывала все доступные ресурсы.
Проблема использования ресурсов распространена среди всех альтернатив. Квоты файловой системы не позволят программам заполнять диск.Правильные ulimit
(setrlimit()
в C) настройки могут защитить от чрезмерного использования памяти и любых вилочных бомб, а также положить конец нагрузкам на процессор.nice(1)
может снизить приоритет этих программ, так что компьютер можно использовать для любых задач, которые считаются более важными без проблем.