自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

企業(yè)安全分享:Linux文件系統(tǒng)安全攻略

安全 網(wǎng)站安全
Linux支持的文件系統(tǒng)種類(lèi)繁多,他們?yōu)橛脩?hù)的數(shù)據(jù)存儲(chǔ)和管理提供了良好的操作和使用界面。在文件系統(tǒng)中,存在著文件/目錄訪問(wèn)權(quán)限管理和控制、加密文件系統(tǒng)等的安全機(jī)制和問(wèn)題需要考慮。

Linux支持的文件系統(tǒng)種類(lèi)繁多,他們?yōu)橛脩?hù)的數(shù)據(jù)存儲(chǔ)和管理提供了良好的操作和使用界面。在文件系統(tǒng)中,存在著文件/目錄訪問(wèn)權(quán)限管理和控制、加密文件系統(tǒng)等的安全機(jī)制和問(wèn)題需要考慮,本文將詳細(xì)介紹保證Linux文件系統(tǒng)安全的技術(shù)和方法。

Linux中的文件系統(tǒng)類(lèi)型

隨著Linux的不斷發(fā)展,其所能支持的文件格式系統(tǒng)也在迅速擴(kuò)充。特別是Linux2.6內(nèi)核正式推出后,出現(xiàn)了大量新的文件系統(tǒng),其中包括日志文件系統(tǒng)Ext4、Ext3、ReiserFS、XFS、JFS和其他文件系統(tǒng)。Linux系統(tǒng)核心可以支持十多種文件系統(tǒng)類(lèi)型:JFS、ReiserFS、Ext、Ext2、Ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。

文件系統(tǒng)安全性對(duì)比

從自動(dòng)修復(fù)損壞的文件系統(tǒng)來(lái)看,ext2、ext3都能自動(dòng)修復(fù)損壞的文件系統(tǒng),也都是在開(kāi)機(jī)時(shí)進(jìn)行。ext2和ext3文件系統(tǒng)在默認(rèn)的情況下是“每間隔21次掛載文件系統(tǒng)或每180天,就要自動(dòng)檢測(cè)一次。通過(guò)實(shí)踐來(lái)看ext2和ext3在自動(dòng)檢測(cè)上是存在風(fēng)險(xiǎn),有時(shí)文件系統(tǒng)開(kāi)機(jī)后就進(jìn)入單用戶(hù)模式,并且把整個(gè)系統(tǒng)“扔”進(jìn)lost+found目錄,如果要恢復(fù)系統(tǒng),就得用fsck來(lái)進(jìn)行修復(fù);當(dāng)然fsck也同樣存在風(fēng)險(xiǎn);所以對(duì)ext2和ext3文件系統(tǒng)的使用,對(duì)新手來(lái)說(shuō)的確需要心里準(zhǔn)備;畢竟修復(fù)已經(jīng)損壞的ext2和ext3文件系統(tǒng)是有困難的;另外ext2和ext3文件系統(tǒng)對(duì)于意外關(guān)機(jī)和斷電,也可能導(dǎo)致文件系統(tǒng)損壞,所以我們?cè)谑褂眠^(guò)程中,必須是合法關(guān)機(jī);比如執(zhí)行poweroff指令來(lái)關(guān)掉機(jī)器。

從文件系統(tǒng)的反刪除來(lái)看,ext2支持反刪除,對(duì)于一般使用者來(lái)說(shuō)應(yīng)該是安全的,但對(duì)于保密單位來(lái)說(shuō)可能意味著不安全。從反刪除角度來(lái)說(shuō)明文件系統(tǒng)的安全性,也是有兩方面。如果用戶(hù)的工作是從事比較機(jī)密的,用ext3比較好,因?yàn)閑xt3一旦刪除文件,是不可恢復(fù)的,因?yàn)榉磩h除能恢復(fù)相應(yīng)的絕秘資料的泄秘,所以ext3可能更適合從事機(jī)密工作的用戶(hù)。

新型的Ext4文件系統(tǒng)

Ext4是Linux內(nèi)核版本2.6.28的重要部分。它是Linux文件系統(tǒng)的一次革命。在很多方面,Ext4相對(duì)于Ext3的進(jìn)步要遠(yuǎn)超過(guò)Ext3相對(duì)于Ext2的進(jìn)步。Ext3相對(duì)于Ext2的改進(jìn)主要在于日志方面,但是Ext4相對(duì)于Ext3的的改進(jìn)是更深層次的,是文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)方面的優(yōu)化。一個(gè)高效的、優(yōu)秀的、可靠的和極具特點(diǎn)的文件系統(tǒng)就此誕生。目前,該文件系統(tǒng)并未在所有的Linux發(fā)行套件中完全普及使用,還處于初期的測(cè)試階段。

安全設(shè)定文件/目錄訪問(wèn)權(quán)限

Linux系統(tǒng)中的每個(gè)文件和目錄都有訪問(wèn)許可權(quán)限,通過(guò)其確定誰(shuí)可以通過(guò)何種方式對(duì)文件和目錄進(jìn)行訪問(wèn)和操作。下面將對(duì)文件/目錄訪問(wèn)的方法和命令進(jìn)行介紹。

文件或目錄的訪問(wèn)權(quán)限分為只讀,只寫(xiě)和可執(zhí)行三種。以文件為例,只讀權(quán)限表示只允許讀其內(nèi)容,而禁止對(duì)其做任何的更改操作;只寫(xiě)權(quán)限允許對(duì)文件進(jìn)行任何的修改操作;可執(zhí)行權(quán)限表示允許將該文件作為一個(gè)程序執(zhí)行。文件被創(chuàng)建時(shí),文件所有者自動(dòng)擁有對(duì)該文件的讀、寫(xiě)和可執(zhí)行權(quán)限,以便于對(duì)文件的閱讀和修改。用戶(hù)也可根據(jù)需要把訪問(wèn)權(quán)限設(shè)置為需要的任何組合。

有三種不同類(lèi)型的用戶(hù)可對(duì)文件或目錄進(jìn)行訪問(wèn):文件所有者,同組用戶(hù)、其他用戶(hù)。所有者一般是文件的創(chuàng)建者。它可以允許同組用戶(hù)有權(quán)訪問(wèn)文件,還可以將文件的訪問(wèn)權(quán)限賦予系統(tǒng)中的其他用戶(hù)。在這種情況下,系統(tǒng)中的每一位用戶(hù)都能訪問(wèn)該用戶(hù)擁有的文件或目錄。

每一個(gè)文件或目錄的訪問(wèn)權(quán)限都有三組,每組用三位表示,分別為文件屬主的讀、寫(xiě)和執(zhí)行權(quán)限;與屬主同組的用戶(hù)的讀、寫(xiě)和執(zhí)行權(quán)限;系統(tǒng)中其他用戶(hù)的讀、寫(xiě)和執(zhí)行權(quán)限(如圖1所示)。當(dāng)用ls-l命令顯示文件或目錄的詳細(xì)信息時(shí),最左邊的一列為文件的訪問(wèn)權(quán)限。例如:

橫線(xiàn)代表空許可(即表示不具有該權(quán)限)。r代表只讀,w代表寫(xiě),x代表可執(zhí)行。注意:這里共有10個(gè)位置。第1個(gè)字符指定了文件類(lèi)型。在通常意義上,一個(gè)目錄也是一個(gè)文件。如果第1個(gè)字符是橫線(xiàn),表示是一個(gè)非目錄的文件。如果是d,表示是一個(gè)目錄。后面的9個(gè)字符每三個(gè)構(gòu)成一組,依次表示文件主、組用戶(hù)、其他用戶(hù)對(duì)該文件的訪問(wèn)權(quán)限。

例如:

表示文件sobsrc.tgz的訪問(wèn)權(quán)限,說(shuō)明sobsrc.tgz是一個(gè)普通文件;sobsrc.tgz的屬主有讀寫(xiě)權(quán)限;與sobsrc.tgz屬主同組的用戶(hù)只有讀權(quán)限;其他用戶(hù)也只有讀權(quán)限。

確定了一個(gè)文件的訪問(wèn)權(quán)限后,用戶(hù)可以利用Linux系統(tǒng)提供的chmod命令來(lái)重新設(shè)定不同的訪問(wèn)權(quán)限。也可以利用chown命令來(lái)更改某個(gè)文件或目錄的所有者。

▲圖1.文件/目錄訪問(wèn)權(quán)限示意圖

1、改變文件/目錄的訪問(wèn)權(quán)限

chmod命令用于改變文件或目錄的訪問(wèn)權(quán)限,它是一條非常重要的系統(tǒng)命令。用戶(hù)可用其控制文件或目錄的訪問(wèn)權(quán)限。

該命令有兩種用法。一種是包含字母和操作符表達(dá)式的文字設(shè)定法;另一種是包含數(shù)字的數(shù)字設(shè)定法。

文字設(shè)定法

文字設(shè)定法的一般使用形式為:chmod[who][+|-|=][mode]文件名。其中,操作對(duì)像who可以是下述字母中的任一個(gè)或者為各字母的組合:

表示“用戶(hù)(user)”,即文件或目錄的所有者。

表示“同組(group)用戶(hù)”,即與文件屬主有相同組ID的所有用戶(hù)。

表示“其他(others)用戶(hù)”。

表示“所有(all)用戶(hù)”。其為系統(tǒng)默認(rèn)值。

操作符號(hào)可以是:

添加某個(gè)權(quán)限。

取消某個(gè)權(quán)限。

賦予給定權(quán)限并取消其他所有權(quán)限(如果有的話(huà))。

設(shè)置mode所表示的權(quán)限可用下述字母的任意組合:

可讀。

可寫(xiě)。

可執(zhí)行。只有目標(biāo)文件對(duì)某些用戶(hù)是可執(zhí)行的或該目標(biāo)文件是目錄時(shí)才追加x屬性。

在文件執(zhí)行時(shí)把進(jìn)程的屬主或組ID置為該文件的文件屬主。方式“u+s”設(shè)置文件的用戶(hù)ID位,“g+s”設(shè)置組ID位。

將程序的文本保存到交換設(shè)備上。

與文件屬主擁有一樣的權(quán)限。

與和文件屬主同組的用戶(hù)擁有一樣的權(quán)限。

與其他用戶(hù)擁有一樣的權(quán)限。

如果在一個(gè)命令行中可給出多個(gè)權(quán)限方式,其間用逗號(hào)隔開(kāi)。圖2給出了使用該設(shè)定法的例子:

▲圖2.chmod命令文字設(shè)定法使用示例

首先,設(shè)定文件test1的屬性為:文件屬主(u)增加執(zhí)行權(quán)限;與文件屬主同組用戶(hù)(g)增加執(zhí)行權(quán)限;其他用戶(hù)(o)增加執(zhí)行權(quán)限,其命令為:

接著,設(shè)定文件test2的屬性為:文件屬主(u)增加寫(xiě)權(quán)限;與文件屬主同組用戶(hù)(g)增加寫(xiě)權(quán)限;其他用戶(hù)(o)刪除執(zhí)行權(quán)限,其命令為:

最后,對(duì)可執(zhí)行文件test3添加s權(quán)限,使得執(zhí)行該文件的用戶(hù)暫時(shí)具有該文件擁有者的權(quán)限:

 #p#

在上述例子中,當(dāng)其他用戶(hù)執(zhí)行test3這個(gè)程序時(shí),他的身份將由于這個(gè)程序而暫時(shí)變成該test3程序的擁有者(由于chmod命令中使用了s選項(xiàng)),所以他就能夠讀取test3.c文件(雖然這個(gè)文件被設(shè)定為其他人不具備任何權(quán)限),這就是s的功能。在整個(gè)系統(tǒng)中特別是root本身,最好不要過(guò)多地設(shè)置這種類(lèi)型的文件(除非必要),這樣可以保障系統(tǒng)的安全,避免因?yàn)槟承┏绦虻腷ug而使系統(tǒng)遭到入侵。

數(shù)字設(shè)定法

數(shù)字設(shè)定法是與文字設(shè)定法功能等價(jià)的設(shè)定方法,只不過(guò)比文字設(shè)定法更加簡(jiǎn)便。數(shù)字表示的屬性的含義為:0表示沒(méi)有權(quán)限,1表示可執(zhí)行權(quán)限,2表示可寫(xiě)權(quán)限,4表示可讀權(quán)限,然后將其相加。所以數(shù)字屬性的格式應(yīng)為3個(gè)從0到7的八進(jìn)制數(shù),其順序是(u)、(g)、(o)。其他的與文字設(shè)定法基本一致。

如果想讓某個(gè)文件的屬主有“讀/寫(xiě)”二種權(quán)限,須要把4(可讀)+2(可寫(xiě))=6(讀/寫(xiě))。

數(shù)字設(shè)定法的一般形式為:chmod[mode]文件名。圖3給出使用該數(shù)字設(shè)定法的例子:

▲圖3.chmod命令數(shù)字設(shè)定法示意

可以看到,圖3中設(shè)定文件test1的屬性為:文件屬主(u)擁有讀、寫(xiě)權(quán)限;與文件屬主同組人用戶(hù)(g)擁有讀權(quán)限;其他人(o)擁有讀權(quán)限,而設(shè)定test2這個(gè)文件的屬性為:文件主本人(u)具有可讀/可寫(xiě)/可執(zhí)行權(quán)限;與文件主同組人(g)可讀/可執(zhí)行權(quán);其他人(o)沒(méi)有任何權(quán)限。

2、更改文件/目錄的所有權(quán)

該命令用來(lái)更改某個(gè)文件或目錄的屬主和屬組。舉個(gè)例子,root用戶(hù)把自己的一個(gè)文件拷貝給用戶(hù)xu,為了讓用戶(hù)xu能夠存取這個(gè)文件,root用戶(hù)應(yīng)該把這個(gè)文件的屬主設(shè)為xu,否則,用戶(hù)xu無(wú)法存取這個(gè)文件。

該命令的使用形式為:chown[選項(xiàng)]用戶(hù)或組文件

Chown的功能是將指定文件的擁有者改為指定的用戶(hù)或組。用戶(hù)可以是用戶(hù)名或用戶(hù)ID。組可以是組名或組ID。文件是以空格分開(kāi)的要改變權(quán)限的文件列表,支持通配符。該命令的選項(xiàng)為:

R:遞歸地改變指定目錄及其下面的所有子目錄和文件的擁有者。

v:顯示chown命令所做的工作。

圖4給出了使用該命令的例子,筆者把文件test1的所有者改為super,把目錄./test_dir及其下面的所有文件和子目錄的屬主改成super,屬組改成super。

▲圖4.chown命令使用示意

3、改變文件的執(zhí)行權(quán)限

通過(guò)前面的介紹我們知道,Linux系統(tǒng)中的每一個(gè)文件都有一個(gè)所有者,表示該文件是誰(shuí)創(chuàng)建的。同時(shí),該文件還有一個(gè)組編號(hào),表示該文件所屬的組,一般為文件所有者所屬的組。并且,在一般情況下,我們也可以通過(guò)設(shè)定對(duì)文件的權(quán)限來(lái)控制對(duì)其的相關(guān)操作。

在此情況中,如果是一個(gè)可執(zhí)行文件,那么在執(zhí)行時(shí),一般該文件只擁有調(diào)用該文件的用戶(hù)具有的權(quán)限。而setuid/setgid則可以來(lái)改變這種設(shè)置:

setuid:設(shè)置使文件在執(zhí)行階段具有文件所有者的權(quán)限。典型的文件是/usr/bin/passwd。如果一般用戶(hù)執(zhí)行該文件,則在執(zhí)行過(guò)程中,該文件可以獲得root權(quán)限,從而可以更改用戶(hù)的密碼

setgid:該權(quán)限只對(duì)目錄有效。目錄被設(shè)置該位后,任何用戶(hù)在此目錄下創(chuàng)建的文件都具有和該目錄所屬的組相同的組。

stickybit:該位可以理解為防刪除位。一個(gè)文件是否可以被某用戶(hù)刪除,主要取決于該文件所屬的組是否對(duì)該用戶(hù)具有寫(xiě)權(quán)限。如果沒(méi)有寫(xiě)權(quán)限,則這個(gè)目錄下的所有文件都不能被刪除,同時(shí)也不能添加新的文件。如果希望用戶(hù)能夠添加文件但同時(shí)不能刪除文件。則可以對(duì)文件使用stickybit位。設(shè)置該位后,j即便用戶(hù)對(duì)目錄具有寫(xiě)權(quán)限,也不能刪除該文件。

在前面我們討論了通過(guò)文字設(shè)定和數(shù)字設(shè)定的方法來(lái)設(shè)定文件/目錄的訪問(wèn)權(quán)限問(wèn)題,同樣的道理,下面我們通過(guò)這兩種方法來(lái)介紹如何操作這些標(biāo)志。操作這些標(biāo)志與操作文件權(quán)限的命令是一樣的,都是使用chmod命令來(lái)進(jìn)行:

文字設(shè)定法

chmodu+sfilename:為文件filename加上setuid標(biāo)志。

chmodg+sdirname:為目錄dirname目錄加上setgid標(biāo)志。

chmodo+tfilename:為文件filename加上sticky標(biāo)志。

數(shù)字設(shè)定法

對(duì)一般文件通過(guò)三組八進(jìn)制數(shù)字來(lái)置標(biāo)志,如444、777、644等。如果設(shè)置這些特殊標(biāo)志,則在這組數(shù)字之前外加一組八進(jìn)制數(shù)字。如4666、4777等。這一組八進(jìn)制數(shù)字三位的意義如下:

setuid位:如果該位為1,顯示為“S”,則表示設(shè)置setuid,其顯示在原來(lái)的x標(biāo)志位上;

setgid位:如果該位為1,顯示為“S”,則表示設(shè)置setgid,其顯示在原來(lái)的x標(biāo)志位上;

sticky位:如果該位為1,顯示為“T”,則表示設(shè)置sticky,其顯示在原來(lái)的x標(biāo)志位上。

設(shè)置完這些標(biāo)志后,可以用ls–l命令來(lái)查看。如果有這些標(biāo)志,則會(huì)在原來(lái)的執(zhí)行標(biāo)志位置上顯示。如下所示:

r-srw-r--:表示有setuid標(biāo)志;

rwxrwsrw-:表示有setgid標(biāo)志;

rwxrw-rwt:表示有sticky標(biāo)志。

如果本來(lái)在該位上有x,則這些特殊標(biāo)志顯示為小寫(xiě)字母(s,s,t)。否則,顯示為大寫(xiě)字母(S,S,T)。

另外非常值得讀者注意的是,雖然setuid/setgid機(jī)制非常方便實(shí)用,但是由于提升了執(zhí)行者的權(quán)限,因而不可避免地存在許多安全隱患和風(fēng)險(xiǎn),所以作者并不太贊成廣大讀者廣泛使用,并且,在實(shí)際的系統(tǒng)管理過(guò)程中,我們還經(jīng)常需要找出設(shè)置有這些標(biāo)志的文件,并對(duì)他們進(jìn)行檢查和清理,那么,一般我們可以使用如下命令來(lái)對(duì)系統(tǒng)中的具有特殊標(biāo)志的文件進(jìn)行尋找:

 #p#

使用額外屬性保護(hù)ext3文件系統(tǒng)安全

1、ext3中的額外屬性

從Linux的1.1系列內(nèi)核開(kāi)始,ext2文件系統(tǒng)就開(kāi)始支持一些針對(duì)文件和目錄的額外標(biāo)記或者叫作屬性(attribute)。在2.2和2.4系列及其高版本的內(nèi)核中,ext3文件系統(tǒng)支持以下屬性的設(shè)置和查詢(xún)(如表1所示):

▲表1.ext3文件系統(tǒng)支持的屬性含義

雖然文件系統(tǒng)能夠接受并保留指示每個(gè)屬性的標(biāo)志,但是這些屬性不一定有效,這依賴(lài)于內(nèi)核和各種應(yīng)用程序的版本。表2顯示了Linux每個(gè)版本內(nèi)核支持的屬性標(biāo)志的具體情況,其中:

OK:表示允許設(shè)置這個(gè)標(biāo)志并使設(shè)置生效;

POK:允許設(shè)置這個(gè)標(biāo)志但忽略其值;

——:表示完全忽略這個(gè)標(biāo)志。

▲表2.Linux各內(nèi)核版本對(duì)屬性的支持情況

從上述表格可以看出:雖然早期的內(nèi)核版本支持安全刪除特征,但是從1.3系列的內(nèi)核開(kāi)始,開(kāi)發(fā)者拋棄的對(duì)這個(gè)特征的實(shí)現(xiàn),因?yàn)樗坪踔荒軌蛱岣咭稽c(diǎn)點(diǎn)的安全性,而糟糕的是它會(huì)給不熟悉安全刪除繼承問(wèn)題的用戶(hù)造成安全的假象。在對(duì)具有A屬性的文件進(jìn)行操作時(shí),A屬性可以提高一定的性能。而S屬性能夠最大限度的保障文件的完整性。

因此,我們將主要討論a屬性和i屬性,因?yàn)檫@兩個(gè)屬性對(duì)于提高文件系統(tǒng)的安全性和保障文件系統(tǒng)的完整性有很大的好處。同樣,一些開(kāi)放源碼的BSD系統(tǒng)(比如FreeBSD和OpenBSD),在其UFS或者FFS實(shí)現(xiàn)中也支持類(lèi)似的特征。

2、使用ext3文件系統(tǒng)的屬性

在任何情況下,標(biāo)準(zhǔn)的ls命令都不會(huì)一個(gè)文件或者目錄的擴(kuò)展屬性。ext3文件系統(tǒng)工具包中有兩個(gè)工具:chattr和lsattr。它們被專(zhuān)門(mén)用來(lái)設(shè)置和查詢(xún)文件屬性。因?yàn)閑xt3是標(biāo)準(zhǔn)的Linux文件系統(tǒng),因此幾乎所有的發(fā)布都有e2fsprogs工具包。如果由于某些原因,系統(tǒng)中沒(méi)有這個(gè)工具,用戶(hù)可以從以下地址下載這個(gè)工具包的源代碼編譯并安裝:http://sourceforge.net/projects/e2fsprogs。

Lsattr命令

lsattr命令只支持很少的選項(xiàng),其選項(xiàng)如下:

a:列出目錄中的所有文件,包括以.開(kāi)頭的文件。

d:以和文件相同的方式列出目錄,并顯示其包含的內(nèi)容。

R:以遞歸的方式列出目錄的屬性及其內(nèi)容。

v:列出文件版本(用于網(wǎng)絡(luò)文件系統(tǒng)NFS)。

Chattr命令

chattr命令可以通過(guò)以下三種方式執(zhí)行:

chattr+Sifilename:給文件添加同步和不可變屬性。

chattr-aifilename:把文件的只擴(kuò)展(append-only)屬性和不可變屬性去掉。

chattr=aiAfilenamet:使文件只有a、i和A屬性。

最后,每個(gè)命令都支持-R選項(xiàng),用于遞歸地對(duì)目錄和其子目錄進(jìn)行操作。

3、ext3屬性和文件權(quán)限的區(qū)別

幾乎所有的系統(tǒng)管理員都理解Linux風(fēng)格文件系統(tǒng)的權(quán)限和所有者以及l(fā)s命令的顯示,如圖5所示:

▲圖5.ls顯示結(jié)果

從ls的輸出結(jié)果看,這些文件屬于用戶(hù)super,而super所在的用戶(hù)組是super。用戶(hù)super本人和super用戶(hù)組的成員對(duì)test2和test3具有對(duì)文件的修改權(quán)限,而其他的用戶(hù)對(duì)test1、test2、test3均只有讀取文件的權(quán)限。圖6給出了與圖5對(duì)比的lsattr命令的輸出:

▲圖6.lsattr顯示結(jié)果

輸出結(jié)果顯示,test2只能被添加,而test1文件不準(zhǔn)修改。在Linux系統(tǒng)中,如果一個(gè)用戶(hù)以root的權(quán)限登錄,文件系統(tǒng)的權(quán)限控制將無(wú)法對(duì)root用戶(hù)和以root權(quán)限運(yùn)行的進(jìn)程進(jìn)行任何的限制。這樣對(duì)于Linux類(lèi)的操作系統(tǒng),如果攻擊者通過(guò)遠(yuǎn)程或者本地攻擊獲得root權(quán)限將可能對(duì)系統(tǒng)造成嚴(yán)重的破壞。而ext3文件系統(tǒng)可以作為最后一道防線(xiàn),最大限度地減小系統(tǒng)被破壞的程度,并保存攻擊者的行蹤。ext3屬性是由sys_open()和sys_truncate()等系統(tǒng)調(diào)用檢查和賦予的,不受用戶(hù)識(shí)別號(hào)和其他因素的影響,在任何情況下,對(duì)具有不可修改(immutable)屬性的文件的進(jìn)行任何修改都會(huì)失敗,不管是否是root用戶(hù)進(jìn)行的修改。

但是,還有一個(gè)問(wèn)題是root權(quán)限的用戶(hù)可以通過(guò)刪除i屬性實(shí)現(xiàn)對(duì)文件的修改。這種防護(hù)只不過(guò)給獲得root權(quán)限的攻擊者加了一點(diǎn)小麻煩罷了,系統(tǒng)的安全性并沒(méi)有根本性的提高。

在2.1之前的內(nèi)核版本中,存在一個(gè)安全層(securelevel)的特征。使用安全層可以解決上述問(wèn)題,因?yàn)槿绻到y(tǒng)的安全層大于0,內(nèi)核將不允許對(duì)任何文件的i屬性進(jìn)行修改。這些版本的內(nèi)核由sysctl命令的"kernel.securelevel"變量進(jìn)行控制。如果在啟動(dòng)時(shí),這個(gè)變量的值被設(shè)置為1或者更大的值,內(nèi)核將不允許對(duì)具有i屬性和a屬性文件進(jìn)行修改,除非國(guó)旗動(dòng)到單用戶(hù)狀態(tài)。但是,由于引入了更為靈活的內(nèi)核能力特征(kernelcapabilities),以后的內(nèi)核不再支持安全層。使用內(nèi)核能力,也可以實(shí)現(xiàn)類(lèi)似的限制。工具lcap用來(lái)查詢(xún)和調(diào)整內(nèi)核能力約束集(kernelcapabilitiesboundingset)。在啟動(dòng)腳本中加入以下命令,就可以實(shí)現(xiàn)對(duì)具有i屬性和a屬性文件的保護(hù):

第一個(gè)命令刪除任何用戶(hù)(包括超級(jí)用戶(hù))對(duì)i標(biāo)志的修改能力。第二個(gè)命令刪除任何用戶(hù)(主要針對(duì)超級(jí)用戶(hù))對(duì)塊設(shè)備的原始訪問(wèn)(rawaccess)能力,防止一些技術(shù)高超的攻擊者直接修改文件系統(tǒng)索引節(jié)點(diǎn)的immutable域。BTW,在系統(tǒng)啟動(dòng)時(shí),CAP_SYS_RAWIO能力應(yīng)該直接刪除,這個(gè)能力是一個(gè)非常大的潛在威脅。高明的攻擊者獲得了超級(jí)用戶(hù)權(quán)限之后,通過(guò)/dev/kmem設(shè)備可以直接修改內(nèi)核內(nèi)存。通過(guò)這種方式,可以破壞系統(tǒng)的內(nèi)核能力約束集(kernelcapabilitiesbounding)。如果沒(méi)有任何參數(shù),會(huì)列出內(nèi)核支持的能力和目前生效的內(nèi)核能力。一旦一個(gè)內(nèi)核能力被刪除,就只有在系統(tǒng)重新啟動(dòng),進(jìn)入到單用戶(hù)模式才能刪除能力限制。

使用chattr

Linux主機(jī)直接暴露在Internet或者位于其它危險(xiǎn)的環(huán)境,有很多shell帳戶(hù)或者提供HTTP和FTP等網(wǎng)絡(luò)服務(wù),一般應(yīng)該在安裝配置完成后使用如下命令:

如果很少對(duì)帳戶(hù)進(jìn)行添加、變更或者刪除,把/home本身設(shè)置為immutable屬性也不會(huì)造成什么問(wèn)題。在很多情況下,整個(gè)/usr目錄樹(shù)也應(yīng)該具有不可改變屬性。實(shí)際上,除了對(duì)/usr目錄使用chattr-R+ii/usr/命令外,還可以在/etc/fstab文件中使用ro選項(xiàng),使/usr目錄所在的分區(qū)以只讀的方式加載。另外,把系統(tǒng)日志文件設(shè)置為只能添加屬性(append-only),將使入侵者無(wú)法擦除自己的蹤跡。當(dāng)然,如果使用這種安全措施,需要系統(tǒng)管理員修改管理方式。

由于軟件管理程序需要加入和刪除某些文件和目錄,因此在進(jìn)行軟件安裝和升級(jí)之前需要?jiǎng)h除某些目錄和文件的immutable和append-only屬性。對(duì)于Linux系統(tǒng),一般使用rpm管理軟件包,用戶(hù)可以使用以下命令查看要安裝或者升級(jí)的軟件包都有哪些文件:

然后去掉有關(guān)目錄和文件的immutable和append-only屬性。大多數(shù)軟件包需要rpm命令對(duì)以下目錄的一個(gè)或者多個(gè)進(jìn)行寫(xiě)操作

值得注意的是:如果用戶(hù)需要升級(jí)/usr/sbin/someprogram,應(yīng)該去掉someprogram文件以及目錄/usr/sbin的immutable屬性。#p#

使用加密文件系統(tǒng)(EFS)

下面將詳細(xì)介紹利用dm-crypt來(lái)創(chuàng)建加密文件系統(tǒng)的方法。與其它創(chuàng)建加密文件系統(tǒng)的方法相比,dm-crypt系統(tǒng)有著無(wú)可比擬的優(yōu)越性:它的速度更快,易用性更強(qiáng)。除此之外,它的適用面也很廣,能夠運(yùn)行在各種塊設(shè)備上,即使這些設(shè)備使用了RAID和LVM也毫無(wú)障礙。dm-crypt系統(tǒng)之所以具有這些優(yōu)點(diǎn),主要得益于該技術(shù)是建立在2.6版本內(nèi)核的device-mapper特性之上的。device-mapper是設(shè)計(jì)用來(lái)為在實(shí)際的塊設(shè)備之上添加虛擬層提供一種通用靈活的方法,以方便開(kāi)發(fā)人員實(shí)現(xiàn)鏡像、快照、級(jí)聯(lián)和加密等處理。此外,dm-crypt使用了內(nèi)核密碼應(yīng)用編程接口實(shí)現(xiàn)了透明的加密,并且兼容cryptloop系統(tǒng)。

1、內(nèi)核準(zhǔn)備

dm-crypt利用內(nèi)核的密碼應(yīng)用編程接口來(lái)完成密碼操作。一般說(shuō)來(lái),內(nèi)核通常將各種加密程序以模塊的形式加載。對(duì)于AES來(lái)說(shuō),其安全強(qiáng)度已經(jīng)非常之高,即便用來(lái)保護(hù)絕密級(jí)的數(shù)據(jù)也足夠了。為了保證用戶(hù)的內(nèi)核已經(jīng)加載AES密碼模塊,請(qǐng)根據(jù)圖7所示命令進(jìn)行檢查:

▲圖7.檢查AES模塊是否成功加載

否則,可以使用modprobe來(lái)手工加載AES模塊,命令如下所示:

接下來(lái),用戶(hù)安裝dmsetup軟件包,該軟件包含有配置device-mapper所需的工具,如下命令所示:

為檢查dmsetup軟件包是否已經(jīng)建立了設(shè)備映象程序,鍵入下列命令進(jìn)行:

然后,需要使用如下命令加載dm-crypt內(nèi)核模塊:

dm-crypt加載后,它會(huì)用evice-mapper自動(dòng)注冊(cè)。如果再次檢驗(yàn)的話(huà),device-mapper已能識(shí)別dm-crypt,并且把crypt添加為可用的對(duì)象。執(zhí)行完上述步驟后,用戶(hù)應(yīng)該可以根據(jù)如下命令看到crypt的下列輸出,如圖8所示:

 

▲圖8.成功做好裝載加密設(shè)備的顯示

這說(shuō)明系統(tǒng)已經(jīng)為裝載加密設(shè)備做好了準(zhǔn)備。下面,我們先來(lái)建立一個(gè)加密設(shè)備。

2、創(chuàng)建加密設(shè)備

要?jiǎng)?chuàng)建作為加密設(shè)備裝載的文件系統(tǒng),有兩種選擇:一是建立一個(gè)磁盤(pán)映像,然后作為回送設(shè)備加載;二是使用物理設(shè)備。無(wú)論那種情況,除了在建立和捆綁回送設(shè)備外,其它操作過(guò)程都是相似的。

3、建立回送磁盤(pán)映象

如果用戶(hù)沒(méi)有用來(lái)加密的物理設(shè)備(比如存儲(chǔ)棒或另外的磁盤(pán)分區(qū)),作為替換,你可以利用命令dd來(lái)建立一個(gè)空磁盤(pán)映象,然后將該映象作為回送設(shè)備來(lái)裝載,照樣能用。下面我們以實(shí)例來(lái)加以介紹:

這里我們新建了一個(gè)大小為100MB的磁盤(pán)映象,該映象名字為virtual.img。要想改變其大小,可以改變count的值。

接下來(lái),我們利用losetup命令將該映象和一個(gè)回送設(shè)備聯(lián)系起來(lái):

現(xiàn)在,我們已經(jīng)得到了一個(gè)虛擬的塊設(shè)備,其位于/dev/loop0,并且我們能夠如同使用其它設(shè)備那樣來(lái)使用它。

4、設(shè)置塊設(shè)備

準(zhǔn)備好了物理塊設(shè)備(例如/dev/hda1),或者是虛擬塊設(shè)備(像前面那樣建立了回送映象,并利用device-mapper將其作為加密的邏輯卷加載),我們就可以進(jìn)行塊設(shè)備配置了。

下面我們使用cryptsetup來(lái)建立邏輯卷,并將其與塊設(shè)備捆綁:

其中,ly_EFS是新建的邏輯卷的名稱(chēng)。并且最后一個(gè)參數(shù)device_name必須是將用作加密卷的塊設(shè)備。所以,如果要使用前面建立的回送映象作為虛擬塊設(shè)備的話(huà),應(yīng)當(dāng)運(yùn)行以下命令:

無(wú)論是使用物理塊設(shè)備還是虛擬塊設(shè)備,程序都會(huì)要求輸入邏輯卷的口令,-y的作用在于要你輸入兩次口令以確保無(wú)誤。這一點(diǎn)很重要,因?yàn)橐坏┛诹钆e(cuò),就會(huì)把自己的數(shù)據(jù)鎖住,如圖9所示:

▲圖9.為EFS輸入密碼#p#

為了確認(rèn)邏輯卷是否已經(jīng)建立,可以使用下列命令進(jìn)行檢查一下:

只要該命令列出了邏輯卷,就說(shuō)明已經(jīng)成功建立了邏輯卷。不過(guò)根據(jù)機(jī)器的不同,設(shè)備號(hào)可能有所不同,如圖10所示:

▲圖10.顯示成功建立的邏輯卷

device-mapper會(huì)把它的虛擬設(shè)備裝載到/dev/mapper下面,所以,你的虛擬塊設(shè)備應(yīng)該是/dev/mapper/ly_EFS,盡管用起來(lái)它和其它塊設(shè)備沒(méi)什么不同,實(shí)際上它卻是經(jīng)過(guò)透明加密的。

如同物理設(shè)備一樣,用戶(hù)也可以在虛擬設(shè)備上創(chuàng)建文件系統(tǒng):

現(xiàn)在為新的虛擬塊設(shè)備建立一個(gè)裝載點(diǎn),然后將其裝載。命令如下所示:

用戶(hù)能夠利用下面的命令查看其裝載后的情況,如圖11所示:

 

▲圖11.EFS成功裝載后的顯示

通過(guò)上述的步驟后,用戶(hù)看到裝載的文件系統(tǒng),盡管看起來(lái)與其它文件系統(tǒng)無(wú)異,但實(shí)際上寫(xiě)到/mnt/ly_EFS/下的所有數(shù)據(jù),在數(shù)據(jù)寫(xiě)入之前都是經(jīng)過(guò)透明的加密處理后才寫(xiě)入磁盤(pán)的,因此,從該處讀取的數(shù)據(jù)都是些密文。

5、卸載加密設(shè)備

要卸載加密文件系統(tǒng),和平常的方法沒(méi)什么兩樣:

即便已經(jīng)卸載了塊設(shè)備,在dm-crypt中仍然視為一個(gè)虛擬設(shè)備。如若不信,用戶(hù)可以再次運(yùn)行如圖10所示的命令dmsetupls來(lái)驗(yàn)證一下,將會(huì)看到該設(shè)備依然會(huì)被列出。因?yàn)閐m-crypt緩存了口令,所以機(jī)器上的其它用戶(hù)不需要知道口令就能重新裝載該設(shè)備。為了避免這種情況發(fā)生,用戶(hù)必須在卸載設(shè)備后從dm-crypt中顯式的刪除該設(shè)備。命令具體如下所示:

此后,它將徹底清除,要想再次裝載的話(huà),用戶(hù)必須再次輸入口令。

6、重新裝載加密設(shè)備

在卸載加密設(shè)備后,用戶(hù)很可能還需作為普通用戶(hù)來(lái)裝載它們。為了簡(jiǎn)化該工作,需要在/etc/fstab文件中添加下列內(nèi)容:

此外,用戶(hù)也可以通過(guò)建立腳本來(lái)替我們完成dm-crypt設(shè)備的創(chuàng)建和卷的裝載工作,方法是用實(shí)際設(shè)備的名稱(chēng)或文件路徑來(lái)替換/dev/DEVICENAME:

如果用戶(hù)使用的是回送設(shè)備的話(huà),用戶(hù)還可以利用腳本來(lái)捆綁設(shè)備,腳本如下所示:

7、在Linux系統(tǒng)安裝時(shí)使用EFS

上面介紹了使用dm-crypt來(lái)創(chuàng)建加密文件系統(tǒng)的方法,對(duì)于初級(jí)用戶(hù)來(lái)說(shuō),可能這個(gè)過(guò)程有些繁雜和不好理解。那么,本節(jié)將介紹一個(gè)非常簡(jiǎn)單的方法來(lái)使用EFS文件系統(tǒng)。以Fedora10的安裝步驟為例子,選擇相關(guān)選項(xiàng)進(jìn)行安裝就可以方便地進(jìn)行使用了。

用戶(hù)可以在空閑空間新建分區(qū),也可以選擇某個(gè)分區(qū)進(jìn)行編輯,還可以刪除某些分區(qū)。在圖12中,需要選中[加密文件系統(tǒng)]選項(xiàng),并且,根據(jù)系統(tǒng)要求,輸入訪問(wèn)EFS所需要的密碼,如圖13所示。然后,根據(jù)第3章的介紹接下來(lái)一步一步按照系統(tǒng)的提示進(jìn)行系統(tǒng)安裝即可。那么,在成功安裝系統(tǒng)后,用戶(hù)就擁有了一個(gè)安全的加密文件系統(tǒng),并且,在每次登錄系統(tǒng)的時(shí)候,系統(tǒng)都會(huì)要求用戶(hù)輸入在圖13所示步驟中設(shè)定的密碼來(lái)進(jìn)行安全訪問(wèn)。

▲圖12.安裝時(shí)選中[加密系統(tǒng)(E)]選項(xiàng)

▲圖13.輸入EFS所需的密碼

【編輯推薦】

  1. 企業(yè)級(jí)Linux系統(tǒng)下的進(jìn)程安全管理方法
  2. 系統(tǒng)安全:Windows與Linux平臺(tái)
  3. 微軟為什么羨慕Linux系統(tǒng)安全性
  4. Linux系統(tǒng)安全性 VS Windows安全性
責(zé)任編輯:于爽 來(lái)源: developerworks
相關(guān)推薦

2009-07-29 16:52:40

2009-08-18 09:21:54

Windows 7效率提高系統(tǒng)優(yōu)化

2011-07-08 13:22:17

2011-03-23 14:00:44

2009-10-12 15:06:59

2009-07-04 11:26:12

unix應(yīng)急安全攻略

2011-03-23 14:28:29

安全Unix系統(tǒng)find

2011-08-09 09:37:49

2009-07-04 11:05:48

Linux安全攻略

2021-02-22 08:35:41

網(wǎng)絡(luò)安全Linux系統(tǒng)安全

2021-03-02 14:02:19

網(wǎng)絡(luò)安全系統(tǒng)安全iptables

2021-02-23 09:12:46

網(wǎng)絡(luò)安全系統(tǒng)安全OpenSS

2011-03-22 16:28:59

2012-10-18 09:29:00

Linux系統(tǒng)安全系統(tǒng)安全

2021-03-15 13:50:24

網(wǎng)絡(luò)安全Android安全機(jī)制

2021-01-29 17:40:00

Flyme安卓手機(jī)安全

2021-03-22 10:52:58

網(wǎng)絡(luò)安全Android數(shù)據(jù)安全

2014-03-19 17:22:33

2011-05-16 10:23:21

2010-03-05 09:58:45

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)