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

时间:2018-03-07 05:16:53

标签: django apache permissions mod-wsgi wsgi

Apache和wsgi现在有权访问存储我的Django项目的目录。我想我需要回到以用户(或者可能只是组)kevin运行wsgi。

我有这个工作,我不知道我做了什么来阻止它工作,但现在我得到一个权限错误,一旦我登录我的应用程序。不幸的是,我没有版本控制下的apache配置。我很确定问题出在哪里,因为从工作时恢复项目的备份并没有改变任何东西,但调整数据库和项目根目录的权限已经改变了错误消息的细节。我不打算给整个作品提供o + w,也不想给每个文件或目录提供ACL。

后台:与Ubuntu 16.04 LTS一起提供的apache 2。 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>

2 个答案:

答案 0 :(得分:1)

WSGIDaemonProcess的文档可在以下网址找到:

您可以使用usergroup选项。

否则,目录和文件至少需要系统上的Apache用户可读。如果需要编写文件,则Apache用户需要对文件进行写访问,并且在SQLite等情况下也需要该目录,以便它可以创建数据库锁文件。

答案 1 :(得分:0)

非常有用的评论。我确实解决了这个问题,但应该说明细节,因为某些事情会发生在其他人身上。

  1. 除非您对此做些什么,否则WSGI将作为Apache通常启动子进程的用户运行。在我的Ubuntu 16.04上,那是&#39; www-data&#39;。该用户通常对我使用非特权用户帐户构建的目录没有权限。
  2. Django将需要对所有目录的r和x权限,以及对数据库和DATABASE RESIDES的目录的权限。后者是因为它在那里创建了它的事务和锁定文件。
  3. 如果WSGI由于权限而失败,则apache错误日志是您的朋友。普通访问日志也很有帮助。
  4. 您可以使用apache配置文件(我系统上的/etc/apache2/apache2.conf)中的WSGIDaemonProcess条目使WSGI子项运行为其他用户。我添加了#34; user = me group = me&#39;进入,我和#39;是我的帐户和群组的名字。这给了它所需的所有权限。