Среда сценария wsgi изолирована и размещена на httpd , CentOS 7

Я размещаю простое приложение 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

enter image description here

Из игры с ним, Кажется, что любая операция с файловой системой (перечисление / создание / доступ к сокетам) внутри моего сценария wsgi является «экологически изолированной» (например, chroot jail). странно то, что я не настроил ни один из этих типов изоляции.


httpd config

/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

...
1
задан 8 November 2015 в 17:55
1 ответ

Функция безопасности, PrivateTmp

Это функция безопасности под названием PrivateTmp , настроенный по умолчанию с помощью службы httpd systemd.

Как ее отключить?

Отредактируйте /usr/lib/systemd/system/httpd.service и удалите следующую строку:

PrivateTmp=true

Затем выполните следующие команды,

sudo systemctl daemon-reload
sudo service httpd restart
0
ответ дан 4 December 2019 в 06:53

Теги

Похожие вопросы