【问题标题】:Apache2 + VirtualEnv IOError: [Errno 13] Permission deniedApache2 + VirtualEnv IOError:[Errno 13] 权限被拒绝
【发布时间】:2014-03-06 19:35:34
【问题描述】:

我无法让 apache 通过 virtualenv(和 virtualenvwrapper)为我的网站提供服务。我尝试按照演练here。值得注意的是,我使用的是 Ubuntu Server v13.10,我读过它还没有对 Apache v2.2 的原生支持,因此在演练中我无法安装 apache2.2-common。但是,我认为这不是问题,因为 apache 错误日志说存在权限问题。

在我的设置中,虚拟环境位于非 root 用户的主目录中,而 apache 服务器以 root 身份运行(我认为这是正常的)。我尝试使用namei 跟踪权限,并确保chmod +rw 作为root 的路径。有任何想法吗?

[Thu Mar 06 14:16:37.639031 2014] [mpm_event:notice] [pid 8771:tid 140338386122624] AH00489: Apache/2.4.6 (Ubuntu) mod_wsgi/3.4 Python/2.7.5+ configured -- resuming normal operations
[Thu Mar 06 14:16:37.639144 2014] [core:notice] [pid 8771:tid 140338386122624] AH00094: Command line: '/usr/sbin/apache2'
[Thu Mar 06 14:16:53.456622 2014] [:error] [pid 8775:tid 140338291197696] [client 192.168.XXX.XXX:50742] mod_wsgi (pid=8775): Target WSGI script '/var/www/www.mysite.org/index.wsgi' cannot be loaded as Python module.
[Thu Mar 06 14:16:53.456735 2014] [:error] [pid 8775:tid 140338291197696] [client 192.168.XXX.XXX:50742] mod_wsgi (pid=8775): Exception occurred processing WSGI script '/var/www/www.mysite.org/index.wsgi'.
[Thu Mar 06 14:16:53.456782 2014] [:error] [pid 8775:tid 140338291197696] [client 192.168.XXX.XXX:50742] Traceback (most recent call last):
[Thu Mar 06 14:16:53.456830 2014] [:error] [pid 8775:tid 140338291197696] [client 192.168.XXX.XXX:50742]   File "/var/www/www.mysite.org/index.wsgi", line 16, in <module>
[Thu Mar 06 14:16:53.456918 2014] [:error] [pid 8775:tid 140338291197696] [client 192.168.XXX.XXX:50742]     execfile(activate_env, dict(__file__=activate_env))
[Thu Mar 06 14:16:53.456971 2014] [:error] [pid 8775:tid 140338291197696] [client 192.168.XXX.XXX:50742] IOError: [Errno 13] Permission denied: '/home/nrUser/Envs/mysite/bin/activate_this.py'
(mysite)root:~# namei -m /home/nrUser/Envs/mysite/bin/activate_this.py
f: /home/nrUser/Envs/mysite/bin/activate_this.py
 drwxr-xr-x /
 drwxr-xr-x home
 drw-r--r-- nrUser
 drwxrwxr-x Envs
 drwxrwxr-x mysite
 drwxrwxr-x bin
 -rwxrwxr-x activate_this.py

【问题讨论】:

  • @ÖzgürEroğlu:我不同意。只要 apache 用户能够读取并可能执行文件,所有者就不应该成为问题。然而,为了能够访问一个文件,你需要它上面所有目录的 x 位。 /home/nrUser 中似乎缺少 x 位。
  • @GuntramBlohm 是对的。我删除了我的错误评论。谢谢。
  • @GuntramBlohm:你已经提供了正确的答案,如果你想正式回答这个问题,你可以获得一些分数。我认为在另一个教程中它让我将权限设置为 644。我相信这删除了执行位。我不认为该目录需要执行位,但它确实是为了读取目录内容。当我注销并且无法加载我的任何个人资料设置时,这一点得到了证实!但现在已经解决了。

标签: django apache virtualenv


【解决方案1】:

为了能够访问文件,apache 所有者至少需要文件上方所有目录的 x 位,以及文件本身的 r 位。您的 nrUser 目录缺少 x 位; chmod 755 /home/nrUser 应该可以解决您的问题。

【讨论】:

  • 在公共网络服务器上执行此操作是否安全或会破坏安全性?
【解决方案2】:

如果我没记错的话,Apache 用户/组需要读取目录的权限。尝试将chown 应用于您的mysite 目录,例如: sudo chown -R &lt;user&gt;:www-data mysite

使用sudo service apache2 restart重启apache,看看你是否可以访问你的网站。

【讨论】:

  • Serakiel,你说得对,apache 需要权限,但有比使用 chown 更好的方法。特别是如果您为多个客户托管多个网页,您需要不同的操作系统用户,并且您希望文件属于各个用户。在这种情况下,授予组/其他级别的访问权限是正确的做法。
猜你喜欢
  • 2011-06-11
  • 2013-05-02
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多