我试图允许 django 站点的用户通过模型上的 FileField 将文件(主要是 PDF)上传到我的服务器。但是,当我尝试使用我的模型表单生成的上传字段时,我不断遇到“Errno 13 Permission Denied”。
我在四处寻找时发现了许多潜在的解决方案,但到目前为止还没有能够让任何东西正常工作。这是我第一次真正的部署,我可能自己也感到困惑。作为参考,我使用的是 Ubuntu 14.04、Django 1.6 和 Gunicorn+nginx。
现在,我的媒体根位于我的项目目录中:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(BASE_DIR, "media/uploads")
该错误表明正确的目录存在问题,因此它将转到正确的位置。
我已经尝试过chown -r
媒体目录到www-data:www-data
没有成功。我四处寻找,找出哪个用户正在运行 python 进程,并尝试将“他”设置为所有者 - 没有成功。我将其翻转回原来的所有者和组(root:root
)并尝试chmod -r
到755和770,两者也未能解决问题。
If I chmod -r
到 777,那么一切都“有效”——但这不是我想公开的,原因很明显。
我的静态文件正在从项目根目录 (/var/www/mysite/static) 之外的目录收集并正确提供服务,因此我尝试将媒体文件夹移到那里并重复所有上述步骤 - 结果相同。
如何让我的媒体文件夹安全地接受用户的上传和下载,而不留下这个安全漏洞?
谢谢你!
首先,媒体文件文件夹必须位于您项目的路径中,否则您将得到可疑操作Django 的异常,所以不要将其放入/var/www.
另外,您使用 nginx 的事实并不那么相关,重要的部分是 nginx/django 项目在哪个用户下运行,无论它是哪个用户(通常www-data,至少与阿帕奇+mod_wsgi),该用户应该是媒体文件夹的所有者。
一旦您将所有者更改为正确的用户(我假设www-data): sudo chown -R www-data:www-data .../media
,确保权限正确:sudo chmod -R u+rwX .../media
.
希望有帮助。如果没有,请告诉我。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)