подделка файловой системы / виртуальной файловой системы - PullRequest
4 голосов
/ 16 марта 2010

У меня есть веб-сервис, в который пользователи загружают скрипты Python, которые запускаются на сервере. Эти сценарии обрабатывают файлы, которые находятся на сервере, и я хочу, чтобы они могли видеть только определенную иерархию файловой системы сервера (лучше всего: временную папку, в которую я копирую файлы, которые я хочу обработать, и сценарии).

Сервер в конечном итоге будет базироваться на Linux, но если решение также возможно для Windows, было бы неплохо узнать, как.

То, что я думаю, это создание пользователя с ограниченным доступом к папкам FS - в конечном счете, только папки, содержащей скрипты и файлы - и запуск интерпретатора python с использованием этого пользователя.

Может кто-нибудь дать мне лучшую альтернативу? полагаясь только на это, я чувствую себя неуверенно, мне нужна реальная функция песочницы или виртуальная ФС, где я могу безопасно выполнять ненадежный код.

Ответы [ 3 ]

5 голосов
/ 16 марта 2010

Либо chroot jail , либо механизм безопасности более высокого порядка, такой как SELinux , можно использовать для ограничения доступа к определенным ресурсам.

3 голосов
/ 16 марта 2010

Возможно, вам лучше всего использовать виртуальную машину, такую ​​как VirtualBox или VMware (возможно, даже создать одну на пользователя / сеанс).

Это позволит вам контролировать другие ресурсы, такие как память и сеть, а также диск

Единственный известный мне питон, в который встроены такие функции, - это Google App Engine. Это может быть подходящей альтернативой и для вас.

0 голосов
/ 16 марта 2010

Это небезопасное программное обеспечение. Позволяя пользователям загружать сценарии, вы вводите уязвимость удаленного выполнения кода. Вам нужно больше волноваться, чем просто изменять файлы, что мешает скрипту python получить доступ к сети или другим ресурсам?

Для решения этой проблемы вам нужно использовать песочницу. Чтобы лучше защитить систему, вы можете использовать многоуровневый подход к безопасности.

Первый и самый важный слои - это python sandbox . Пользовательские скрипты будут выполняться в изолированной программной среде python. Это даст вам мелкозернистые ограничения, которые вам нужны. Затем все приложение Python должно запускаться в своем собственном выделенном chroot. Я настоятельно рекомендую использовать модули ядра grsecurity, которые улучшают прочность любого chroot. Например, грязный грохот не может быть сломан, если злоумышленник не сможет вскрыть дыру в земле ядра, что очень трудно сделать в наши дни. Убедитесь, что ваше ядро ​​обновлено.

Конечным результатом является то, что вы пытаетесь ограничить ресурсы, которые имеет скрипт злоумышленника. Слои - это проверенный подход к безопасности, если они достаточно разные, чтобы одна и та же атака не сломала их обоих. Вы хотите максимально изолировать скрипт от остальной части системы. Любые общие ресурсы также являются путями для злоумышленника.

...