50

Ruby on Railsアプリケーション内のdatabase.ymlは、データベースのクレデンシャルを格納するプレーンテキストファイルです。

Railsアプリケーションをデプロイすると、Capistranoレシピにデプロイ後のコールバックがあり、アプリケーションの/configディレクトリ内にdatabase.ymlファイルへのシンボリックリンクが作成されます。ファイル自体は、標準のCapistrano/releasesディレクトリ構造の外側にある別のディレクトリに保存されます。ファイルをchmod400するので、ファイルを作成したユーザーだけが読み取ることができます。

  • これはそれをロックするのに十分ですか?そうでない場合は、他に何をしますか?
  • database.ymlファイルを暗号化している人はいますか?
4

6 に答える 6

39

私がこれに取り組んだ方法は、アプリケーションを実行しているユーザーに対してのみ読み取り権限を持つファイルにデータベースパスワードを配置することです。次に、database.ymlでERBを使用してファイルを読み取ります。

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

御馳走を動作します。

于 2009-06-16T13:29:02.210 に答える
12

また、人々がCapistrano ボットとしてログインするのを防ぐために、SSH システムが十分に保護されていることを確認する必要があります。パスワードで保護された鍵ペアへのアクセスを制限することをお勧めします。

サーバー上の .yml ファイルを暗号化しても意味がありません。これは、保管されるキーをボットに与える必要があるためです。. . 同じサーバー上。マシンで暗号化することは、おそらく良い考えです。Capistrano は、送信前に暗号化を解除できます。

于 2008-08-20T16:41:15.220 に答える
10

この github ソリューションを見てみましょう: https://github.com/NUBIC/bcdatabase。bcdatabase は、パスワードを yaml ファイルから分離して保管できる暗号化されたストアを提供します。

bcデータベース

bcdatabase は、Ruby on Rails アプリケーションのデータベース構成パラメーター管理を提供するライブラリーおよびユーティリティーです。データベース構成属性をアプリケーション ソース コードから分離するための単純なメカニズムを提供するため、パスワードをバージョン管理システムにチェックインする誘惑はありません。また、単一サーバーのパラメーターを一元化するため、パラメーターを複数のアプリケーション間で簡単に共有したり、1 人の管理者が簡単に更新したりできます。

于 2010-08-09T20:38:11.450 に答える
3

database.ymlファイルを保護しても、アプリケーションのコードを変更できれば、同じ資格情報を使用して書き込むことができます。

これを確認する別の方法は次のとおりです。Webアプリケーションはデータベースに多くのアクセス権を持っている必要がありますか。trueの場合、権限を下げます。アプリケーションに十分な権限を与えます。このように、攻撃者はWebアプリケーションが実行できることのみを実行できます。

于 2009-05-25T18:09:09.747 に答える
1

yml ファイルのセキュリティについて非常に懸念している場合は、質問する必要があります: バージョン管理に保存されていますか? もしそうなら、それは攻撃者がそれに到達できる別のポイントです. 非 SSL でチェックアウト/チェックインを行っている場合、誰かがそれを傍受する可能性があります。

また、一部のバージョン管理 (svn など) を使用すると、削除しても履歴に残ります。そのため、過去のある時点で削除したとしても、パスワードを変更することをお勧めします。

于 2008-10-29T16:26:42.283 に答える