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