在Ruby on Rails应用程序中,database.yml是存储数据库凭证的纯文本文件。
当我部署Rails应用程序时,我的Capistrano中有一个部署后回调
在应用程序的/ config目录中创建到database.yml文件的符号链接的配方。 文件本身存储在标准Capistrano / releases目录结构之外的单独目录中。 我对文件进行了chmod 400处理,因此只有创建它的用户才能读取。
-
这足以将其锁定吗? 如果没有,您还要做什么?
-
有人在加密他们的database.yml文件吗?
我解决此问题的方法是将数据库密码放在仅对我以其身份运行我的应用程序的用户具有读取权限的文件中。然后,在database.yml中,我使用ERB读取文件:
1 2 3 4 5
| production:
adapter: mysql
database: my_db
username: db_user
password: <%= begin IO.read("/home/my_deploy_user/.db") rescue"" end %> |
工作请客。
您还需要确保SSH系统安全可靠,以防止人们以Capistrano僵尸程序身份登录。我建议限制对受密码保护的密钥对的访问。
加密服务器上的.yml文件是没有用的,因为您必须给bot密钥,该密钥将被存储。 。 。在同一台服务器上。在您的计算机上对其进行加密可能是一个好主意。 Capistrano可以在发送前将其解密。
看看这个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.
即使您保护了database.yml文件,如果人们可以更改应用程序的代码,他们仍然可以使用相同的凭据进行编写。
另一种查看方式是:Web应用程序是否需要大量访问数据库。如果为true,则降低权限。给应用程序足够的权限。这样,攻击者就只能执行Web应用程序所能做的事情。
如果您非常担心yml文件的安全性,那么我不得不问:它存储在版本控制中吗?如果是这样,那就是攻击者可以达到的另一点。如果您要通过非SSL签出/签入,则有人可能会拦截它。
同样,使用某些版本控制(例如,svn,例如,svn),即使将其删除,它仍会保留在历史记录中。因此,即使您过去曾经删除过它,更改密码仍然是一个好主意。