Spec-Zone.ru › Python 2.7

Ограниченное выполнение

Предупреждение

В Python 2.3 эти модули были отключены из-за различных известных и нелегко устранимых проблем безопасности. Модули по-прежнему документированы здесь, чтобы помочь в чтении старого кода, использующего модули rexec и Bastion.

Ограниченное выполнение — это базовая структура в Python, которая позволяет изолировать доверенный и недоверенный код. Структура основана на концепции, что доверенный Python-код (супервизор) может создать «защищённую ячейку» (или среду) с ограниченными правами и запустить в ней недоверенный код. Недоверенный код не может выйти за пределы своей ячейки и может взаимодействовать с чувствительными системными ресурсами только через интерфейсы, определённые и управляемые доверенным кодом. Термин «ограниченное выполнение» предпочтительнее «безопасный Python», так как истинную безопасность трудно определить, и она определяется способом создания ограниченной среды. Обратите внимание, что ограниченные среды могут быть вложенными, при этом внутренние ячейки создают подячейки с меньшими, но никогда не большими, привилегиями.

Интересной особенностью модели ограниченного выполнения Python является то, что интерфейсы, представленные недоверенному коду, обычно имеют те же имена, что и представленные доверенному коду. Таким образом, не нужно изучать специальные интерфейсы для написания кода, предназначенного для выполнения в ограниченной среде. И поскольку точный характер защищённой ячейки определяется супервизором, могут быть наложены различные ограничения в зависимости от приложения. Например, может считаться «безопасным», что недоверенный код может читать любой файл в указанном каталоге, но никогда не записывать файл. В этом случае супервизор может переопределить встроенную функцию open() таким образом, чтобы она выбрасывала исключение всякий раз, когда параметр mode равен 'w'. Он также может выполнить операцию, похожую на chroot(), с параметром filename таким образом, что корень всегда является относительным по отношению к некоторой безопасной области «песочницы» в файловой системе. В этом случае недоверенный код по-прежнему увидит встроенную функцию open() в своей среде с тем же вызывающим интерфейсом. Семантика также будет идентичной, при этом IOError будут вызваны, когда супервизор определит, что используется недопустимый параметр.

Интерпретатор Python определяет, выполняется ли конкретный блок кода в режиме ограниченного выполнения, исходя из идентичности объекта __builtins__ в его глобальных переменных: если это (словарь) стандартного модуля __builtin__, то код считается неограниченным, иначе — ограниченным.

Код Python, выполняющийся в ограниченном режиме, сталкивается с рядом ограничений, которые предназначены для предотвращения выхода его за пределы защищённой ячейки. Например, атрибут объекта функции func_globals и атрибуты класса и экземпляра объекта __dict__ недоступны.

Два модуля предоставляют структуру для настройки сред ограниченного выполнения:

  • 30.1. rexec — Структура ограниченного выполнения
    • 30.1.1. Объекты RExec
    • 30.1.2. Определение ограниченных сред
    • 30.1.3. Пример
  • 30.2. Bastion — Ограничение доступа к объектам

См. также

Grail Home Page

Grail, веб-браузер, написанный на Python, использует эти модули для поддержки Python-апплетов. Дополнительную информацию об использовании режима ограниченного выполнения Python в Grail можно найти на веб-сайте.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/restricted.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API