dm-crypt/加密非root文件系统 - Arch Linux 中文维基

跳至內容

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

出自 Arch Linux 中文维基
< Dm-crypt

翻譯狀態：

- 本文（或部分內容）譯自 Dm-crypt/Encrypting a non-root file system，最近一次同步於 2025-07-30，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

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

## 總覽

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

dm-crypt 是塊級別加密層，其將加密整個塊設備（例如，分區和迴環設備）。

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

## 分區

本例介紹的是對 `/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#部分讀取：複製的數據量小於要求的大小。

要避免之後調整容器大小的麻煩，在創建文件容器時，確保其大小大於要加密的文件的總大小、文件系統內部數據/元數據開銷和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

分類：​

- 靜態數據加密

dm-crypt/加密非root文件系统
新增話題