Django 如何授予wsgi在我的目录中操作的权限?

Django 如何授予wsgi在我的目录中操作的权限?,django,apache,permissions,mod-wsgi,wsgi,Django,Apache,Permissions,Mod Wsgi,Wsgi,Apache和wsgi现在在访问存储我的Django项目的目录时遇到权限问题。我想我需要回到让wsgi以用户(或者仅仅是组)kevin的身份运行 我让它工作,我不知道我做了什么来阻止它工作,但现在我得到了权限错误,只要我过去登录到我的应用程序。不幸的是,我没有版本控制下的apache配置。我很确定这就是问题所在,因为从项目运行时恢复项目的备份不会改变任何东西,但是调整数据库和项目根目录的权限会改变错误消息的细节。我不打算给整个工作赋予o+w,也不想给每个文件或目录赋予ACL 背景:Apache2

Apache和wsgi现在在访问存储我的Django项目的目录时遇到权限问题。我想我需要回到让wsgi以用户(或者仅仅是组)kevin的身份运行

我让它工作,我不知道我做了什么来阻止它工作,但现在我得到了权限错误,只要我过去登录到我的应用程序。不幸的是,我没有版本控制下的apache配置。我很确定这就是问题所在,因为从项目运行时恢复项目的备份不会改变任何东西,但是调整数据库和项目根目录的权限会改变错误消息的细节。我不打算给整个工作赋予o+w,也不想给每个文件或目录赋予ACL

背景:Apache2随Ubuntu 16.04 LTS一起提供。Django 1.11。Python 3.5。libsqlite3.0 3.11.0

我认为我在/etc/apache2/apache2.conf后面的内容解决了这个问题,特别是行

WSGIProcessGroup kevin
因为所有的文件和目录都归kevin.kevin所有,我的证据似乎表明,当它工作时,它这样做是因为它至少运行了有效的组“kevin”,而不是当前的“www数据”

我为这个项目添加到apache2.conf的全部内容现在如下所示:

# KOSMANOR: 
# In accordance with https://www.mindchasers.com/dev/apache-install
WSGIDaemonProcess kevin processes=4 threads=12 python-path=/build/comprosloco
WSGIProcessGroup kevin
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIScriptAlias / /build/comprosloco/comprosloco/wsgi.py

<Directory /build/comprosloco/comprosloco>
    Require all granted
</Directory>

# 29 Jan 2018 on  kosmanor.com
# 6 Mar 2018 revised reference to 1.11, but it's so modified as to be unrecognizable.  Not sure what reference was used.
# 6 Mar 2018 In particular the stuff about virtual environments is ignored here.
# WSGIScriptAlias / is set above in accordance with the mindchaser page
# WSGIPythonPath not set (semms to find my stuff without it)
# WSTIPythonHome is not set (not using a vitual environment yet)

# Added in accordance (somewhat modified) with https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/modwsgi/
#
Alias /static/ /usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/
<Directory /usr/local/lib/python3.5/dist-packages/django/contrib/admin/static>
    Require all granted
</Directory>
科斯马诺: #依照https://www.mindchasers.com/dev/apache-install WSGIDaemonProcess=4个线程=12个python路径=/build/comprosloco WSG集团凯文 WSGirestricton嵌入式 WSGilazyin的初始化 WSGIScriptAlias//build/comprosloco/comprosloco/wsgi.py 要求所有授权 #2018年1月29日于kosmanor.com #2018年3月6日对1.11进行了修订,但修改后无法识别。不确定使用了什么参考。 #特别是2018年3月6日,这里忽略了有关虚拟环境的内容。 #WSGIScriptAlias/是根据mindchaser页面在上面设置的 #WSGIPythonPath未设置(semms在没有设置的情况下查找我的资料) #未设置WSTIPythonHome(尚未使用虚拟环境) #根据(稍加修改)添加https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/modwsgi/ # 别名/static//usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/ 要求所有授权
WSGIDaemonProcess的文档可在以下位置找到:

您可能可以使用
用户
选项


否则,系统上的Apache用户至少需要能够读取目录和文件。如果需要写入文件,则Apache用户需要对文件和目录(如SQLite)进行写入访问,以便创建数据库锁定文件。

WSGIDaemonProcess的文档可在以下位置找到:

您可能可以使用
用户
选项


否则,系统上的Apache用户至少需要能够读取目录和文件。如果需要写入文件,则Apache用户需要对文件进行写入访问,在类似SQLite的情况下,还需要对目录进行写入访问,以便创建数据库锁定文件。

非常有用的注释。我确实解决了这个问题,但细节可能需要说明,因为类似的事情可能会发生在其他人身上

  • 除非您对此做些什么,否则WSGI将作为Apache通常启动子进程的用户运行。在我的Ubuntu 16.04上,这是“www数据”。该用户通常对我使用非特权用户帐户生成的目录没有权限
  • Django将需要对所有目录的r和x权限,以及对数据库和数据库所在目录的w权限。后者是因为它在那里创建事务和锁定文件
  • 如果WSGI由于权限而失败,那么apache错误日志就是您的朋友。正常访问日志也会有所帮助
  • 您可以使用apache配置文件中的WSGIDaemonProcess条目(/etc/apache2/apache2.conf,在我的系统上)使WSGI子级作为其他用户运行。我在条目中添加了“user=me group=me”,其中“me”是我的帐户和组的名称。这给了它所需的所有权限

  • 非常有帮助的评论。我确实解决了问题,但细节可能需要说明,因为类似的事情可能会发生在其他人身上

  • 除非您对此做些什么,否则WSGI将以Apache通常启动子进程的用户的身份运行。在我的Ubuntu 16.04上,这是“www数据”。该用户通常对我使用非特权用户帐户生成的目录没有权限
  • Django将需要对所有目录的r和x权限,以及对数据库和数据库所在目录的w权限。后者是因为它在那里创建了事务和锁定文件
  • 如果WSGI由于权限而失败,那么apache错误日志就是您的朋友。正常访问日志也会有所帮助
  • 您可以使用apache配置文件中的WSGIDaemonProcess条目(/etc/apache2/apache2.conf,在我的系统上)让WSGI子项作为其他用户运行。我在条目中添加了“user=me group=me”,其中“me”是我的帐户和组名。这给了它所需的所有权限

  • 这是一个有用的链接。但是我迷路了。我想我已经将apache2.conf返回到原来的位置,但现在我立即得到“您没有访问此服务器上“/”的权限”。我做得比以前好多了。“runserver”也可以正常工作。所以很明显我需要处理权限。但是设置用户和组并没有做到这一点。当将URL映射到脚本文件时,Apache用户仍然需要能够访问WSGI脚本文件的目录树和文件。如果希望对项目代码目录具有限制性权限,请执行以下操作