dm-crypt/Encrypting a non-root file system (正體中文)

From ArchWiki
Jump to navigation Jump to search

以下是有關使用 dm-crypt 加密次要檔案系統(就是非 root 分割區)的範例。

概覽

若只需保護敏感資料的話通常會加密次要檔案系統,而作業系統及程式檔案處於未加密狀態。這可以運用在許多外接媒體,像是隨身碟或隨身硬碟,因此可以安全地在不同電腦之間使用資料。也可以利用加密設定選擇誰擁有哪些分區的存取權限。

因為 dm-crypt 是 底層區塊級 加密層,它只能加密 整個分割區loop 裝置。如果需要加密個人零散的檔案需要使用檔案系統級的加密層像是 eCryptfsEncFS。請參閱 Disk encryption 取得更多有資訊關於保護隱私資料。

分割區

雖然以下使用 /home 分割區作為示範,但也適用於其他類似的非 root 分割區。

提示: 您可以建立每一個使用者 /home 目錄為單一的分割區, 或者建立一個所有使用者共用的 /home 目錄。

首先請確定目標分割區是空白的(沒有任何檔案系統)。如果已經建立好檔案系統請先刪除後重新建立一個空白分割區。然後準備安全的覆寫該分割區,請參閱 see dm-crypt/Drive preparation (正體中文)#安全地覆寫硬碟.

建立將包含加密容器的分割區。

然後使用以下指令建立 LUKS 標頭:

# cryptsetup options luksFormat device

使用剛剛所建立的分割區取代 device 。請參閱 Dm-crypt/Device encryption#Encryption options for LUKS mode 取得 options 的詳細內容。

要獲得加密分區的存取權限,請使用裝置映射器解鎖,指令如下:

# cryptsetup open device name

解鎖之後,此分割區可以在 /dev/mapper/name 存取。現在請建立一個您想要的 檔案系統

# mkfs.fstype /dev/mapper/name

掛載檔案系統到 /home,或者只想要給單一使用者存取的 /home/username 目錄,請參閱#手動掛載與卸載.

提示: 可以掛載與卸載一次確認裝置映射是正常運作的。

手動掛載與卸載

掛載一個分割區:

# cryptsetup open device name
# mount -t fstype /dev/mapper/name /mnt/home

卸載一個分割區:

# umount /mnt/home
# cryptsetup close name
Tip: GVFS 也可以掛載加密分割區。使用一個支援 gvfs 的檔案管理器(例如 Thunar)掛載分割區,密碼提示視窗就會跳出來。對於其他桌面,zulucryptAUR 也提供 GUI。

自動解鎖及掛載

這裡有三種方式可以自動解鎖分割區後掛載各自的檔案系統。

在開機時

使用 /etc/crypttab 設定檔,將在開機時 systemd 的自動解析過程中解鎖。這方法推薦用於當您想要使用單一使用者家目錄分割區時或自動掛載其他已加密的區塊裝置。

請參閱 Dm-crypt/System configuration#crypttabDm-crypt/System configuration#Mounting at boot time 查看設定範例。

在使用者登入時

使用 pam_exec 可以在使用者登入之時解鎖 (cryptsetup open) 分割區:這推薦用於各使用者擁有自己獨立加密的 /home 分割區。請參閱 dm-crypt/Mounting at login

使用 pam_mount 也可以達成在使用者登入時解鎖的目的。

Loop 裝置

這裡有兩種方式可以將 loop 裝置作為加密容器,一種直接使用 losetup 而另外一種則不使用。

不使用 losetup

透過以下指令可以完全避免使用 losetup [1]

# dd if=/dev/urandom of=key.img bs=20M count=1
# cryptsetup --align-payload=1 luksFormat key.img

在執行 cryptsetup之前,請先參閱 Encryption options for LUKS modeCiphers and modes of operation f選擇您想使用的加密選項。

開啟裝置與建立 檔案系統 的步驟與 #分割區 相同。

當檔案太小時可能會出現這樣 Requested offset is beyond real size of device /dev/loop0 的錯誤,大致上建立 4 MiB 的檔案就會成功了。[2]

如果使用 dd/dev/urandom 建立大檔案,將會停留在 32 MiB,需要使用 iflag=fullblock 選項才可以完整寫入。[3]

手動掛載與卸載的步驟跟 #手動掛載與卸載 相同。

使用 losetup

Loop 裝置可以使用標準的 util-linux 工具 losetup 映射到底層區塊裝置檔案上。這個檔案可以擁有自己的檔案系統,可以如同其他檔案系統一樣使用。許多使用者知道 TrueCrypt 也是一的建立加密容器的工具。使用以下的範例透過 LUKS 加密 loopback 檔案系統一樣可以做到相同的功能。

首先請使用適當的 隨機數生產器 建立加密容器:

# dd if=/dev/urandom of=/bigsecret bs=1M count=10

這樣會建立一個名為 bigsecret且大小為 10 megabytes 的檔案。

註記: 避免未來需要 resize 容器大小, 確保總大小大於加密大小,以便檔案系統內部需要管理的後設資料還有空間。如果您使用 LUKS 模式,他的標頭資料需要大約 1 至 2 megabytes。

接著建立裝置節點 /dev/loop0, 這樣我們就可以掛載使用我的們容器:

# losetup /dev/loop0 /bigsecret
註記: 如果出現 /dev/loop0: No such file or directory 這樣的錯誤訊息,您應該先載入 modprobe loop 內核模組。最近(Kernel 3.2)loop 裝置是照需求所建立的。使用 # losetup -f 請求新的 loop 裝置。

現在開始與 #分割區 的操作方式相同,除了因為裝置已經隨機化所比不需要再次進行安全覆寫。

提示: 使用 dm-crypt 的容器可以非常的靈活。看看 Tomb 的功能與文件。它提供了 dm-crypt 指令搞的包裝,可以快速且靈活的使用。

手動掛載與卸載

卸載容器:

# umount /mnt/secret
# cryptsetup close secret
# losetup -d /dev/loop0

再次掛載容器:

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