Я пишу веб-сервер на основе Python, который должен иметь возможность запускать «плагины», чтобы функциональность можно было легко расширить.
Для этого я рассмотрел подход, заключающийся в том, чтобы иметь несколько папок (по одной для каждого плагина) и несколько сценариев оболочки/питона, названных в соответствии с предопределенными именами для различных событий, которые могут произойти.
Одним из примеров является наличие файла on_pdf_uploaded.py
, который выполняется при загрузке PDF-файла на сервер. Для этого я бы использовал инструменты Python subprocess.
Для удобства и безопасности это позволило бы мне использовать переменные среды Unix для предоставления дополнительной информации и установить рабочий каталог (cwd) процесса, чтобы он мог получить доступ к нужным файлам без необходимости находить их местоположение.
Поскольку код плагина исходит из ненадежного источника, я хочу сделать его максимально безопасным. Моя идея состояла в том, чтобы выполнить код в подпроцессе, но поместить его в тюрьму chroot с другим пользователем, чтобы он не мог получить доступ к каким-либо другим ресурсам на сервере.
К сожалению, я ничего не смог найти об этом, и я не хотел бы полагаться на ненадежный скрипт, чтобы посадить себя в тюрьму.
Кроме того, я также не могу поместить основной/вызывающий процесс в chroot-тюрьму, поскольку код плагина может выполняться в нескольких процессах одновременно, пока сервер отвечает на другие запросы.
Итак, вот вопрос: как я могу выполнять подпроцессы/скрипты в chroot-тюрьме с минимальными привилегиями, чтобы защитить остальную часть сервера от повреждения ошибочным, ненадежным кодом?
Спасибо!
os
есть плюшки, которые можно использовать с uid и т. д. Итак, создайте новый процесс (os.fork()?), затем os.setuid, затем os.execle(). - person Logan   schedule 30.07.2012