跳至內容

dm-crypt/加密非root文件系统

出自 Arch Linux 中文维基

以下是一些用 dm-crypt 加密輔助(secondary)文件系統(即,非根文件系統)的例子。

總覽

[編輯 | 編輯原始碼]

加密輔助文件系統不會對作業系統、程序文件進行加密,因此通常只用於單獨保護敏感數據。對於USB驅動器等外部介質,進行加密可確保在不同計算機上使用時,數據安全不受威脅。此外,也可按照數據訪問人員將數據分類,分別使用不同的密鑰加密。

dm-crypt 是塊級別加密層,其將加密整個塊設備(例如,分區迴環設備)。

若要加密單個文件,需要使用文件系統層級的加密。例如使用eCryptfsEncFS。有關保護隱私數據的更多信息,參見靜態數據加密

分區

[編輯 | 編輯原始碼]

本例介紹的是對 /home 分區的加密,但相關方法也可以應用到其它包含用戶數據的非根分區。

提示:可以為每個用戶的/home目錄單獨分配一個分區,也可以所有用戶的/home目錄共享一個分區。

下文假定用於/home目錄的分區已經創建。若該分區曾用於其它用途,因而包含了數據,可能需要使用dm-crypt專用方案安全擦除分區。注意,只擦除一個分區,而不擦除整個磁碟,可能仍會洩露一些數據。

建立 LUKS 頭:

# cryptsetup options luksFormat device

device應對應已創建的分區。options的取值參見Dm-crypt/設備加密#LUKS_模式的加密選項

使用設備映射器對設備進行解密,以對加密的分區進行操作:

# cryptsetup open device name

分區解密之後,會被映射成塊設備 /dev/mapper/name。之後,建立文件系統

# mkfs.fstype /dev/mapper/name

若所有用戶共享/home目錄,則可將創建好的文件系統掛載到/home;若該文件系統是某個用戶專用的,則掛載到/home/username。參見 #手動掛載和卸載

提示:卸載並再掛載一次文件系統,可確定映射有無問題。

手動掛載和卸載

[編輯 | 編輯原始碼]

掛載分區:

# cryptsetup open device name
# mount /dev/mapper/name /mnt/home

卸載:

# umount /mnt/home
# cryptsetup close name
提示:GVFS 也可以掛載加密的分區。若使用支持 gvfs 的文件管理器(例如,Thunar)掛載加密分區,則會彈出密碼輸入框。對於其他桌面環境,可使用zulucryptAUR進行圖形化掛載。

自動解鎖並掛載

[編輯 | 編輯原始碼]

有三種不同方法來自動化解鎖分區並掛載文件系統。

啟動時解鎖

[編輯 | 編輯原始碼]

配置 /etc/crypttab 文件,systemd會在系統啟動過程中自動解析該文件,並以此解密相應設備。若要掛載所有用戶共用的home分區,或要自動掛載其它加密的塊設備,推薦使用本方法。

可參考Dm-crypt/系統配置#crypttab。此外,Dm-crypt/系統配置#在啟動時掛載中提供了示例配置。

用戶登錄時解鎖

[編輯 | 編輯原始碼]
  • 使用pam_exec:若需要為每個用戶掛載單獨的加密home分區,推薦使用該方式。
  • 使用pam_mount

文件容器

[編輯 | 編輯原始碼]

Cryptsetup 對設備進行操作。因此,若要使用文件容器,需要配置迴環設備。好在,在後台,cryptsetup可自動管理迴環設備(請見 Gentoo:Custom_Initramfs#Encrypted_keyfile),無需手動調用 losetup

首先,使用恰當的隨機數生成器dd 創建一個加密容器:

$ dd if=/dev/urandom of=bigsecret.img bs=100M count=1 iflag=fullblock

這會創建大小為 100 MiB 的 bigsecret.img 文件。

注意,不要遺漏iflag=fullblock選項。否則,可能出現「部分讀」問題。詳見dd#Partial_read:_copied_data_is_smaller_than_requested

要避免之後調整容器大小的麻煩,在創建文件容器時,確保其大小大於要加密的文件的總大小、文件系統內部數據/元數據開銷和LUKS頭的總和。若使用LUKS,則僅其元數據就可能需要多達16MiB的空間。創建一個小於 LUKS頭(16MiB)大小的文件容器會在打開設備時報錯Requested offset is beyond real size of device bigsecret.img

之後的操作和#分區中的相同,但要將 device 替換為 bigsecret.img

cryptsetup 會自動尋找可用的迴環設備設備並將文件附加到設備上。在卸載之後,文件容器應該相應地關閉,cryptsetup之後會分離使用的迴環設備。

提示:使用dm-crypt加密容器非常靈活。可查看Tomb的功能和文檔詳細了解。Tomb提供了一系列dm-crypt腳本,以便快速靈活地處理加解密操作。

使用 losetup 手動掛載和卸載

[編輯 | 編輯原始碼]

首先,查找未使用的迴環設備:

# losetup --find

然後,將文件容器附加到迴環設備,例如,要附加到loop0

# losetup /dev/loop0 bigsecret.img
注意:如果出現/dev/loop0: No such file or directory錯誤,需要先以 root 用戶執行命令modprobe loop以加載內核模塊。較新的內核中(內核版本3.2及更高),迴環設備是按需創建的。可通過以 root 用戶執行 losetup -f 命令請求創建新的迴環設備。

之後,按照常規方式進行cryptsetup設置即可:

# cryptsetup open /dev/loop0 secret
# mount -t ext4 /dev/mapper/secret /mnt/secret

卸載容器時,需要以相反的順序執行對應的操作:

 # umount /mnt/secret
 # cryptsetup close secret

若要分離使用的迴環設備:

 # losetup --detach /dev/loop0