在 Ruby on Rails 应用程序中,database.yml 是一个存储数据库凭据的纯文本文件。

当我部署Rails应用程序时,我会在Capistrano食谱中有一个后部署回调,该回调在应用程序 /config Directory中在Database.yml文件中创建一个符号链接。文件本身存储在标准 Capistrano /releases 目录结构之外的单独目录中。我对该文件进行了 chmod 400 操作,因此只有创建该文件的用户才能读取该文件。

  • 这足以锁定它吗?如果没有,你还做什么?
  • 有人加密他们的database.yml 文件吗?
有帮助吗?

解决方案

您还需要确保您的 SSH 系统非常安全,以防止人们登录 作为 你的 Capistrano 机器人。我建议限制对受密码保护的密钥对的访问。

加密服务器上的 .yml 文件是没有用的,因为您必须向机器人提供密钥,该密钥将被存储。。。在同一台服务器上。在您的计算机上对其进行加密可能是一个好主意。Capistrano 可以在发送之前对其进行解密。

其他提示

我解决这个问题的方法是将数据库密码放在一个文件中,该文件仅对我运行应用程序的用户具有读取权限。然后,在database.yml中我使用ERB来读取该文件:

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>

工作是一种享受。

看看这个github解决方案: https://github.com/NUBIC/bcdatabase. 。bcdatabase 提供了一个加密存储,其中密码可以与 yaml 文件分开。

BC数据库

BCDATABASE是一个库和实用程序,可为Ruby提供Ruby在Rails应用程序上提供数据库配置参数管理。它提供了一种简单的机制,可以将数据库配置属性与应用程序源代码分开,因此没有诱惑将密码检查到版本控制系统中。它集中了单个服务器的参数,因此可以在多个应用程序之间轻松共享它们,并且很容易由单个管理员更新。

即使您保护了database.yml 文件,如果人们可以更改应用程序的代码,他们仍然可以使用相同的凭据进行编写。

另一种看待这个问题的方法是:Web 应用程序是否有对数据库的大量访问权限。如果为 true 则降低权限。为应用程序授予足够的权限。这样,攻击者只能执行 Web 应用程序能够执行的操作。

如果您非常关心 yml 文件的安全性,我不得不问:它存储在您的版本控制中吗?如果是这样,那就是攻击者可以利用的另一个点。如果您通过非 SSL 进行结账/签入,有人可能会拦截它。

另外,通过某些版本控制(例如 svn),即使您删除它,它仍然存在于历史记录中。因此,即使您在过去的某个时候删除了它,更改密码仍然是一个好主意。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top