restricted.md
1> **Источник:** https://python-all.ru/2.7/library/restricted.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 30. Ограниченное выполнение89> **Предупреждение**10>11> В Python 2.3 эти модули были отключены из-за различных известных и не поддающихся простому исправлению уязвимостей безопасности. Модули по-прежнему документированы здесь, чтобы помочь при чтении старого кода, использующего модули [`rexec`](https://python-all.ru/2.7/library/rexec.html#module-rexec) и [`Bastion`](https://python-all.ru/2.7/library/bastion.html#module-Bastion).1213*Ограниченное выполнение* – это базовый фреймворк в Python, позволяющий разделять доверенный и недоверенный код. Фреймворк основан на том, что доверенный код Python (*супервизор*) может создать «изолированную ячейку» (или окружение) с ограниченными правами и запустить в ней недоверенный код. Недоверенный код не может выйти за пределы своей ячейки и взаимодействует с чувствительными системными ресурсами только через интерфейсы, определённые и управляемые доверенным кодом. Термин «ограниченное выполнение» предпочтительнее «безопасного Python», поскольку настоящую безопасность трудно определить, и она зависит от способа создания ограниченного окружения. Обратите внимание, что ограниченные окружения могут быть вложенными: внутренние ячейки создают подъячейки с меньшими, но никогда не с большими привилегиями.1415Интересная особенность модели ограниченного выполнения в Python заключается в том, что интерфейсы, предоставляемые недоверенному коду, обычно имеют те же имена, что и для доверенного кода. Поэтому для написания кода, предназначенного для работы в ограниченном окружении, не нужно изучать специальные интерфейсы. А поскольку точный характер изолированной ячейки определяется супервизором, можно накладывать разные ограничения в зависимости от приложения. Например, может считаться «безопасным», что недоверенный код может читать любой файл в определённом каталоге, но никогда не записывать файл. В этом случае супервизор может переопределить встроенную функцию [`open()`](https://python-all.ru/2.7/library/functions.html#open) так, что она будет вызывать исключение, когда параметр *mode* равен `'w'`. Он также может выполнить операцию, подобную `chroot()`, над параметром *filename*, так что корень всегда будет относиться к некоторой безопасной «песочнице» файловой системы. В этом случае недоверенный код по-прежнему будет видеть в своём окружении встроенную функцию [`open()`](https://python-all.ru/2.7/library/functions.html#open) с тем же интерфейсом вызова. Семантика также будет идентичной: исключения [`IOError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.IOError) будут возбуждаться, когда супервизор определит использование недопустимого параметра.1617Среда выполнения Python определяет, выполняется ли данный блок кода в режиме ограниченного выполнения, на основе идентичности объекта `__builtins__` в его глобальных переменных: если это (словарь) стандартного модуля [`__builtin__`](https://python-all.ru/2.7/library/__builtin__.html#module-__builtin__), то код считается неограниченным, в противном случае он считается ограниченным.1819Код Python, выполняющийся в ограниченном режиме, сталкивается с рядом ограничений, предназначенных для предотвращения выхода из изолированной ячейки. Например, атрибут объекта функции `func_globals` и атрибут класса и экземпляра [`__dict__`](https://python-all.ru/2.7/library/stdtypes.html#object.__dict__) недоступны.2021Два модуля предоставляют фреймворк для создания окружений ограниченного выполнения:2223- [30.1. `rexec` – Фреймворк ограниченного выполнения](https://python-all.ru/2.7/library/rexec.html)2425 - [30.1.1. Объекты RExec](https://python-all.ru/2.7/library/rexec.html#rexec-objects)26 - [30.1.2. Определение ограниченных окружений](https://python-all.ru/2.7/library/rexec.html#defining-restricted-environments)27 - [30.1.3. Пример](https://python-all.ru/2.7/library/rexec.html#an-example)28- [30.2. `Bastion` – Ограничение доступа к объектам](https://python-all.ru/2.7/library/bastion.html)2930> **См. также**31>32> **[Домашняя страница Grail](https://python-all.ru/2.7/library/restricted.html)**33>34> Grail, интернет-браузер, написанный на Python, использует эти модули для поддержки Python-апплетов. Дополнительная информация об использовании режима ограниченного выполнения Python в Grail доступна на веб-сайте.35