簡體   English   中英

您如何保護 database.yml?

[英]How Do You Secure database.yml?

在 Ruby on Rails 應用程序中,database.yml 是一個存儲數據庫憑據的純文本文件。

當我部署我的 Rails 應用程序時,我在我的 Capistrano 配方中有一個部署后回調,它在應用程序的 /config 目錄中創建一個指向 database.yml 文件的符號鏈接。 文件本身存儲在標准 Capistrano /releases 目錄結構之外的單獨目錄中。 我 chmod 400 文件所以它只能由創建它的用戶讀取。

  • 這足以鎖定它嗎? 如果沒有,你還做什么?
  • 有人在加密他們的 database.yml 文件嗎?

我解決這個問題的方法是將數據庫密碼放在一個文件中,該文件僅對我運行應用程序的用戶具有讀取權限。 然后,在 database.yml 中,我使用 ERB 讀取文件:

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

很好用。

您還需要確保您的 SSH 系統受到良好保護,以防止人們您的 Capistrano 機器人身份登錄。 我建議限制對受密碼保護的密鑰對的訪問。

加密服務器上的 .yml 文件是沒有用的,因為您必須向機器人提供密鑰,該密鑰將被存儲。 . . 在同一台服務器上。 在您的機器上加密它可能是一個好主意。 Capistrano 可以在發送前對其進行解密。

看看這個 github 解決方案: https : //github.com/NUBIC/bcdatabase bcdatabase 提供了一個加密存儲,可以將密碼與 yaml 文件分開保存。

數據庫

bcdatabase 是一個庫和實用程序,它為 Ruby on Rails 應用程序提供數據庫配置參數管理。 它提供了一種將數據庫配置屬性與應用程序源代碼分離的簡單機制,這樣就沒有誘惑將密碼檢查到版本控制系統中。 並且它集中了單個服務器的參數,以便它們可以在多個應用程序之間輕松共享,並由單個管理員輕松更新。

即使您保護了 database.yml 文件,如果人們可以更改您的應用程序的代碼,他們仍然可以使用相同的憑據編寫。

另一種看待這個問題的方法是:Web 應用程序是否必須訪問數據庫。 如果為 true,則降低權限。 為應用程序授予足夠的權限。 通過這種方式,攻擊者只能執行 Web 應用程序能夠執行的操作。

如果你很在意yml文件的安全性,我不得不問:它是否存儲在你的版本控制中? 如果是這樣,這是攻擊者可以獲取的另一個點。 如果您通過非 SSL 進行結賬/簽入,有人可能會攔截它。

此外,通過一些版本控制(例如 svn),即使您將其刪除,它仍然存在於歷史記錄中。 因此,即使您在過去的某個時候刪除了它,更改密碼仍然是一個好主意。

遲到總比不到好,我發布了我的答案,因為這個問題仍然相關。 對於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

現在,可以使用Rails.application.credentials訪問這些秘密。

所以你的 database.yml 將如下所示:

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= Rails.application.credentials.production_dbpwd %>

您可以在此處閱讀有關此內容的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM