apache Passenger需要什么权限

在Linode,RVM,Rails 3,带乘客模块的Apache,运载波和迷你魔法上运行Ubuntu 10.04

我明白了:

Rails Error: Unable to access log file. Please ensure that /srv/www/mysite.com/testapp/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed. 

Errno::EACCES (Permission denied /srv/www/mysite.com/testapp/public/uploads/tmp/20110517-1707-2938-6455):

我运行了chmod -R root:root /srv/www/mysite.com/testapp

然后: chmod -R www-data:www-data /srv/www/mysite.com/testapp chmod -R www-data:www-data /srv/www/mysite.com/testapp/public/uploads

由于只有2个应该可写的目录是日志文件和上传目录,我试图确保其余的。 还有其他我需要写的文件夹/文件吗?

网站上的权限有点奇怪:一方面,内容需要由Web服务器和FastCGIPassenger或任何执行(在本例中为Ruby)代码的内容读取。 另一方面,如果网络服务器用户拥有这些文件,那么被黑客入侵的网络服务器或(更可能是:)您的代码可能会修改您网站的可执行文件和静态文件 。 它经常发生 。

如果网站的内容由其他用户拥有,而不是由网络服务器软件写入,则该网站不能被攻击者覆盖 。 (当然,你有一些数据库连接的开放套接字;所有数据库支持的数据都可能被攻击者破坏。此外,你允许上传的任何目录都可能被攻击者破坏。但目标是减少特权。软件尽量合理 。)

所有这些都说明了你的具体问题; 您的网络服务器软件以www-data运行,您的日志文件和上传目录由www-data拥有是有意义的:

 mkdir -p /srv/www/mysite.com/testapp/log/ # might not exist yet chown -R pcasa:pcasa /srv/www/mysite.com/ # or some other user chmod 755 /srv/www/mysite.com chmod 755 /srv/www/mysite.com/testapp/ # populate the app directory with your files, if you haven't done so already chown -R www-data:www-data /srv/www/mysite.com/testapp/log chmod 755 /srv/www/mysite.com/testapp/log # see notes chmod 644 /srv/www/mysite.com/testapp/log/* # see notes 

我假设您系统上的所有用户都可以读取日志。 这可能不是真的。 如果您不希望所有系统用户都读取日志文件,请使用700代替755600代替644

接下来,为您的uploads目录:

 mkdir -p /srv/www/mysite.com/testapp/public/uploads/tmp # might not exist yet chown -R www-data:www-data /srv/www/mysite.com/testapp/public/uploads chmod 755 /srv/www/mysite.com/testapp/public/uploads chmod 755 /srv/www/mysite.com/testapp/public/uploads/tmp 

同样,我假设您系统上的所有用户都能够看到所有上传的内容。 如果您只是希望Web服务器软件能够读取文件,请使用700代替755

这些是应该有效的简单指南; 如果你想通过运行带有补充组的网络服务器来保持网站软件和内容仅在拥有网站的用户和运行网站的用户之间共享,那么你会变得更加复杂(参见newgrp(1)group(5) manpages for details)并为文件提供相同的组所有者,并使用组权限位(中间八进制数: 750 vs 700 )。 这很复杂,除非你有充分的理由,否则可能不值得走这条路。 (绝对值得在某个开发机器上做一次 ,这样你就可以熟悉它,以便将来可以使用它。:)