Я провожу простой приложение wsgi на httpd над CentOS 7 с помощью mod_wsgi
и пытается удалить изоляцию, показанную ниже.
wsgi
приложение,Следующий сценарий - мой wsgi
применение.
/tmp/test-wsgi.txt
/tmp
как простой список jsonкод:
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