Я размещаю простое приложение wsgi на httpd поверх CentOS 7 с использованием mod_wsgi
и пытаюсь удалить изоляция, проиллюстрированная ниже.
wsgi
, Следующий скрипт - это мое приложение wsgi
.
/ tmp / test-wsgi. txt
/ tmp
как простой код json list :
def application(environ, start_response):
status = '200 OK'
headers = [('Content-Type', 'application/json')]
start_response(status, headers)
with open('/tmp/test-wsgi.txt', 'w+') as w:
w.write('hello world')
files = os.listdir('/tmp')
return json.dumps(files)
Когда я открываю свое веб-приложение, я получаю следующий ответ
["test-wsgi.txt"]
Пока отлично !
Подключен к тому же серверу хостинга, что и root,
Я открыл оболочку и выполнил cat /tmp/test-wsgi.txt
Из игры с ним, Кажется, что любая операция с файловой системой (перечисление / создание / доступ к сокетам) внутри моего сценария wsgi является «экологически изолированной» (например, chroot jail). странно то, что я не настроил ни один из этих типов изоляции.
/etc/httpd/conf.d/my-app.conf
<VirtualHost *:80>
DocumentRoot /opt/my-app/
WSGIScriptAlias / /opt/my-app/apache/wsgi.py
<Directory /opt/my-app/apache>
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
/ etc / httpd / conf / httpd. conf
...
User apache
Group apache
...
Это функция безопасности под названием PrivateTmp , настроенный по умолчанию с помощью службы httpd
systemd.
Отредактируйте /usr/lib/systemd/system/httpd.service
и удалите следующую строку:
PrivateTmp=true
Затем выполните следующие команды,
sudo systemctl daemon-reload
sudo service httpd restart