歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Grsecurity ACL系統(一)

  摘要    ACL(Access Control List,訪問控制列表)系統是一種軟件,它能夠為你的計算機提供更好的訪問控制。Grsecurity是眾多Linux ACL系統中比較典型和成熟的一種。這個文檔是grsecurity工程的一個官方文檔,是我最近在研究Linux的ACL系統時,順便翻譯的。和lids之類的系統一樣,grsecurity比較復雜,而且文檔裡面有很多地方也語焉不詳,所以出現錯誤在所難免。    簡介    1.什麼是ACL系統?      ACL(Access Control List,訪問控制列表)系統是一種軟件,它能夠為你的計算機提供更好的訪問控制.    2.為什麼需要ACL系統?      訪問控制系統的作用是限制包括root用戶在內的所有用戶對文件、能力、資源或者套接字的訪問。這是一種合法性訪問控制(Mandatory Access Control)模型。隨著對系統安全性的日益關注,出現了很多針對Linux系統的訪問控制系統。這些Linux ACL系統多數是以內核補丁的形勢出現的,Grsecurity是其中比較典型和成熟的一種。使用grsecurity,系統管理員可以賦予進程盡可能小的權限,從而使攻擊者即使獲得了root權限也無法控制整個系統。    3.支持的特征      grsecurity具有以下功能:    基於進程的訪問控制;   基於進程的資源限制;   IP訪問控制;   阻止進程暴力攻擊的限制;   完全智能的學習模型;   可讀的配置文件;   一個智能化的用戶空間管理工具;   通過include指令,支持附加的ACL配置。參數是一個目錄或者一個文件;   O(1)搜索算法;   管理員模式;   能力和ACL的繼承。          安裝Grsecurity系統    1.下載grsecurity內核補丁和管理工具gradm      從grsecurity的官方網站http://www.grsecurity.net,我們可以獲得最新版本的grsecurity內核補丁和管理工具gradm的源代碼。本文將以Redhat 7.3和最新版本的Linux-2.4.19內核為例進行討論。    2.安裝grsecurity內核補丁      下載完成之後,我們開始安裝。進入內核源代碼所在的目錄,給內核源代碼打上grsecurity補丁:    [nixe0n@nixe0n nixe0n]$ cd linux-2.4.19  [nixe0n@nixe0n linux-2.4.19]$ patch -p1 <../grsecurity-1.9.6-2.4.19.patch           然後在配置菜單中打開grsecurity支持的選項(相關選項的功能稍後將詳細介紹),重新編譯內核:    [nixe0n@nixe0n linux-2.4.19]$ make menUConfig  [root@nixe0n linux-2.4.19]# make dep&&make bzImage&&make modules&&make modules_install  [root@nixe0n linux-2.4.19]# cp arch/i386/boot/bzImage /boot/GRSecKernel           最後,使用自己喜歡的編輯器在/boot/grub/menu.lst文件中把GRSecKernel加入啟動菜單。    安裝grsecurity管理工具gradm      Grsecurity系統的管理工具叫做gradm,下載了最新版本的gradm之後,只要使用如下命令就可以完成編譯和安裝:    tar –zxf gradm-.tar.gz  cd gradm  make  make install           執行了make install命令時,需要定義一個管理Grsecurity ACL系統的密碼。為了系統的安全性,應該使密碼足夠長,另外不要使這個密碼和root賬戶的密碼相同。      Grsecurity的配置    1.Grsecurity ACL的結構      grsecurity ACL規則由主題進程和對象組成。主題進程是被執行的進程;對象是文件、資源、能力(capability)和對IP的訪問控制。系統的主要訪問控制列表文件位於/etc/grsec/acl,如果沒有這個文件,啟動grsecurity系統時就會報錯。      grsecurity ACL規則的結構如下所示:    

{             [+-]       connect {   /:-

   }          bind {   /:-

   }  }         2.grsecurity ACL規則的一些約定      grsecurity的訪問控制規則包含一些需要注意的問題。使用時一定要記住這些約定,才能准確地利用其加強系統的安全性。這些約定包括:    所有的路徑必須是絕對路徑;   如果要禁止對某個文件的訪問,只要忽略模式(mode)參數就可以了;   使用include關鍵詞,可以在規則中包含已經定義過的規則,例如:   include     grsecurity訪問控制規則支持注釋,絕大多數UNIX系統的配置文件以及shell等腳本都是用#作為注釋行的開頭,grsecurity規則也是;   主題和對象不必是文件,他們也可以是有效的目錄;   主題的模式包括:h、p、v、k和o(稍候我們將詳細介紹);   對象的模式包括:r、w、x、a、h、i和o(稍候我們將詳細介紹);   能力(capabilities)只有i一種模式;   不管如何配置,都至少需要一個默認的ACL,它的主題是/。如果沒有,在啟動grsecurity ACL系統時,gradm會告訴你缺少默認ACL;   任何主題進程的ACL規則都應該包含一個/對象;   CAP_ALL不是一個真正的能力,只是為了方便,讓它表示所有的能力。例如,如果想要去掉CAP_SETUID之外的所有能力,可以使用-CAP_ALL和+CAP_SETUID實現;   傳統的UNIX中,只有文件系統被賦予了訪問權限才能訪問文件系統上的文件,grsecurity ACL系統也是如此。        3.模式及其含義    3.1.主題進程的模式      在grsecurity ACL系統中,主題有如下模式:    h 這個進程是隱藏的,只能夠被具有v模式的進程看到;   v 具有這個模式的進程擁有察看隱藏進程的能力;   p 進程是受保護的,這種模式的進程只能被具有k模式的進程殺死;   k 具有這個模式的進程可以殺死處於保護模式(p)的進程;   l 為這個進程打開學習模式;   o 撤銷ACL繼承     3.2.對象的模式      grsecurity訪問控制規則中的對象可以有如下模式:    r 這個對象可以打開閱讀;   w 這個對象可以打開寫或者添加;   o 這個對象可以打開添加;   h 這個對象是隱藏的;   i 這個模式只用於二進制可執行文件。當這個對象被執行時,它繼承所在主體進程的訪問控制列表;     4.繼承      在grsecurity ACL系統中,存在一個叫做繼承(inheritance)的特征,它和C++種的繼承極為類似。繼承包括兩種方式,第一種和配置文件有關,而第二種和內河對ACL的處理方式有關。除了主題包含o模式的規則以外,所有的ACL規則都可以使用繼承。在ACL配置文件中有一些簡單的規則來控制繼承:    對於當前規則的某個對象,如果父ACL規則中存在對這個對象的訪問控制,grsecurity就會比較兩個規則所作的限制,盡量使當前規則允許的權限不大於父規則允許的權限,除非當前規則的被定義為o模式。   如果當前ACL規則中沒有對某個對象的限制,grsecurity會自動使用父規則對這個對象的限制。        4.1.繼承示例      為了便於理解,我們舉幾個有關繼承的例子:    / {   / rwx   /etc rx   /usr/bin rx   /tmp rw  }    /usr/bin/mailman {   /tmp rwxo  }           這兩個涉及到繼承的ACL規則展開後,將是如下形式:    / {   / rwx   /etc rx   /usr/bin rx   /tmp rw  }    /usr/bin/mailman {   / rwx   /etc rx   /usr/bin rx   /tmp rwx  }           在/usr/bin/mailman和/兩個規則都包含對/tmp對象的訪問控制。而在/usr/bin/mailman規則中,/tmp對象具有o模式,因此/規則中對/tmp對象所作的限制將被忽略。      grsecurity系統采用的繼承算法不僅僅只計算對父規則的繼承(例如:/bin和/bin/su),它會按照整個路徑計算當前規則對所有祖先規則的繼承。例如,在使用一個以/usr/X11R6/bin/XFree86為主題的訪問控制規則時,grsecurity會自動地計算/usr/X11R6/bin、/usr/X11R6、/usr、/等規則設置的訪問控制。      針對很多可執行文件的訪問控制都有一些共性的設置,為了減少重復設置,grsecurity才引入繼承的特征。在某些特殊的規則中,你可以使用o主題模式,在整個規則的范圍內,禁止繼承父規則的訪問控制;也可以使用o對象模式,僅僅取消對某個對象訪問控制的繼承。      內核對於繼承的處理略有不同,在這個例子中,當執行具有i模式的對象時,內核會包含進去一個主題ACL的拷貝。這樣,你就可以賦予特定進程派生出的進程以特殊的權限。例如:    / {   / rwx   /tmp rw  }    /usr/bin/mozilla {   /usr/bin/mozilla-bin rxi   /tmp rwxo  }           在這個例子中,假設/usr/bin/mozilla是一個腳本(事實的確如此),通過它執行真正的mozilla程序/usr/bin/mozilla-bin。當/usr/bin/mozilla-bin被/usr/bin/mozilla執行時,它會繼承/usr/bin/mozilla的ACL,從而獲得了在/tmp目錄的權限。而如果用戶直接執行/usr/bin/mozilla-bin,由於訪問限制,進行不能在/tmp執行。      我們看到,i模式只能用於ACL對象,因為它涉及到對主題進程ACL的繼承。由於對象可以使文件或者能力,/usr/bin/mozilla的ACL可以是這樣的:    /usr/bin/mozilla {   /usr/bin/mozilla-bin rxi   /tmp rwxo   +CAP_SYS_RESOURCE i  }           有關能力繼承的操作也有些不同。因為在一個文件對象上的繼承,造成被執行的文件繼承主題ACL的所有對象,包括主題ACL的能力。而如果為能力對象設置了i模式,會造成所有可執行文件繼承主題的能力。因此,如果/usr/bin/mozilla腳本會執行/bin/hostname和/usr/bin/mozilla-bin兩個程序,而你只要/usr/bin/bin/mozilla-bin繼承CAP_SYS_RESOURCE能力,你應該使用如下設置:    /usr/bin/mozilla {   /usr/bin/mozilla-bin rxi   /tmp rwxo   +CAP_SYS_RESOURCE  }           最後,還要注意一個問題,只有應用程序是通過fork()系統調用接著執行exec系統調用,或者只執行exec系統調用時,i模式才能達到期望的效果。如果應用程序是通過system()系統調用執行程序,你將不會得到自己想要得結果,因為應用程序首先要執行一個shell,由shell在執行你需要執行的程序。    5.配置文件的匹配流程      為了能夠理解如何編寫正確的ACL配置文件,你需要理解grsecurity ACL系統是如何匹配指定的配置文件的。下圖是一個ACL匹配的流程圖。其中亮藍方框表示用戶的行為;亮綠方框表示內核的行為。綠色箭頭表示一個成功的操作;紅色箭頭表示一個失敗的操作:     從圖中你可以看到,為了建立一個對給定配置文件的匹配,grsecurity會順著父目錄向下搜索知道發現對指定目錄的ACL對象。對象的匹配是按照首次匹配的原則,也就是grsecurity使用首先發現的ACL對象作為對指定目錄的ACL。而訪問一個文件的權限不倚賴於對文件父目錄的訪問權限。        






Copyright © Linux教程網 All Rights Reserved