程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”?

开发过程中遇到Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”的问题如何解决?下面主要结合日常开发的经验,给出你关于Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”的解决方法建议,希望对你解决Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”有所启发或帮助;

最后我自己解决了这个问题。

在开发机器上运行时,实际上我正在使用当前用户的权限运行。但是,在部署服务器上运行时,实际上我正在运行wsgi,这意味着它正在使用www-data的特权运行。

www-data既不是所有者,也不在拥有的用户组中/var/www。这意味着将www-data其视为other并设置了其他权限。

对此的不良解决方案是:

sudo chmod -R 777 /var/www/

这将使每个人都可以完全访问其中的所有内容/var/www/,这是一个非常糟糕的主意。

另一个BAD解决方案是:

sudo chown -R www-data /var/www/

这将所有者更改为www-data,从而打开了安全漏洞。

在良好的解决办法是

sudo groupadd varwwwusers
sudo adduser www-data varwwwusers
sudo chgrp -R varwwwusers /var/www/
sudo chmod -R 760 /var/www/

这将添加www-datavarwwwusers组,然后将其设置为/var/www/及其所有子文件夹的组。chmod会向所有者授予读取,写入和执行权限,但例如,如果Web服务器被黑客入侵,该组将无法执行可能在其中上载的任何脚本。

你可以将其设置740为使其更加安全,但是除非你对自己的工作非常有信心Django's collectstatic760否则将无法使用该功能。

解决方法

我正在开发django API,它将通过WSGI在运行Ubuntu的服务器上在Apache2之上运行。

用户将能够使用POST请求将拍摄的照片上传到服务器。API处理此请求,然后尝试将图像写入/var/www/media/animals/user_uploads/<animal_type>/<picture_name>.jpg。如果没有目录/var/www/media/animals/user_uploads/<animal_type>/它将创建它。

在开发过程中进行测试时,使用Windows和Scientific Linux都可以。在部署服务器上进行测试时,我收到此错误:

据我了解,Apache2服务器正在使用user运行www-data。就我而言,运行cat /etc/passwd以获取用户列表,这就是我得到的www-data

www-data:x:33:33:www-data:/ var / www:/ bin / sh

  • 我假设这意味着可以www-data访问中的所有内容/var/www/我试过了

  • chmod 777 -R媒体

这有效,但是显然这是解决此问题的非常糟糕的方法。有没有更好的方法来解决这个问题?

这是我的wsgi.py:

import os,sys
os.environ.setdefault("DJANGO_SETTinGS_MODULE","serengeti.setTings")
sys.path.append('/serengeti/django/serengeti')
sys.path.append('/serengeti/django')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

我的setTings.py档案中有这个:

@H_651_5@mEDIA_ROOT = '/var/www/media/'
MEDIA_URL = os.path.join(BASE_DIR,'/media/')

我vhost.conf包含:

Alias /media/ /var/www/media/

大佬总结

以上是大佬教程为你收集整理的Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”全部内容,希望文章能够帮你解决Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。