apache Passenger需要什么权限

时间:2011-05-17 21:20:25

标签: ruby-on-rails ruby-on-rails-3

在Linode,RVM,Rails 3,带Passenger模块的Apache,carrierwave和mini-magick上运行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个应该可写的目录是日志文件和上传目录,我试图确保其余的。我还需要其他文件夹/文件可写吗?

1 个答案:

答案 0 :(得分:31)

网站上的权限有点奇怪:一方面,内容需要由网络服务器和FastCGIPassenger或任何执行(在本例中为Ruby)代码的内容读取。另一方面,如果网络服务器用户拥有文件,那么被黑客入侵的网络服务器或(更有可能:)你的代码可以modify the executable files and static files that are your websiteIt happens too often

如果网站的内容由某些其他用户拥有,而不是由网络服务器软件写入,则网站不能被攻击者覆盖。 (当然,你有一些数据库连接的开放套接字;所有数据库支持的数据都可能被攻击者破坏。此外,你允许上传的任何目录都可能被攻击者破坏。但目标是reduce the privileges of the software as far as reasonable 。)

所以,所有这些都说明了你的具体问题;您的网络服务器软件以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

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

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