有(許多)其他替代方法來加密磁盤,我只呈現我所知道和使用的方法。請記住,安全只是系統還未經過實際考驗而已。入侵者可以輕易通過鍵盤事件記錄密碼。此外,當已經加載了分區,其數據是可以自由訪問的,并不會阻止入侵者去訪問它。
### Linux
這部分我們使用可用于 2.6 內核的 Linux dm-crypt (device-mapper)。在這個實例中,讓我們加密?`/dev/sdc1`?分區,它可為任何其他分區、磁盤、USB或者用?`losetup`?創建的基于文件的分區。對于基于文件的分區,我們使用?`/dev/loop0`。看?[鏡像文件分區](http://cb.vu/unixtoolbox_zh_CN.xhtml#losetup)。Device mapper 利用標簽來標識一個分區。我們使用?`sdc1`?作為此標簽,但可以為任何字符串。
### dm-crypt with LUKS
LUKS 和 dm-crypt 是較好的加密技術,并且可為同一個分區設置多個口令,更改密碼也很方便。可簡單輸入?`# cryptsetup --help`?來測試 LUKS 是否可用。如果沒有顯示任何關于 LUKS 的信息,可看下面[Without LUKS](http://cb.vu/unixtoolbox_zh_CN.xhtml#woluks)?的介紹。第一步如果需要的話創建一個分區:`fdisk /dev/sdc`。
#### 創建加密分區
#?dd?if=/dev/urandom?of=/dev/sdc1??????????#?可選
#?cryptsetup?-y?luksFormat?/dev/sdc1???????#?這破壞了在?sdc1?上的數據
#?cryptsetup?luksOpen?/dev/sdc1?sdc1
#?mkfs.ext3?/dev/mapper/sdc1???????????????#?創建?ext3?文件系統
#?mount?-t?ext3?/dev/mapper/sdc1?/mnt
#?umount?/mnt
#?cryptsetup?luksClose?sdc1????????????????#?Detach?已加密的分區
#### Attach
#?cryptsetup?luksOpen?/dev/sdc1?sdc1
#?mount?-t?ext3?/dev/mapper/sdc1?/mnt
#### Detach
#?umount?/mnt
#?cryptsetup?luksClose?sdc1
### dm-crypt without LUKS
#?cryptsetup?-y?create?sdc1?/dev/sdc1??????#?或任何其他分區像?/dev/loop0
#?dmsetup?ls???????????????????????????????#?檢查一下,將顯示:sdc1?(254,?0)
#?mkfs.ext3?/dev/mapper/sdc1???????????????#?只有第一次要這么做!
#?mount?-t?ext3?/dev/mapper/sdc1?/mnt
#?umount?/mnt/
#?cryptsetup?remove?sdc1???????????????????#?Detach?已加密的分區
這樣做等同于(非 mkfs 部分) re-attach 分區。如果密碼不正確,mount 命令將會失敗。對于這個例子,只要簡單的移除 sdc1 (`cryptsetup remove sdc1`)并重建即可。
### FreeBSD
兩個流行的 FreeBSD 磁盤加密模塊為?`gbde`?和?`geli`。我現在使用?`geli`?原因是它夠快并且它使用加解密硬件加速設備。詳情可看?[FreeBSD 使用手冊 18.6](http://www.freebsd.org/handbook/disks-encrypting.html)。`geli`?模塊必須已編譯或加載進內核:
options?GEOM_ELI
device?crypto???????????????????????????????????????#?內核配置文件中加入這兩行
#?echo?'geom_eli_load="YES"'?>>?/boot/loader.conf???#?也可以在系統引導時加載或者做:kldload?geom_eli
### 使用密碼和密鑰
我為一個典型的磁盤加密使用這些設置,其使用了一個口令和一個加密主密鑰(master key)的密鑰。這意味著你需要密碼和生產的密鑰?`/root/ad1.key`?來 attach 分區。主密鑰存儲在這個加密分區中并且不可見。看下面為 USB 或 映像文件的加密設置。
#### 創建加密分區
#?dd?if=/dev/random?of=/root/ad1.key?bs=64?count=1??#?加密主密鑰的密鑰
#?geli?init?-s?4096?-K?/root/ad1.key?/dev/ad1???????#?對于磁盤也可用?-s?8192
#?geli?attach?-k?/root/ad1.key?/dev/ad1?????????????#?將?/dev/ad1?與所生成的密鑰?/root/ad1.key?關聯
#?dd?if=/dev/random?of=/dev/ad1.eli?bs=1m???????????#?可選,需要很長時間
#?newfs?/dev/ad1.eli????????????????????????????????#?創建文件系統#?mount?/dev/ad1.eli?/mnt
#### Attach
#?geli?attach?-k?/root/ad1.key?/dev/ad1
#?fsck?-ny?-t?ffs?/dev/ad1.eli??????????????????????#?檢查文件系統#?mount?/dev/ad1.eli?/mnt
#### Detach
Detach 步驟會在關機時自動完成。
#?umount?/mnt
#?geli?detach?/dev/ad1.eli
#### /etc/fstab
加密分區在 /etc/fstab 中配置成自動加載。系統啟動時會詢問加密分區的密碼。對于本例下列設置是必須的:
#?grep?geli?/etc/rc.conf
geli_devices="ad1"
geli_ad1_flags="-k?/root/ad1.key"
#?grep?geli?/etc/fstab
/dev/ad1.eli?????????/home/private??????????????ufs?????????????rw??????0???????0
### 僅用密碼
加密一個 USB stick 或者映像文件使用密碼而不是密鑰來得更方便。這種情況下,沒有必要隨身攜帶額外的密鑰文件。所做步驟同上面非常相似,只是不需要密鑰文件。讓我們來加密一個 1 GB 的映像文件`/cryptedfile`。
#?dd?if=/dev/zero?of=/cryptedfile?bs=1M?count=1000??#?1?GB?文件
#?mdconfig?-at?vnode?-f?/cryptedfile
#?geli?init?/dev/md0????????????????????????????????#?僅用密碼加密
#?geli?attach?/dev/md0
#?newfs?-U?-m?0?/dev/md0.eli
#?mount?/dev/md0.eli?/mnt
#?umount?/dev/md0.eli
#?geli?detach?md0.eli
現在可以把這個映像文件加載成僅需密碼的文件系統。
#?mdconfig?-at?vnode?-f?/cryptedfile
#?geli?attach?/dev/md0
#?mount?/dev/md0.eli?/mnt