python - FlaskApp Running with Apache unable to save file on server side cannot get permission to work?

标签 python apache flask wsgi

我有一个 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/

相关文章:

Python:如何获取调用函数的文件的绝对路径?

python - 在 python pandas 中,如何保存 'grid chart' ?

performance - Redmine 性能不一致

Java:HttpClient 中的自动 cookie 处理?

python - django + 南 + python : strange behavior when using a text string received as a parameter in a function

python - 无法使用 ix 更改 pandas 数据框特定范围的列的名称

ios - 错误 : Module org. apache.cordova.console 不存在

python - 单个表上的 SQLAlchemy 多对多关系错误 : NoReferencedTableError

python - 在 Python 中通过 SQL 查询创建变量

python - Flask 蓝图和 werkzeug.contrib.cache