與其它創建加密文件系統的方法相比,dm-crypt系統有著無可比擬的優越性:它的速度更快,易用性更強。除此之外,它的適用面也很廣,能夠運行在各種塊設備上,即使這些設備使用了RAID和 LVM也毫無障礙。dm-crypt系統之所以具有這些優點,主要得益于該技術是建立在2.6版本內核的device-mapper特性之上的。 device-mapper是設計用來為在實際的塊設備之上添加虛擬層提供一種通用靈活的方法,以方便開發人員實現鏡像、快照、級聯和加密等處理。此外,dm-crypt使用了內核密碼應用編程接口實現了透明的加密,并且兼容cryptloop系統。
第一步:內核準備
dm -crypt利用內核的密碼應用編程接口來完成密碼操作。一般說來,內核通常將各種加密程序以模塊的形式加載。對于AES來說,其安全強度已經非常之高,即便用來保護絕密級的數據也足夠了。為了保證用戶的內核已經加載AES密碼模塊,請根據如下命令進行檢查:
#cat /proc/crypto
否則,可以使用modprobe來手工加載AES模塊,命令如下所示:
#modprobe aes
接下來,用戶安裝dmsetup軟件包,該軟件包含有配置device-mapper所需的工具,如下命令所示:
#yum install dmsetup cryptsetup
為檢查dmsetup軟件包是否已經建立了設備映象程序,鍵入下列命令進行:
#ls -l /dev/mapper/control
然后,需要使用如下命令加載dm-crypt內核模塊:
#modprobe dm-crypt
dm-crypt加載后,它會用evice-mapper自動注冊。如果再次檢驗的話,device-mapper已能識別dm-crypt,并且把crypt 添加為可用的對象。執行完上述步驟后,用戶應該可以根據如下命令看到crypt的下列輸出:
#dmsetup targets
這說明系統已經為裝載加密設備做好了準備。下面,我們先來建立一個加密設備。
第二步:創建加密設備
要創建作為加密設備裝載的文件系統,有兩種選擇:一是建立一個磁盤映像,然后作為回送設備加載;二是使用物理設備。無論那種情況,除了在建立和捆綁回送設備外,其它操作過程都是相似的。
建立回送磁盤映象
如果用戶沒有用來加密的物理設備(比如存儲棒或另外的磁盤分區),作為替換,你可以利用命令dd來建立一個空磁盤映象,然后將該映象作為回送設備來裝載,照樣能用。下面我們以實例來加以介紹:
#dd if=/dev/zero of=/virtual.img bs=1M count=100
這里我們新建了一個大小為100 MB的磁盤映象,該映象名字為virtual.img。要想改變其大小,可以改變count的值。
接下來,我們利用losetup命令將該映象和一個回送設備聯系起來:
#losetup /dev/loop0 /virtual.img
現在,我們已經得到了一個虛擬的塊設備,其位于/dev/loop0,并且我們能夠如同使用其它設備那樣來使用它。
設置塊設備
準備好了物理塊設備(例如/dev/hda1),或者是虛擬塊設備(像前面那樣建立了回送映象,并利用device-mapper將其作為加密的邏輯卷加載),我們就可以進行塊設備配置了。
下面我們使用cryptsetup來建立邏輯卷,并將其與塊設備捆綁:
#cryptsetup -y create ly_EFS device_name
其中,ly_EFS是新建的邏輯卷的名稱。并且最后一個參數device_name必須是將用作加密卷的塊設備。所以,如果要使用前面建立的回送映象作為虛擬塊設備的話,應當運行以下命令:
#cryptsetup -y create ly_EFS /dev/loop0
無論是使用物理塊設備還是虛擬塊設備,程序都會要求輸入邏輯卷的口令,-y的作用在于要你輸入兩次口令以確保無誤。這一點很重要,因為一旦口令弄錯,就會把自己的數據鎖住, 為了確認邏輯卷是否已經建立,可以使用下列命令進行檢查一下:
#dmsetup ls
只要該命令列出了邏輯卷,就說明已經成功建立了邏輯卷。不過根據機器的不同,設備號可能有所不同。device-mapper會把它的虛擬設備裝載到 /dev/mapper下面,所以,你的虛擬塊設備應該是/dev/mapper/ly_EFS ,盡管用起來它和其它塊設備沒什么不同,實際上它卻是經過透明加密的。
如同物理設備一樣,用戶也可以在虛擬設備上創建文件系統:
#mkfs.ext3 /dev/mapper/ly_EFS
現在為新的虛擬塊設備建立一個裝載點,然后將其裝載。命令如下所示:
#mkdir /mnt/ly_EFS
#mount /dev/mapper/ly_EFS /mnt/ly_EFS
用戶能夠利用下面的命令查看其裝載后的情況:
#df -h /mnt/ly_EFS
通過上述的步驟后,用戶看到裝載的文件系統,盡管看起來與其它文件系統無異,但實際上寫到/mnt/ly_EFS/下的所有數據,在數據寫入之前都是經過透明的加密處理后才寫入磁盤的,因此,從該處讀取的數據都是些密文。
卸載加密設備
要卸載加密文件系統,和平常的方法沒什么兩樣:
#umount /mnt/ly_EFS
即便已經卸載了塊設備,在dm-crypt中仍然視為一個虛擬設備。如若不信,用戶可以再次運行命令dmsetup ls來驗證一下,將會看到該設備依然會被列出。因為dm-crypt緩存了口令,所以機器上的其它用戶不需要知道口令就能重新裝載該設備。為了避免這種情況發生,用戶必須在卸載設備后從dm-crypt中顯式的刪除該設備。命令具體如下所示:
#cryptsetup remove ly_EFS
此后,它將徹底清除,要想再次裝載的話,用戶必須再次輸入口令。
重新裝載加密設備
在卸載加密設備后,用戶很可能還需作為普通用戶來裝載它們。為了簡化該工作,需要在/etc/fstab文件中添加下列內容:
/dev/mapper/ly_EFS /mnt/ly_EFS ext3 noauto,noatime 0 0
此外,用戶也可以通過建立腳本來替我們完成dm-crypt設備的創建和卷的裝載工作,方法是用實際設備的名稱或文件路徑來替換/dev/DEVICENAME:
#!/bin/sh
cryptsetup create ly_EFS /dev/DEVICENAME
mount /dev/mapper/ly_EFS /mnt/ly_EFS
如果用戶使用的是回送設備的話,用戶還可以利用腳本來捆綁設備,腳本如下所示:
#!/bin/sh
losetup /dev/loop0 ~/virtual.img
cryptsetup create ly_EFS /dev/loop0
mount /dev/mapper/ly_EFS /mnt/ly_EFS