当前位置: 首页 > 面试题库 >

Django [Errno 13]权限被拒绝:“ / var / www / media / animals / user_uploads”

梅庆
2023-03-14
问题内容

我正在开发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档案中有这个:

MEDIA_ROOT = '/var/www/media/'
MEDIA_URL = os.path.join(BASE_DIR,'/media/')

我vhost.conf包含:

Alias /media/ /var/www/media/

问题答案:

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

在开发机器上运行时,实际上我正在使用当前用户的权限运行。但是,在部署服务器上运行时,实际上我正在运行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否则将无法使用该功能。



 类似资料:
  • 问题内容: 当我尝试运行简单的docker命令时,例如: 我收到一条错误消息: 获得权限被拒绝… /var/run/docker.sock:connect:权限被拒绝 当我检查权限 我看到这一行: 因此,我遵循许多论坛的建议并将本地用户添加到docker组: 但这无济于事。我仍然收到非常相同的错误消息。我该如何解决? 问题答案: 对于那些刚接触shell的人,命令: 需要在您的外壳中定义。默认情况

  • 问题内容: 尝试显示URI时出现以下异常。我认为这是在我的活动停止后发生的,我尝试再次访问可行的URI。还有其他问题可以解决这个问题,但是我对如何对我的代码应用任何解决方案感到非常困惑,因为我的takePhotoIntent允许拍照或从图库中选择图片(如下所示)。 我的createImageFile和我的takePhotoIntent: 问题答案: 根据Storage Access Framewo

  • 问题内容: 我对编码比较陌生,遇到了麻烦。 我有这段代码可以将数据发送到Firebase 但是,我不断收到错误: FIREBASE警告:设置为/ users /(GoogleID)失败:Permission_denied 2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺)错误:PERMISSION_DENIED:权限被拒绝(…) 当我尝试查找时,它谈论的是

  • 问题内容: 很抱歉来到这里问这个问题,但是我已经读完了所有互联网,试图找到解决方案,但是我仍然遇到这个问题… 我已经成功安装了Jenkins(让我在仍有希望的时候开始)可以在我们的持续集成流程中使用它。 我试图从这样一个简单的例子开始: 但是每次启动时,都会出现此错误: 问题在于用户jenkins(服务和主节点以Jenkins的身份运行)拥有此存储库上的所有权限。我试图授予组和其他人读取和执行的权

  • 问题内容: 我正在尝试将查询写入文件以进行调试。该文件位于中。我要写入的文件是。 我正在尝试使用 但是我越来越 file_put_contents(queries.txt)[function.file-put-contents]:无法打开流:权限被拒绝 我的文件chmod’d为777,可能是什么问题? 问题答案: 尝试调整目录权限。 在终端上运行(从包含数据库文件夹的目录中运行) apache,如

  • 大家好,我正在尝试阅读一个网站的内容与以下代码 但我得到以下错误,我不知道如何解决它。 如果你有什么想法,不要害羞。