FlaskApp 运行 Apache 无法在服务器端保存文件无法获得工作权限?

FlaskApp Running with Apache unable to save file on server side can't get permission to work out?

我在 /var/www/FlaskApp/FlaskApp/init.py

有一个 Flask 应用 运行
├── /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 表示 "Deny rwx permission for group, others".

最后进行故障排除,这些输出是什么?

ls -ldg /var/www/
ls -ldg /var/www/FlaskApp/FlaskApp/static/runFiles
ls -l /var/www/FlaskApp/FlaskApp/static/runFiles/myfile.txt