这可能是一个Nginx的皱纹,也可能是因为我不懂Unix的权限。
我们使用Hudson CI来部署我们的临时实例。 所以RAILS_ROOT是/var/lib/hudson/jobs/JOBNAME/workspace 。
www-data用户运行 hudson和nginx都是www组的成员 RAILS_ROOT/public按照正常。 RAILS_ROOT/config/environment.rb属于www-data (所以Passenger作为www-data运行) RAILS_ROOT及其中的所有内容由www组拥有,组具有r / w / x权限 就目前而言,Nginx在请求任何url时都403 permission denied了403 permission denied 。 error.log包含这样的条目: public/index.html" is forbidden (13: Permission denied) 。
这些并没有解决或改变错误(每一个停止/开始的Ngnix):
chmod 777 -R RAILS_ROOT chgrp www -R /var/lib/hudson 我也以root身份尝试过Nginx,并且乘客抱怨找不到config/environment (尽pipe错误页面显示的path是正确的)。
解决的办法是确保everybody都有读取权限在每个目录在heirachy 。 在这种情况下, chmod o+r /var/lib/hudson 。
但是,如果该组对目录具有读取权限,并且nginx是该目录所有者组的成员,为什么需要允许所有人读取权限? 有什么没有关于权限grokked?
$nginx -V nginx version: nginx/0.7.61 built by gcc 4.4.1 (Ubuntu 4.4.1-4ubuntu8) configure arguments: --prefix=/opt/nginx --add-module=/usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/nginx --with-http_ssl_module --with-pcre=~/src/pcre-8.00/ --with-http_stub_status_module $cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=9.10 DISTRIB_CODENAME=karmic DISTRIB_DESCRIPTION="Ubuntu 9.10"
www-data可能有类似于/bin/false shell,所以如果你想确切地检查问题出在哪里,请执行以下操作:切换到root( su或sudo -i ),然后运行
# su -s /bin/bash www-data $ cat /path/to/problem/file
你会看到,这是关于权限或其他地方的问题。
UPD :
嗯…我不会看后写作时间。 在serverfault.com上有“necropost”成就吗? 🙂
* nix和组权限可以有点有趣。 如果用户是多个组的成员,则他们可能有权访问某些文件,而实际上却无法访问它们! 就我所了解的典型的* nix系统而言,你一次看起来属于一个组。 成为会员意味着你可以切换到另外一个组,或者更彻底地检查事情的程序(比如su运行在redhat变体上)也能够看到你是正确组的成员。
有一个sg命令,可以让你像su开关用户一样切换组。
为了解决你的实际问题,我想你可能可以在passwd文件中改变这个组,这样你想要的组就是默认的。 这是假设它不会导致您无法访问您需要的其他文件。
我相信还有另外一个可以安装的nix的ACL解决scheme,它可以以更直观的方式工作,但我并不知道它们。
不,这是乘客问题。 我正在使用独angular兽来运行Rails应用程序,只有最less的权限授予nginx。 (整个应用程序目录不是全局/组可读/可执行的 – 除了根目录710和公共目录710以及其内的文件640)