【问题标题】:What permissions are needed for apache PassengerapachePassenger需要什么权限
【发布时间】:2011-05-17 21:20:25
【问题描述】:

在 Linode、RVM、Rails 3、带有乘客模块、carrierwave 和 mini-magick 的 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 个目录应该是可写的,那就是日志文件和上传目录,我试图保护其余的目录。是否还有其他我需要使其可写的文件夹/文件?

【问题讨论】:

  • 我认为,您应该使用 chown 而不是 chmod 来设置所有者和组。并使用 chmod 设置实际的权限模式。要检查权限和所有权,请使用命令 ls -l /path/to/file_or_directory
  • @taro - 你是对的。自从我使用 linux 以来已经有一段时间了。做了chown -R root:root /srv/www/mysite.com/testapp 然后做了chown -R www-data:www-data /srv/www/mysite.com/testapp/log /srv/www/mysite.com/testapp/public/uploadschmod 772 /srv/www/mysite.com/testapp/log /srv/www/mysite.com/testapp/public/uploads。这听起来对吗?
  • 看起来不错,但可能没有这样的组根,有轮子。此外,在这种情况下,通常为目录设置 chmod 755。
  • 这对你有用吗?

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


【解决方案1】:

网站上的权限有点奇怪:一方面,内容需要由网络服务器和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) 联机帮助页)并为文件提供相同的组所有者,并使用组权限位(中间八进制数:750700)。这很复杂,除非你有充分的理由,否则可能不值得走这条路。 (绝对值得在某处的开发机器上进行一次,只要您对它足够熟悉,以便将来可以使用它。:)

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多