Я пишу веб-сервер на основе Python, который должен иметь возможность запускать "плагины", чтобы можно было легко расширить функциональность.
Для этого я рассмотрел подход к тому, чтобы иметь несколько папок (по одному для каждого плагина) и несколько сценариев оболочки/питона, названных в честь предопределенных имен для различных событий, которые могут произойти.
Одним из примеров является наличие файла on_pdf_uploaded.py
, который выполняется, когда PDF файл загружается на сервер. Для этого я бы использовал инструменты подпроцесса Python.
Для удобства и безопасности это позволит мне использовать переменные среды Unix, чтобы предоставить дополнительную информацию и установить рабочий каталог (cwd) процесса, чтобы он мог обращаться к правильным файлам, не найдя их местоположение.
Поскольку код плагина исходит из ненадежного источника, я хочу сделать его максимально безопасным. Моя идея состояла в том, чтобы выполнить код в подпроцессе, но поместить его в chroot тюрьму с другим пользователем, чтобы он не мог получить доступ к каким-либо другим ресурсам на сервере.
К сожалению, я ничего не мог найти об этом, и я не хотел бы полагаться на ненадежный script, чтобы попасть в тюрьму.
Кроме того, я не могу поместить основной/вызывающий процесс в chroot-тюрьму, поскольку код плагина может выполняться одновременно в нескольких процессах, пока сервер отвечает на другие запросы.
Итак, вот вопрос: как я могу выполнять подпроцессы/скрипты в chroot-тюрьме с минимальными привилегиями, чтобы защитить остальную часть сервера от повреждения от неисправного, ненадежного кода?
Спасибо!