2008-08-20 68 views
50

在Ruby on Rails應用程序中database.yml是存儲數據庫憑證的純文本文件。如何保護database.yml?

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

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

回答

12

你還需要確保你的SSH系統十分安全,防止有人伐木您Capistrano的機器人。我建議限制訪問密碼保護密鑰對。

加密服務器上的.yml文件是沒用的,因爲你必須給機器人鑰匙,這將被存儲。 。 。在同一臺服務器上。在你的機器上加密它可能是一個好主意。 Capistrano可以在發送前解密它。

1

如果你非常關心yml文件的安全性,我不得不問:存儲在你的版本控制中嗎?如果是這樣,這是攻擊者可以得到的另一點。如果您正在通過非SSL進行結帳/登記,則有人可能會攔截它。

另外,有些版本控制(例如svn,例如),即使刪除它,它仍然存在於歷史中。所以,即使您在過去某個時候刪除了它,但更改密碼仍然是一個好主意。

+0

我從來沒有在我的源代碼控制庫中存儲database.yml。 – 2008-10-29 21:05:07

+0

任何在文件中存儲祕密並將其上傳到版本控制的人都應該被打屁股。 – 2016-10-06 00:14:33

3

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

另一種看待這個問題的方法是:Web應用程序是否必須訪問數據庫。如果真的降低權限。給應用程序提供足夠的權限。這樣攻擊者只能做web應用程序能夠做的事情。

38

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

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

作品一個款待。

+2

如何改進直接在database.yml上設置應用程序用戶的讀取權限? – 2009-06-16 20:36:42

10

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

bcdatabase

bcdatabase是一個庫和效用 ,其上的Rails 應用程序提供數據庫配置 參數管理爲Ruby。它提供了一個簡單的 機制,用於分離數據庫 配置屬性 應用程序源代碼,以便 沒有誘惑將 密碼複製到版本控制系統 中。它集中了單個服務器的 參數,因此它們可以輕鬆地在多個應用程序之間共享 ,並且易於由單個管理員更新 。