Безопасная среда Python в Linux - PullRequest
2 голосов
/ 20 мая 2009

Можно ли создать среду для безопасного запуска произвольных скриптов Python под Linux? Эти сценарии должны быть получены от ненадежных людей и могут быть слишком большими, чтобы проверять их вручную.

Очень грубое решение заключается в создании виртуальной машины и восстановлении ее исходного состояния после каждого запуска ненадежного сценария. (Слишком дорого.)

Интересно, можно ли запретить Python доступ к файловой системе и взаимодействие с другими программами и т. Д.

Ответы [ 5 ]

4 голосов
/ 20 мая 2009

Вы можете попробовать 4 вещи:

  • Как вы уже упоминали, использование виртуальной машины или какой-либо другой формы виртуализации (возможно, зоны Solaris достаточно легкие?). Если скрипт нарушает работу ОС, вам все равно.
  • Использование chroot, которая помещает сеанс оболочки в виртуальный корневой каталог, отдельный от основного корневого каталога ОС.
  • Использование systrace. Думайте об этом как о брандмауэре для системных вызовов.
  • Использование "тюрьмы", основанной на systrace, предоставление каждой тюрьме собственной таблицы процессов и т. Д.

Systrace недавно был взломан, так что имейте это в виду.

4 голосов
/ 20 мая 2009

Рассмотрите возможность использования chroot-тюрьмы. Это не только очень безопасно, хорошо поддерживается и протестировано, но также применимо к внешним приложениям, которые вы запускаете из python.

2 голосов
/ 20 мая 2009

Вы можете запустить jython и использовать механизм песочницы из JVM. Песочница в JVM очень сильная, очень понятная и более или менее хорошо документированная. Потребуется некоторое время, чтобы точно определить, что вы хотите разрешить, а что нет, но вы должны быть в состоянии получить очень надежную защиту от этого ...

С другой стороны, jython не на 100% совместим с cPython ...

1 голос
/ 13 марта 2011

не могли бы вы не просто работать как пользователь, который не имеет доступа ни к чему, кроме скриптов в этом каталоге?

1 голос
/ 20 мая 2009

Попробуйте поискать «python для песочницы», например ::10000

http://wiki.python.org/moin/SandboxedPython

http://wiki.python.org/moin/How%20can%20I%20run%20an%20untrusted%20Python%20script%20safely%20(i.e.%20Sandbox)

...