我有一个 Flask 应用程序运行在/var/www/FlaskApp/FlaskApp/init.py
├── /var/www/FlaskApp
├── FlaskApp
| ├── flask (This is a virtual environment with python3.4 and packages)
│ ├── __init__.py
├──flaskapp.wsgi
├── config.py
我的 init.py 看起来像这样:
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
@app.route('/upload, methods=['GET','POST'])
def upload(machine):
if request.method == 'POST':
f = request.files['files']
filename = '/var/www/FlaskApp/FlaskApp/static/runFiles/myfile.txt
#Some how there is an error saving the file here...???!!! WHY
f.save(filename)
if __name__ == "__main__":
app.run()
我看了apache的错误日志,发现是权限错误:
[Fri Dec 09 12:08:11.371696 2016] [wsgi:error] [pid 3425:tid 1962931248] IOError: [Errno 13] Permission denied: u'/var/www/FlaskApp/FlaskApp/static/runFiles/myfile.txt
所以我在想,不知何故,apache 用户无法访问这个目录。只是为了搞乱我想通了到底是什么,让我们看看 chmod 777 是否会解决这个问题。所以我这样做了:
sudo chmod 777 /var/www/
但是,当我尝试上传文件时,仍然出现错误。这就是我尝试上传文件的方式:
curl -i -X POST -F files=@/pathtomyfile.txt myip/upload/
我想知道如何修复权限错误。我试过添加绝对路径,还尝试了以下操作:
sudo chown -R www-data:www-data /var/www
chmod go-rwx /var/www
但是我一直无法摆脱这个错误。这是我来自 apache 的 FlaskApp.conf:
WSGIPythonHome /usr/local/bin
WSGIPythonPath /var/www/FlaskApp/FlaskApp/flask/lib/python3.4/site-packages
<VirtualHost *:80>
ServerName my ip (this is local)
ServerAdmin my email
WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我正在深入了解为什么当我尝试保存我试图上传到我的服务器的文件时出现权限被拒绝的错误。
好的,这里还有一些输出:
ls -ldg /var/www/
drwxrwxrwx+ 4 www-data 4096 Dec 7 10:31 /var/www/
ls -ldg /var/www/FlaskApp/FlaskApp/static/runFiles
drwxr-xr-x 2 root 0 Nov 23 07:54 /var/www/FlaskApp/FlaskApp/static/runFiles
最佳答案
抱歉,如果您提到了这一点,但我没有看到它:apache 进程以什么用户身份运行?您确定是 www-data 用户吗?
sudo chown -R www-data:www-data /var/www
chmod go-rwx /var/www
这样做 ^ 你已经锁定了它,所以除了 www-data 用户之外没有人可以对文件做任何事情。即使是 www-data 组也无法访问,因为 go-rwx
表示“拒绝其他组的 rwx 权限”。
最后,对于故障排除,这些输出是什么?
ls -ldg /var/www/
ls -ldg /var/www/FlaskApp/FlaskApp/static/runFiles
ls -l /var/www/FlaskApp/FlaskApp/static/runFiles/myfile.txt
关于python - FlaskApp Running with Apache unable to save file on server side cannot get permission to work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41065808/