我想在我的筆記型電腦上進行完整的系統加密。但我有兩個用戶,一個用於家庭,一個用於工作,並希望對這兩個用戶進行單獨的加密。當然,我可以使用 dm-crypt 進行全磁碟加密,並使用 ecryptfs 的第二個加密層來加密主目錄。然而,出於性能原因,這似乎不是一個好主意。那我該如何設定一個系統:
- 整個硬碟都被加密
- 當用戶1登入而用戶2未登入時,用戶2的資料為用戶1加密,反之亦然
- 我需要在啟動時輸入一個密碼來解密系統(就像在通常的 LVM/dm-crypt 設定中一樣),並且只需要輸入第二個密碼來登入使用者 x 並解密他的分割區
- 效能類似於簡單的全碟加密
- 該解決方案應與 SSD 一起使用,即它應支援 TRIM
如果這很重要的話,我想使用 ubuntu 作為發行版。
答案1
不要加密整個硬碟(如 中所示
/dev/sda
,對每個分割區進行加密(或更準確地說是對每個檔案系統進行加密 - 請參閱下文)。在家中為兩個使用者安裝單獨的檔案系統。我有意避免編寫單獨的分區,因為雖然這是通常的處理方式,但它在某些方面受到限制。擁有一個大的主分割區可能會更方便,該分割區保存包含加密檔案系統的大檔案並根據需要進行安裝。其優點是更容易調整使用者房屋的大小,同時保持他們分開。
透過 PAM 可以在登入時自動安裝。請注意,您不想使用相同的密碼進行登入和實際操作。資料加密。相反,您可以使用 LUKS 或將加密金鑰儲存在本身使用登入密碼加密的檔案中來模仿它。這確保了登入密碼的變更不會影響加密的數據,而只會影響加密的金鑰,因此您不必負責重新加密整個使用者的家庭)。
一般說明:
分區使用
gdisk
(也稱為gptfdisk
有時)parted
或任何其他適當的程序,請閱讀手冊頁以獲取詳細資訊(分區有點超出了此 QA 的範圍)基於加密檔案的檔案系統 - 我對LUKS的設計有一些反對,所以我通常會使用
cryptsetup
「plain」模式,它在某些方面模仿LUKS。如果您選擇 LUKS,那麼您只需將步驟減少到cryptsetup
(透過適當修改選項)準備加密金鑰和密碼。這是一個有趣的部分 - 對於加密數據,您需要具有足夠隨機性的東西(8 個字母的密碼確實不夠),而對於密碼,您可以輕鬆更改(無需重新加密整個文件系統)並且相當容易記住並輸入。因此,我們將使用 LUKS 所做的相同技巧(實際上可以被視為 a 的變體)混合密碼系統在某種意義上))。這加密金鑰可以或多或少是隨機的 - 要么使用一些真正隨機的數據(例如來自
/dev/random
),要么使用相當長的哈希值,例如SHA-2 或SHA-3(第一個是由NSA 設計的,如果您想知道是否在鑑於最近發生的事件)相當長的密碼短語。在第一種情況下(以及在真正隨機資料的情況下)相當長意味著,長度應該大約是所使用的密碼所選擇的金鑰長度加的長度初始化向量。在第二種情況下,這意味著很難暴力破解它。使用雜湊的優點是,如果金鑰損壞或遺失,可以恢復金鑰(當然,前提是您記住經過雜湊處理的初始密碼)。然後該密鑰被加密並儲存在檔案中。您的情況下的加密金鑰的密碼將與登入密碼相同。
# set up the encrypted encryption key printf "Reasonably long and complicated passphrase" \ | openssl dgst -sha512 -binary \ | openssl enc -bf > /path/to/key.enc
openssl dgst -sha512 -binary
從其標準輸入產生 SHA-512 雜湊的二進位形式,openssl enc -bf
並使用河豚- 隨意選擇您喜歡的雜湊和密碼(Twofish 或 Rijndael 都經過了很好的嘗試,但內核中可用的其他密碼也應該沒問題)。將金鑰保存在加密裝置之外的缺點是除了加密資料本身之外還需要其他東西 - LUKS 將金鑰儲存在其標頭中,因此它是獨立的。另一方面,您必須使用一組特定的工具。雖然它不是精心設計的並且存在於大多數安裝中,但您需要訪問它的特殊工具。
另一方面,使用單獨的文件,您可以自由選擇儲存金鑰的任何方法。您甚至可以將其放在可移動媒體上,在登入前將其插入,並在安裝檔案系統後將其刪除(您甚至可以在將媒體連接到電腦時掛鉤自動登入)。當然,所有這些都應該經過深思熟慮,因為安全準則“不要發明自己的加密貨幣”適用(參見例如這篇關於安全SE的文章) - 這實際上可能是使用 LUKS 的一個論點。備份金鑰顯然很容易。
建立一個空文件來保存檔案系統
dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X
建立加密設備
openssl enc -bf -d -in /path/to/key.enc 2>/dev/null \ | cryptsetup create \ -c twofish-cbc-essiv:sha256 \ -s 256 \ -h plain \ encryptedfs /path/to/backing_file.enc
openssl enc -bf -d
在標準輸入上請求密碼並嘗試解密加密金鑰。cryptsetup create ... encryptedfs /path/to/backing_file.enc
建立的加密 DM 設備encryptedfs
由先前建立的檔案呼叫。-c
選擇加密密碼的重要選項和其運作方式用零填充設備- 這有效地將“隨機垃圾”放入後備文件中,並使文件的內容可能是什麼變得不那麼明顯(否則,您可以通過掃描未歸零的塊來判斷內容已寫入何處從步驟 2) 開始。
dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M
建立檔案系統
mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs
/etc/fstab
如果您想自己做所有事情,請輸入相應的行,或輸入/etc/crypttab
如果您想要與系統工具進行某種整合。
對於登入/登出時自動(卸載)安裝,我將推薦您參考pam_mount 文檔。
答案2
我可以想到兩種有價值的方法來實現這樣一個系統,而無需對您的家庭進行兩次加密。
- 單獨的主分區:建立一個單獨的分割區並安裝到
/home
.然後每個用戶透過 加密其家庭encfs
。 - 每個使用者都有單獨的主分割區:每個使用者的家庭都有一個單獨的分區,該分區本身使用
dm-crypt
./home/user
當他登入時,該分割區就會被安裝。
當然,加上加密/
;-)
在這兩種情況下,如果您使用相同的密碼進行登入和加密,則可以在登入過程中自動安裝家庭。 (可以在例如中進行配置/etc/security/pam_mount.conf.xml
,有很多方法)雖然第一種方法不會加密使用者資料夾的名稱,但使用第二種方法實際上所有內容都會被加密。所以我更喜歡(並且實際使用)方法二;-)