Joh*_*ley 50 security deployment ruby-on-rails
在Ruby on Rails应用程序中,database.yml是一个存储数据库凭据的纯文本文件.
当我部署我的Rails应用程序时,我在Capistrano配方中有一个After deploy回调,它在应用程序的/ config目录中创建了一个到database.yml文件的符号链接.文件本身存储在标准Capistrano/releases目录结构之外的单独目录中.我chmod 400文件所以它只能由创建它的用户读取.
Oll*_*lly 39
我解决这个问题的方法是将数据库密码放在一个只有我运行应用程序的用户具有读权限的文件中.然后,在database.yml中我使用ERB来读取文件:
production:
adapter: mysql
database: my_db
username: db_user
password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>
Run Code Online (Sandbox Code Playgroud)
工作一种享受.
Jam*_*sen 12
您还需要确保SSH系统安全可靠,以防止人们以 Capistrano机器人身份登录.我建议限制访问受密码保护的密钥对.
加密服务器上的.yml文件是没用的,因为你必须给bot一个密钥,它将被存储...在同一台服务器上.在您的机器上加密它可能是一个好主意.Capistrano可以在发送之前对其进行解密.
slm*_*slm 10
看看这个github解决方案:https://github.com/NUBIC/bcdatabase.bcdatabase提供加密存储,其中密码可以与yaml文件分开.
bcdatabase
bcdatabase是一个库和实用程序,它为Ruby on Rails应用程序提供数据库配置参数管理.它提供了一种简单的机制,用于将数据库配置属性与应用程序源代码分离,因此无需将密码检入版本控制系统.它集中了单个服务器的参数,因此可以在多个应用程序之间轻松共享,并由单个管理员轻松更新.
迟到总比不到好,我发布我的答案,因为问题仍然相关。对于 Rails 5.2+,可以使用加密文件credentials.yml.enc 来保护任何敏感信息。
Rails 将机密存储在 中config/credentials.yml.enc,该机密已加密,因此无法直接编辑。我们可以通过运行以下命令来编辑凭据:
$ EDITOR=nano rails credentials:edit
secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
production_dbpwd: my-secret-password
Run Code Online (Sandbox Code Playgroud)
现在,可以使用 访问这些秘密Rails.application.credentials。
所以你的database.yml将如下所示:
production:
adapter: mysql
database: my_db
username: db_user
password: <%= Rails.application.credentials.production_dbpwd %>
Run Code Online (Sandbox Code Playgroud)
您可以在这里阅读更多相关内容
| 归档时间: |
|
| 查看次数: |
19939 次 |
| 最近记录: |