Arch-Linux

Linux 上的 ZFS 加密池?

  • October 28, 2019

我目前正在玩和測試 ZFS,我真的很喜歡它。現在我正在尋找最好的方法來使用它來替代我的基於 luks 的全盤加密的標准設置。

ZFS 中的加密概念如何,我是加密整個還是​​僅加密單個數據集?我的想法是啟動,輸入密碼,其餘的照常。我不想為我的池中的每個數據集輸入密碼,這可能嗎?

我已經嘗試在 luks 全磁碟加密容器中使用 ZFS 池,它可以工作,但我想這會比直接使用 ZFS 性能低得多。

我正在使用帶有“穩定”核心和 NVME SSD 的 Arch Linux。感謝您的澄清和推薦的設置!

哦,還有一個:我讀到您無法加密現有的數據集或池,情況仍然如此嗎?

  • 隨著 0.8 版的發布,加密已添加到 Linux 上的 ZFS。所以你至少需要那個版本。
  • 在 ZFS 中,加密基於每個數據集,而不是基於池 - 但是,與 ZFS 中的大多數事物一樣,數據集可以從其父級(或從定義encryptionroot而不是父級)繼承加密屬性。
  • 在 ZFS 中對數據集設置加密不會自動加密其中已有的任何數據。與啟用壓縮(或更改壓縮類型)一樣,只有新數據會被加密。
  • 要加密現有數據,您可以將其rsynczfs send啟用加密的另一個數據集,然後用新的加密數據集替換舊數據集。這可能需要係統處於單使用者模式(或至少暫時關閉任何可能寫入舊數據集或在舊數據集上打開文件的程序)

我沒有在我的任何 zpool 上使用加密,所以這就是我所知道的一切。我強烈建議做更多的研究並閱讀 ZOL 郵件列表的檔案,並在ZOL github repo上搜尋與加密相關的問題

加密部分man zfs

加密

啟用加密功能允許創建加密的文件系統和卷。ZFS 將加密文件和 zvol 數據、文件屬性、ACL、權限位、目錄列表、FUID 映射和userused/groupused數據。ZFS 不會加密與池結構相關的元數據,包括數據集和快照名稱、數據集層次結構、屬性、文件大小、文件漏洞和重複數據刪除表(儘管重複數據刪除數據本身已加密)。

密鑰輪換由 ZFS 管理。更改使用者的密鑰(例如密碼)不需要重新加密整個數據集。可以在不載入加密密鑰的情況下擦除、重新同步、重命名和刪除數據集(zfs load-key有關密鑰載入的更多資訊,請參見子命令)。

創建加密數據集需要在創建時指定encryptionkeyformat屬性,以及可選的 keylocationpbkdf2iters。輸入加密密鑰後,創建的數據集將成為加密根。預設情況下,任何後代數據集都將從加密根繼承其加密密鑰,這意味著載入、解除安裝或更改加密根的密鑰將對所有繼承數據集隱式執行相同的操作。如果不需要這種繼承,只需 keyformat在創建子數據集時提供 a 或用於zfs change-key破壞現有關係,在子數據集上創建新的加密根。

請注意,子keyformat節點可能與父節點匹配,但仍會創建新encryption根,並且單獨更改加密屬性不會創建新的加密根;這將簡單地使用不同的密碼套件,其密鑰與其加密根相同。一個例外是複製將始終使用其來源的加密密鑰。由於此異常,某些與加密相關的屬性(即keystatuskeyformatkeylocationpbkdf2iters)不會像其他 ZFS 屬性那樣繼承,而是使用由其加密根確定的值。可以通過只讀 encryptionroot屬性跟踪加密根繼承。

加密會改變一些 ZFS 操作的行為。壓縮後應用加密,因此保留了壓縮率。ZFS 中的校驗和通常為 256 位長,但對於加密數據,校驗和是使用者選擇的校驗和的 128 位和來自加密套件的 MAC 的 128 位,這為惡意更改數據提供了額外的保護。在啟用加密的情況下仍然可以進行重複數據刪除,但為了安全起見,數據集只會針對自身、快照和複製進行重複數據刪除。

加密數據集有一些限制。無法通過該embedded_data功能嵌入加密數據。加密數據集可能沒有副本=3,因為實現儲存了一些加密元數據,第三個副本通常是。由於在加密之前應用了壓縮,如果訪問數據的應用程序允許,數據集可能容易受到類似 CRIME 的攻擊。帶有加密的重複數據刪除將洩漏有關數據集中哪些塊等效的資訊,並且每個寫入的塊都會產生額外的 CPU 成本。

引用自:https://unix.stackexchange.com/questions/548997