Ограничить системные вызовы Python для virtualenv или каталога - PullRequest
0 голосов
/ 11 октября 2019

Есть ли какой-нибудь простой способ ограничить системные вызовы Python (os.system, subprocess, ...) определенной папкой / деревом?

Возможный вариант использования: общий веб-сервер,где пользователи / студенты могут загружать свои приложения, т. е. Bottle, для запуска через wsgi / uwsgi и nginx или около того.

Для упрощения настройки все веб-приложения работают под одним и тем же системным пользователем (т. е. www-data) ихранить свои данные в /var/www/webapp_name.

Но что, если какой-нибудь «умный» пользователь включит в свое приложение какую-то функцию, которая попытается сделать системный вызов для чтения или изменения чего-либо в другом месте системы?

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

Если virtualenv каким-то образом разрешит что-то вроде

os.system('ls ./')

, но заблокирует что-то вроде

os.system('ls /')

или

os.system('rm -rf ../another_webapp')

это может быть действительно полезно.

Это, вероятно, может быть сделано с помощью чего-то вроде SELinux или Apparmor, но было бы чище иметь чистый питонический раствор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...