企業(yè)安全分享:Linux文件系統(tǒng)安全攻略
Linux支持的文件系統(tǒng)種類繁多,他們?yōu)橛脩舻臄?shù)據(jù)存儲和管理提供了良好的操作和使用界面。在文件系統(tǒng)中,存在著文件/目錄訪問權(quán)限管理和控制、加密文件系統(tǒng)等的安全機制和問題需要考慮,本文將詳細(xì)介紹保證Linux文件系統(tǒng)安全的技術(shù)和方法。
Linux中的文件系統(tǒng)類型
隨著Linux的不斷發(fā)展,其所能支持的文件格式系統(tǒng)也在迅速擴充。特別是Linux2.6內(nèi)核正式推出后,出現(xiàn)了大量新的文件系統(tǒng),其中包括日志文件系統(tǒng)Ext4、Ext3、ReiserFS、XFS、JFS和其他文件系統(tǒng)。Linux系統(tǒng)核心可以支持十多種文件系統(tǒng)類型:JFS、ReiserFS、Ext、Ext2、Ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
文件系統(tǒng)安全性對比
從自動修復(fù)損壞的文件系統(tǒng)來看,ext2、ext3都能自動修復(fù)損壞的文件系統(tǒng),也都是在開機時進行。ext2和ext3文件系統(tǒng)在默認(rèn)的情況下是“每間隔21次掛載文件系統(tǒng)或每180天,就要自動檢測一次。通過實踐來看ext2和ext3在自動檢測上是存在風(fēng)險,有時文件系統(tǒng)開機后就進入單用戶模式,并且把整個系統(tǒng)“扔”進lost+found目錄,如果要恢復(fù)系統(tǒng),就得用fsck來進行修復(fù);當(dāng)然fsck也同樣存在風(fēng)險;所以對ext2和ext3文件系統(tǒng)的使用,對新手來說的確需要心里準(zhǔn)備;畢竟修復(fù)已經(jīng)損壞的ext2和ext3文件系統(tǒng)是有困難的;另外ext2和ext3文件系統(tǒng)對于意外關(guān)機和斷電,也可能導(dǎo)致文件系統(tǒng)損壞,所以我們在使用過程中,必須是合法關(guān)機;比如執(zhí)行poweroff指令來關(guān)掉機器。
從文件系統(tǒng)的反刪除來看,ext2支持反刪除,對于一般使用者來說應(yīng)該是安全的,但對于保密單位來說可能意味著不安全。從反刪除角度來說明文件系統(tǒng)的安全性,也是有兩方面。如果用戶的工作是從事比較機密的,用ext3比較好,因為ext3一旦刪除文件,是不可恢復(fù)的,因為反刪除能恢復(fù)相應(yīng)的絕秘資料的泄秘,所以ext3可能更適合從事機密工作的用戶。
新型的Ext4文件系統(tǒng)
Ext4是Linux內(nèi)核版本2.6.28的重要部分。它是Linux文件系統(tǒng)的一次革命。在很多方面,Ext4相對于Ext3的進步要遠(yuǎn)超過Ext3相對于Ext2的進步。Ext3相對于Ext2的改進主要在于日志方面,但是Ext4相對于Ext3的的改進是更深層次的,是文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)方面的優(yōu)化。一個高效的、優(yōu)秀的、可靠的和極具特點的文件系統(tǒng)就此誕生。目前,該文件系統(tǒng)并未在所有的Linux發(fā)行套件中完全普及使用,還處于初期的測試階段。
安全設(shè)定文件/目錄訪問權(quán)限
Linux系統(tǒng)中的每個文件和目錄都有訪問許可權(quán)限,通過其確定誰可以通過何種方式對文件和目錄進行訪問和操作。下面將對文件/目錄訪問的方法和命令進行介紹。
文件或目錄的訪問權(quán)限分為只讀,只寫和可執(zhí)行三種。以文件為例,只讀權(quán)限表示只允許讀其內(nèi)容,而禁止對其做任何的更改操作;只寫權(quán)限允許對文件進行任何的修改操作;可執(zhí)行權(quán)限表示允許將該文件作為一個程序執(zhí)行。文件被創(chuàng)建時,文件所有者自動擁有對該文件的讀、寫和可執(zhí)行權(quán)限,以便于對文件的閱讀和修改。用戶也可根據(jù)需要把訪問權(quán)限設(shè)置為需要的任何組合。
有三種不同類型的用戶可對文件或目錄進行訪問:文件所有者,同組用戶、其他用戶。所有者一般是文件的創(chuàng)建者。它可以允許同組用戶有權(quán)訪問文件,還可以將文件的訪問權(quán)限賦予系統(tǒng)中的其他用戶。在這種情況下,系統(tǒng)中的每一位用戶都能訪問該用戶擁有的文件或目錄。
每一個文件或目錄的訪問權(quán)限都有三組,每組用三位表示,分別為文件屬主的讀、寫和執(zhí)行權(quán)限;與屬主同組的用戶的讀、寫和執(zhí)行權(quán)限;系統(tǒng)中其他用戶的讀、寫和執(zhí)行權(quán)限(如圖1所示)。當(dāng)用ls-l命令顯示文件或目錄的詳細(xì)信息時,最左邊的一列為文件的訪問權(quán)限。例如:
橫線代表空許可(即表示不具有該權(quán)限)。r代表只讀,w代表寫,x代表可執(zhí)行。注意:這里共有10個位置。第1個字符指定了文件類型。在通常意義上,一個目錄也是一個文件。如果第1個字符是橫線,表示是一個非目錄的文件。如果是d,表示是一個目錄。后面的9個字符每三個構(gòu)成一組,依次表示文件主、組用戶、其他用戶對該文件的訪問權(quán)限。
例如:
表示文件sobsrc.tgz的訪問權(quán)限,說明sobsrc.tgz是一個普通文件;sobsrc.tgz的屬主有讀寫權(quán)限;與sobsrc.tgz屬主同組的用戶只有讀權(quán)限;其他用戶也只有讀權(quán)限。
確定了一個文件的訪問權(quán)限后,用戶可以利用Linux系統(tǒng)提供的chmod命令來重新設(shè)定不同的訪問權(quán)限。也可以利用chown命令來更改某個文件或目錄的所有者。
▲圖1.文件/目錄訪問權(quán)限示意圖
1、改變文件/目錄的訪問權(quán)限
chmod命令用于改變文件或目錄的訪問權(quán)限,它是一條非常重要的系統(tǒng)命令。用戶可用其控制文件或目錄的訪問權(quán)限。
該命令有兩種用法。一種是包含字母和操作符表達式的文字設(shè)定法;另一種是包含數(shù)字的數(shù)字設(shè)定法。
文字設(shè)定法
文字設(shè)定法的一般使用形式為:chmod[who][+|-|=][mode]文件名。其中,操作對像who可以是下述字母中的任一個或者為各字母的組合:
表示“用戶(user)”,即文件或目錄的所有者。
表示“同組(group)用戶”,即與文件屬主有相同組ID的所有用戶。
表示“其他(others)用戶”。
表示“所有(all)用戶”。其為系統(tǒng)默認(rèn)值。
操作符號可以是:
添加某個權(quán)限。
取消某個權(quán)限。
賦予給定權(quán)限并取消其他所有權(quán)限(如果有的話)。
設(shè)置mode所表示的權(quán)限可用下述字母的任意組合:
可讀。
可寫。
可執(zhí)行。只有目標(biāo)文件對某些用戶是可執(zhí)行的或該目標(biāo)文件是目錄時才追加x屬性。
在文件執(zhí)行時把進程的屬主或組ID置為該文件的文件屬主。方式“u+s”設(shè)置文件的用戶ID位,“g+s”設(shè)置組ID位。
將程序的文本保存到交換設(shè)備上。
與文件屬主擁有一樣的權(quán)限。
與和文件屬主同組的用戶擁有一樣的權(quán)限。
與其他用戶擁有一樣的權(quán)限。
如果在一個命令行中可給出多個權(quán)限方式,其間用逗號隔開。圖2給出了使用該設(shè)定法的例子:
▲圖2.chmod命令文字設(shè)定法使用示例
首先,設(shè)定文件test1的屬性為:文件屬主(u)增加執(zhí)行權(quán)限;與文件屬主同組用戶(g)增加執(zhí)行權(quán)限;其他用戶(o)增加執(zhí)行權(quán)限,其命令為:
接著,設(shè)定文件test2的屬性為:文件屬主(u)增加寫權(quán)限;與文件屬主同組用戶(g)增加寫權(quán)限;其他用戶(o)刪除執(zhí)行權(quán)限,其命令為:
最后,對可執(zhí)行文件test3添加s權(quán)限,使得執(zhí)行該文件的用戶暫時具有該文件擁有者的權(quán)限:
在上述例子中,當(dāng)其他用戶執(zhí)行test3這個程序時,他的身份將由于這個程序而暫時變成該test3程序的擁有者(由于chmod命令中使用了s選項),所以他就能夠讀取test3.c文件(雖然這個文件被設(shè)定為其他人不具備任何權(quán)限),這就是s的功能。在整個系統(tǒng)中特別是root本身,最好不要過多地設(shè)置這種類型的文件(除非必要),這樣可以保障系統(tǒng)的安全,避免因為某些程序的bug而使系統(tǒng)遭到入侵。
數(shù)字設(shè)定法
數(shù)字設(shè)定法是與文字設(shè)定法功能等價的設(shè)定方法,只不過比文字設(shè)定法更加簡便。數(shù)字表示的屬性的含義為:0表示沒有權(quán)限,1表示可執(zhí)行權(quán)限,2表示可寫權(quán)限,4表示可讀權(quán)限,然后將其相加。所以數(shù)字屬性的格式應(yīng)為3個從0到7的八進制數(shù),其順序是(u)、(g)、(o)。其他的與文字設(shè)定法基本一致。
如果想讓某個文件的屬主有“讀/寫”二種權(quán)限,須要把4(可讀)+2(可寫)=6(讀/寫)。
數(shù)字設(shè)定法的一般形式為:chmod[mode]文件名。圖3給出使用該數(shù)字設(shè)定法的例子:
▲圖3.chmod命令數(shù)字設(shè)定法示意
可以看到,圖3中設(shè)定文件test1的屬性為:文件屬主(u)擁有讀、寫權(quán)限;與文件屬主同組人用戶(g)擁有讀權(quán)限;其他人(o)擁有讀權(quán)限,而設(shè)定test2這個文件的屬性為:文件主本人(u)具有可讀/可寫/可執(zhí)行權(quán)限;與文件主同組人(g)可讀/可執(zhí)行權(quán);其他人(o)沒有任何權(quán)限。
2、更改文件/目錄的所有權(quán)
該命令用來更改某個文件或目錄的屬主和屬組。舉個例子,root用戶把自己的一個文件拷貝給用戶xu,為了讓用戶xu能夠存取這個文件,root用戶應(yīng)該把這個文件的屬主設(shè)為xu,否則,用戶xu無法存取這個文件。
該命令的使用形式為:chown[選項]用戶或組文件
Chown的功能是將指定文件的擁有者改為指定的用戶或組。用戶可以是用戶名或用戶ID。組可以是組名或組ID。文件是以空格分開的要改變權(quán)限的文件列表,支持通配符。該命令的選項為:
R:遞歸地改變指定目錄及其下面的所有子目錄和文件的擁有者。
v:顯示chown命令所做的工作。
圖4給出了使用該命令的例子,筆者把文件test1的所有者改為super,把目錄./test_dir及其下面的所有文件和子目錄的屬主改成super,屬組改成super。
▲圖4.chown命令使用示意
3、改變文件的執(zhí)行權(quán)限
通過前面的介紹我們知道,Linux系統(tǒng)中的每一個文件都有一個所有者,表示該文件是誰創(chuàng)建的。同時,該文件還有一個組編號,表示該文件所屬的組,一般為文件所有者所屬的組。并且,在一般情況下,我們也可以通過設(shè)定對文件的權(quán)限來控制對其的相關(guān)操作。
在此情況中,如果是一個可執(zhí)行文件,那么在執(zhí)行時,一般該文件只擁有調(diào)用該文件的用戶具有的權(quán)限。而setuid/setgid則可以來改變這種設(shè)置:
setuid:設(shè)置使文件在執(zhí)行階段具有文件所有者的權(quán)限。典型的文件是/usr/bin/passwd。如果一般用戶執(zhí)行該文件,則在執(zhí)行過程中,該文件可以獲得root權(quán)限,從而可以更改用戶的密碼
setgid:該權(quán)限只對目錄有效。目錄被設(shè)置該位后,任何用戶在此目錄下創(chuàng)建的文件都具有和該目錄所屬的組相同的組。
stickybit:該位可以理解為防刪除位。一個文件是否可以被某用戶刪除,主要取決于該文件所屬的組是否對該用戶具有寫權(quán)限。如果沒有寫權(quán)限,則這個目錄下的所有文件都不能被刪除,同時也不能添加新的文件。如果希望用戶能夠添加文件但同時不能刪除文件。則可以對文件使用stickybit位。設(shè)置該位后,j即便用戶對目錄具有寫權(quán)限,也不能刪除該文件。
在前面我們討論了通過文字設(shè)定和數(shù)字設(shè)定的方法來設(shè)定文件/目錄的訪問權(quán)限問題,同樣的道理,下面我們通過這兩種方法來介紹如何操作這些標(biāo)志。操作這些標(biāo)志與操作文件權(quán)限的命令是一樣的,都是使用chmod命令來進行:
文字設(shè)定法
chmodu+sfilename:為文件filename加上setuid標(biāo)志。
chmodg+sdirname:為目錄dirname目錄加上setgid標(biāo)志。
chmodo+tfilename:為文件filename加上sticky標(biāo)志。
數(shù)字設(shè)定法
對一般文件通過三組八進制數(shù)字來置標(biāo)志,如444、777、644等。如果設(shè)置這些特殊標(biāo)志,則在這組數(shù)字之前外加一組八進制數(shù)字。如4666、4777等。這一組八進制數(shù)字三位的意義如下:
setuid位:如果該位為1,顯示為“S”,則表示設(shè)置setuid,其顯示在原來的x標(biāo)志位上;
setgid位:如果該位為1,顯示為“S”,則表示設(shè)置setgid,其顯示在原來的x標(biāo)志位上;
sticky位:如果該位為1,顯示為“T”,則表示設(shè)置sticky,其顯示在原來的x標(biāo)志位上。
設(shè)置完這些標(biāo)志后,可以用ls–l命令來查看。如果有這些標(biāo)志,則會在原來的執(zhí)行標(biāo)志位置上顯示。如下所示:
r-srw-r--:表示有setuid標(biāo)志;
rwxrwsrw-:表示有setgid標(biāo)志;
rwxrw-rwt:表示有sticky標(biāo)志。
如果本來在該位上有x,則這些特殊標(biāo)志顯示為小寫字母(s,s,t)。否則,顯示為大寫字母(S,S,T)。
另外非常值得讀者注意的是,雖然setuid/setgid機制非常方便實用,但是由于提升了執(zhí)行者的權(quán)限,因而不可避免地存在許多安全隱患和風(fēng)險,所以作者并不太贊成廣大讀者廣泛使用,并且,在實際的系統(tǒng)管理過程中,我們還經(jīng)常需要找出設(shè)置有這些標(biāo)志的文件,并對他們進行檢查和清理,那么,一般我們可以使用如下命令來對系統(tǒng)中的具有特殊標(biāo)志的文件進行尋找:
使用額外屬性保護ext3文件系統(tǒng)安全
1、ext3中的額外屬性
從Linux的1.1系列內(nèi)核開始,ext2文件系統(tǒng)就開始支持一些針對文件和目錄的額外標(biāo)記或者叫作屬性(attribute)。在2.2和2.4系列及其高版本的內(nèi)核中,ext3文件系統(tǒng)支持以下屬性的設(shè)置和查詢(如表1所示):
▲表1.ext3文件系統(tǒng)支持的屬性含義
雖然文件系統(tǒng)能夠接受并保留指示每個屬性的標(biāo)志,但是這些屬性不一定有效,這依賴于內(nèi)核和各種應(yīng)用程序的版本。表2顯示了Linux每個版本內(nèi)核支持的屬性標(biāo)志的具體情況,其中:
OK:表示允許設(shè)置這個標(biāo)志并使設(shè)置生效;
POK:允許設(shè)置這個標(biāo)志但忽略其值;
——:表示完全忽略這個標(biāo)志。
▲表2.Linux各內(nèi)核版本對屬性的支持情況
從上述表格可以看出:雖然早期的內(nèi)核版本支持安全刪除特征,但是從1.3系列的內(nèi)核開始,開發(fā)者拋棄的對這個特征的實現(xiàn),因為它似乎只能夠提高一點點的安全性,而糟糕的是它會給不熟悉安全刪除繼承問題的用戶造成安全的假象。在對具有A屬性的文件進行操作時,A屬性可以提高一定的性能。而S屬性能夠最大限度的保障文件的完整性。
因此,我們將主要討論a屬性和i屬性,因為這兩個屬性對于提高文件系統(tǒng)的安全性和保障文件系統(tǒng)的完整性有很大的好處。同樣,一些開放源碼的BSD系統(tǒng)(比如FreeBSD和OpenBSD),在其UFS或者FFS實現(xiàn)中也支持類似的特征。
2、使用ext3文件系統(tǒng)的屬性
在任何情況下,標(biāo)準(zhǔn)的ls命令都不會一個文件或者目錄的擴展屬性。ext3文件系統(tǒng)工具包中有兩個工具:chattr和lsattr。它們被專門用來設(shè)置和查詢文件屬性。因為ext3是標(biāo)準(zhǔn)的Linux文件系統(tǒng),因此幾乎所有的發(fā)布都有e2fsprogs工具包。如果由于某些原因,系統(tǒng)中沒有這個工具,用戶可以從以下地址下載這個工具包的源代碼編譯并安裝:http://sourceforge.net/projects/e2fsprogs。
Lsattr命令
lsattr命令只支持很少的選項,其選項如下:
a:列出目錄中的所有文件,包括以.開頭的文件。
d:以和文件相同的方式列出目錄,并顯示其包含的內(nèi)容。
R:以遞歸的方式列出目錄的屬性及其內(nèi)容。
v:列出文件版本(用于網(wǎng)絡(luò)文件系統(tǒng)NFS)。
Chattr命令
chattr命令可以通過以下三種方式執(zhí)行:
chattr+Sifilename:給文件添加同步和不可變屬性。
chattr-aifilename:把文件的只擴展(append-only)屬性和不可變屬性去掉。
chattr=aiAfilenamet:使文件只有a、i和A屬性。
最后,每個命令都支持-R選項,用于遞歸地對目錄和其子目錄進行操作。
3、ext3屬性和文件權(quán)限的區(qū)別
幾乎所有的系統(tǒng)管理員都理解Linux風(fēng)格文件系統(tǒng)的權(quán)限和所有者以及l(fā)s命令的顯示,如圖5所示:
▲圖5.ls顯示結(jié)果
從ls的輸出結(jié)果看,這些文件屬于用戶super,而super所在的用戶組是super。用戶super本人和super用戶組的成員對test2和test3具有對文件的修改權(quán)限,而其他的用戶對test1、test2、test3均只有讀取文件的權(quán)限。圖6給出了與圖5對比的lsattr命令的輸出:
▲圖6.lsattr顯示結(jié)果
輸出結(jié)果顯示,test2只能被添加,而test1文件不準(zhǔn)修改。在Linux系統(tǒng)中,如果一個用戶以root的權(quán)限登錄,文件系統(tǒng)的權(quán)限控制將無法對root用戶和以root權(quán)限運行的進程進行任何的限制。這樣對于Linux類的操作系統(tǒng),如果攻擊者通過遠(yuǎn)程或者本地攻擊獲得root權(quán)限將可能對系統(tǒng)造成嚴(yán)重的破壞。而ext3文件系統(tǒng)可以作為最后一道防線,最大限度地減小系統(tǒng)被破壞的程度,并保存攻擊者的行蹤。ext3屬性是由sys_open()和sys_truncate()等系統(tǒng)調(diào)用檢查和賦予的,不受用戶識別號和其他因素的影響,在任何情況下,對具有不可修改(immutable)屬性的文件的進行任何修改都會失敗,不管是否是root用戶進行的修改。
但是,還有一個問題是root權(quán)限的用戶可以通過刪除i屬性實現(xiàn)對文件的修改。這種防護只不過給獲得root權(quán)限的攻擊者加了一點小麻煩罷了,系統(tǒng)的安全性并沒有根本性的提高。
在2.1之前的內(nèi)核版本中,存在一個安全層(securelevel)的特征。使用安全層可以解決上述問題,因為如果系統(tǒng)的安全層大于0,內(nèi)核將不允許對任何文件的i屬性進行修改。這些版本的內(nèi)核由sysctl命令的"kernel.securelevel"變量進行控制。如果在啟動時,這個變量的值被設(shè)置為1或者更大的值,內(nèi)核將不允許對具有i屬性和a屬性文件進行修改,除非國旗動到單用戶狀態(tài)。但是,由于引入了更為靈活的內(nèi)核能力特征(kernelcapabilities),以后的內(nèi)核不再支持安全層。使用內(nèi)核能力,也可以實現(xiàn)類似的限制。工具lcap用來查詢和調(diào)整內(nèi)核能力約束集(kernelcapabilitiesboundingset)。在啟動腳本中加入以下命令,就可以實現(xiàn)對具有i屬性和a屬性文件的保護:
第一個命令刪除任何用戶(包括超級用戶)對i標(biāo)志的修改能力。第二個命令刪除任何用戶(主要針對超級用戶)對塊設(shè)備的原始訪問(rawaccess)能力,防止一些技術(shù)高超的攻擊者直接修改文件系統(tǒng)索引節(jié)點的immutable域。BTW,在系統(tǒng)啟動時,CAP_SYS_RAWIO能力應(yīng)該直接刪除,這個能力是一個非常大的潛在威脅。高明的攻擊者獲得了超級用戶權(quán)限之后,通過/dev/kmem設(shè)備可以直接修改內(nèi)核內(nèi)存。通過這種方式,可以破壞系統(tǒng)的內(nèi)核能力約束集(kernelcapabilitiesbounding)。如果沒有任何參數(shù),會列出內(nèi)核支持的能力和目前生效的內(nèi)核能力。一旦一個內(nèi)核能力被刪除,就只有在系統(tǒng)重新啟動,進入到單用戶模式才能刪除能力限制。
使用chattr
Linux主機直接暴露在Internet或者位于其它危險的環(huán)境,有很多shell帳戶或者提供HTTP和FTP等網(wǎng)絡(luò)服務(wù),一般應(yīng)該在安裝配置完成后使用如下命令:
如果很少對帳戶進行添加、變更或者刪除,把/home本身設(shè)置為immutable屬性也不會造成什么問題。在很多情況下,整個/usr目錄樹也應(yīng)該具有不可改變屬性。實際上,除了對/usr目錄使用chattr-R+ii/usr/命令外,還可以在/etc/fstab文件中使用ro選項,使/usr目錄所在的分區(qū)以只讀的方式加載。另外,把系統(tǒng)日志文件設(shè)置為只能添加屬性(append-only),將使入侵者無法擦除自己的蹤跡。當(dāng)然,如果使用這種安全措施,需要系統(tǒng)管理員修改管理方式。
由于軟件管理程序需要加入和刪除某些文件和目錄,因此在進行軟件安裝和升級之前需要刪除某些目錄和文件的immutable和append-only屬性。對于Linux系統(tǒng),一般使用rpm管理軟件包,用戶可以使用以下命令查看要安裝或者升級的軟件包都有哪些文件:
然后去掉有關(guān)目錄和文件的immutable和append-only屬性。大多數(shù)軟件包需要rpm命令對以下目錄的一個或者多個進行寫操作
值得注意的是:如果用戶需要升級/usr/sbin/someprogram,應(yīng)該去掉someprogram文件以及目錄/usr/sbin的immutable屬性。#p#
使用加密文件系統(tǒng)(EFS)
下面將詳細(xì)介紹利用dm-crypt來創(chuàng)建加密文件系統(tǒng)的方法。與其它創(chuàng)建加密文件系統(tǒng)的方法相比,dm-crypt系統(tǒng)有著無可比擬的優(yōu)越性:它的速度更快,易用性更強。除此之外,它的適用面也很廣,能夠運行在各種塊設(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)。
1、內(nèi)核準(zhǔn)備
dm-crypt利用內(nèi)核的密碼應(yīng)用編程接口來完成密碼操作。一般說來,內(nèi)核通常將各種加密程序以模塊的形式加載。對于AES來說,其安全強度已經(jīng)非常之高,即便用來保護絕密級的數(shù)據(jù)也足夠了。為了保證用戶的內(nèi)核已經(jīng)加載AES密碼模塊,請根據(jù)圖7所示命令進行檢查:
▲圖7.檢查AES模塊是否成功加載
否則,可以使用modprobe來手工加載AES模塊,命令如下所示:
接下來,用戶安裝dmsetup軟件包,該軟件包含有配置device-mapper所需的工具,如下命令所示:
為檢查dmsetup軟件包是否已經(jīng)建立了設(shè)備映象程序,鍵入下列命令進行:
然后,需要使用如下命令加載dm-crypt內(nèi)核模塊:
dm-crypt加載后,它會用evice-mapper自動注冊。如果再次檢驗的話,device-mapper已能識別dm-crypt,并且把crypt添加為可用的對象。執(zhí)行完上述步驟后,用戶應(yīng)該可以根據(jù)如下命令看到crypt的下列輸出,如圖8所示:
▲圖8.成功做好裝載加密設(shè)備的顯示
這說明系統(tǒng)已經(jīng)為裝載加密設(shè)備做好了準(zhǔn)備。下面,我們先來建立一個加密設(shè)備。
2、創(chuàng)建加密設(shè)備
要創(chuàng)建作為加密設(shè)備裝載的文件系統(tǒng),有兩種選擇:一是建立一個磁盤映像,然后作為回送設(shè)備加載;二是使用物理設(shè)備。無論那種情況,除了在建立和捆綁回送設(shè)備外,其它操作過程都是相似的。
3、建立回送磁盤映象
如果用戶沒有用來加密的物理設(shè)備(比如存儲棒或另外的磁盤分區(qū)),作為替換,你可以利用命令dd來建立一個空磁盤映象,然后將該映象作為回送設(shè)備來裝載,照樣能用。下面我們以實例來加以介紹:
這里我們新建了一個大小為100MB的磁盤映象,該映象名字為virtual.img。要想改變其大小,可以改變count的值。
接下來,我們利用losetup命令將該映象和一個回送設(shè)備聯(lián)系起來:
現(xiàn)在,我們已經(jīng)得到了一個虛擬的塊設(shè)備,其位于/dev/loop0,并且我們能夠如同使用其它設(shè)備那樣來使用它。
4、設(shè)置塊設(shè)備
準(zhǔn)備好了物理塊設(shè)備(例如/dev/hda1),或者是虛擬塊設(shè)備(像前面那樣建立了回送映象,并利用device-mapper將其作為加密的邏輯卷加載),我們就可以進行塊設(shè)備配置了。
下面我們使用cryptsetup來建立邏輯卷,并將其與塊設(shè)備捆綁:
其中,ly_EFS是新建的邏輯卷的名稱。并且最后一個參數(shù)device_name必須是將用作加密卷的塊設(shè)備。所以,如果要使用前面建立的回送映象作為虛擬塊設(shè)備的話,應(yīng)當(dāng)運行以下命令:
無論是使用物理塊設(shè)備還是虛擬塊設(shè)備,程序都會要求輸入邏輯卷的口令,-y的作用在于要你輸入兩次口令以確保無誤。這一點很重要,因為一旦口令弄錯,就會把自己的數(shù)據(jù)鎖住,如圖9所示:
▲圖9.為EFS輸入密碼#p#
為了確認(rèn)邏輯卷是否已經(jīng)建立,可以使用下列命令進行檢查一下:
只要該命令列出了邏輯卷,就說明已經(jīng)成功建立了邏輯卷。不過根據(jù)機器的不同,設(shè)備號可能有所不同,如圖10所示:
▲圖10.顯示成功建立的邏輯卷
device-mapper會把它的虛擬設(shè)備裝載到/dev/mapper下面,所以,你的虛擬塊設(shè)備應(yīng)該是/dev/mapper/ly_EFS,盡管用起來它和其它塊設(shè)備沒什么不同,實際上它卻是經(jīng)過透明加密的。
如同物理設(shè)備一樣,用戶也可以在虛擬設(shè)備上創(chuàng)建文件系統(tǒng):
現(xiàn)在為新的虛擬塊設(shè)備建立一個裝載點,然后將其裝載。命令如下所示:
用戶能夠利用下面的命令查看其裝載后的情況,如圖11所示:
▲圖11.EFS成功裝載后的顯示
通過上述的步驟后,用戶看到裝載的文件系統(tǒng),盡管看起來與其它文件系統(tǒng)無異,但實際上寫到/mnt/ly_EFS/下的所有數(shù)據(jù),在數(shù)據(jù)寫入之前都是經(jīng)過透明的加密處理后才寫入磁盤的,因此,從該處讀取的數(shù)據(jù)都是些密文。
5、卸載加密設(shè)備
要卸載加密文件系統(tǒng),和平常的方法沒什么兩樣:
即便已經(jīng)卸載了塊設(shè)備,在dm-crypt中仍然視為一個虛擬設(shè)備。如若不信,用戶可以再次運行如圖10所示的命令dmsetupls來驗證一下,將會看到該設(shè)備依然會被列出。因為dm-crypt緩存了口令,所以機器上的其它用戶不需要知道口令就能重新裝載該設(shè)備。為了避免這種情況發(fā)生,用戶必須在卸載設(shè)備后從dm-crypt中顯式的刪除該設(shè)備。命令具體如下所示:
此后,它將徹底清除,要想再次裝載的話,用戶必須再次輸入口令。
6、重新裝載加密設(shè)備
在卸載加密設(shè)備后,用戶很可能還需作為普通用戶來裝載它們。為了簡化該工作,需要在/etc/fstab文件中添加下列內(nèi)容:
此外,用戶也可以通過建立腳本來替我們完成dm-crypt設(shè)備的創(chuàng)建和卷的裝載工作,方法是用實際設(shè)備的名稱或文件路徑來替換/dev/DEVICENAME:
如果用戶使用的是回送設(shè)備的話,用戶還可以利用腳本來捆綁設(shè)備,腳本如下所示:
7、在Linux系統(tǒng)安裝時使用EFS
上面介紹了使用dm-crypt來創(chuàng)建加密文件系統(tǒng)的方法,對于初級用戶來說,可能這個過程有些繁雜和不好理解。那么,本節(jié)將介紹一個非常簡單的方法來使用EFS文件系統(tǒng)。以Fedora10的安裝步驟為例子,選擇相關(guān)選項進行安裝就可以方便地進行使用了。
用戶可以在空閑空間新建分區(qū),也可以選擇某個分區(qū)進行編輯,還可以刪除某些分區(qū)。在圖12中,需要選中[加密文件系統(tǒng)]選項,并且,根據(jù)系統(tǒng)要求,輸入訪問EFS所需要的密碼,如圖13所示。然后,根據(jù)第3章的介紹接下來一步一步按照系統(tǒng)的提示進行系統(tǒng)安裝即可。那么,在成功安裝系統(tǒng)后,用戶就擁有了一個安全的加密文件系統(tǒng),并且,在每次登錄系統(tǒng)的時候,系統(tǒng)都會要求用戶輸入在圖13所示步驟中設(shè)定的密碼來進行安全訪問。
▲圖12.安裝時選中[加密系統(tǒng)(E)]選項
▲圖13.輸入EFS所需的密碼
【編輯推薦】