我正在举办一个简单的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 连接到同一托管服务器,
我打开了一个 shell 并执行了cat /tmp/test-wsgi.txt
通过尝试,似乎我的 wsgi 脚本中的任何文件系统操作(枚举/创建/套接字访问)都是“环境孤立”(如 chroot jail)。奇怪的是,我没有配置任何此类隔离。
httpd 配置
/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
安全功能,PrivateTmp
这是一项安全功能,称为PrivateTmp,默认配置有httpd
systemd 服务。
如何禁用它?
編輯/usr/lib/systemd/system/httpd.service
和消除以下行:
PrivateTmp=true
然后运行以下命令,
sudo systemctl daemon-reload
sudo service httpd restart