如何保护database.yml?
在Ruby on Rails应用程序中,database.yml是存储数据库凭证的纯文本文件。
当我部署Rails应用程序时,我的Capistrano中有一个部署后回调
在应用程序的/ config目录中创建到database.yml文件的符号链接的配方。文件本身存储在标准Capistrano / releases目录结构之外的单独目录中。我对文件进行了chmod 400处理,因此只有创建它的用户才能读取它。
- 这足以将其锁定吗?如果没有,我们还要做什么?
- 有人在加密他们的database.yml文件吗?
解决方案
回答
我们还需要确保SSH系统安全可靠,以防止人们以Capistrano僵尸程序身份登录。我建议限制对受密码保护的密钥对的访问。
加密服务器上的.yml文件是没有用的,因为我们必须给bot密钥,该密钥将被存储。 。 。在同一台服务器上。在计算机上对其进行加密可能是一个好主意。 Capistrano可以在发送前将其解密。
回答
如果我们非常担心yml文件的安全性,我必须要问:它存储在版本控制中吗?如果是这样,那是攻击者可以达到的另一点。如果我们要通过非SSL签出/签入,则有人可能会拦截它。
同样,使用某些版本控制(例如,svn的svn),即使将其删除,它仍会保留在历史记录中。因此,即使我们过去曾经删除过它,更改密码仍然是一个好主意。
回答
即使我们保护了database.yml文件,如果人们可以更改应用程序的代码,他们仍然可以使用相同的凭据进行编写。
另一种看待这种情况的方式是:Web应用程序是否必须具有对数据库的大量访问权限。如果为true,则降低权限。给应用程序足够的权限。这样,攻击者只能执行Web应用程序所能做的事情。
回答
我解决此问题的方法是将数据库密码放在仅具有我作为应用程序运行用户的读取权限的文件中。然后,在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文件分开保存。
bcdatabase bcdatabase is a library and utility which provides database configuration parameter management for Ruby on Rails applications. It provides a simple mechanism for separating database configuration attributes from application source code so that there's no temptation to check passwords into the version control system. And it centralizes the parameters for a single server so that they can be easily shared among multiple applications and easily updated by a single administrator.