Linux核心中的強制存取控制系統

來源:互聯網
上載者:User

Linux核心中的強制存取控制系統

AppArmor
因為最近在研究OJ(oline judge)背景安全模組的實現,所以一直在研究Linux下沙箱的東西,同時發現了Apparmor可以提供存取控制。
AppArmor(Application Armor)是Linux核心的一個安全模組,AppArmor允許系統管理員將每個程式與一個安全設定檔關聯,從而限制程式的功能。簡單的說,AppArmor是與SELinux類似的一個存取控制系統,通過它你可以指定程式可以讀、寫或運行哪些檔案,是否可以開啟網路連接埠等。作為對傳統Unix的自主存取控制模組的補充,AppArmor提供了強制存取控制機制,它已經被整合到2.6版本的Linux核心中。
目前Ubuntu已內建了Apparmor, 可以在手冊中獲得相應的資料。文章是從很多英文資料中整理總結出來的,可能會有不準確的地方,請各位見諒。
  www.2cto.com  
一、與程式綁定的存取控制
Apparmor提供的存取控制是與程式綁定的:AppArmor's unique security model is to bind access control attributes to programs rather than to users.假設有一個可執行檔的路徑為/home/lei/demoexe,如果要用Apparmor對其進行存取控制的話,就要建立一個設定檔(後面我再講怎麼寫這個設定檔),檔案名稱為home.lei.demoexe,並把這個設定檔放到Apparmor專門放置設定檔的目錄下(/etc/apparmor.d)。所以每一個可執行檔都是與一個設定檔綁定的,因此如果修改demoexe的檔案名稱的話,設定檔將失效。

二、兩種工作模式
Apparmor有兩種工作模式:enforcement、complain/learning
Enforcement – 在這種模式下,設定檔裡列出的限制條件都會得到執行,並且對於違反這些限制條件的程式會進行日誌記錄。
  www.2cto.com  
Complain – 在這種模式下,設定檔裡的限制條件不會得到執行,Apparmor只是對程式的行為進行記錄。例如程式可以寫一個在設定檔裡註明唯讀檔案,但Apparmor不會對程式的行為進行限制,只是進行記錄。
那既然complain不能限制程式,為什麼還需要這種模式呢,因為——如果某個程式的行為不符合其設定檔的限制,可以將其行為記錄到系統日誌,並且可以根據程式的行為,將日誌轉換成設定檔。
當然我們可以隨時對設定檔進行修改,選擇自己需要的模式。

三、存取控制與資源限制等
Apparmor可以對程式進行多方面的限制,這裡我只介紹自己用到的。
(1)檔案系統的存取控制
Apparmor可以對某一個檔案,或者某一個目錄下的檔案進行存取控制,包括以下幾種訪問模式:
rRead modewWrite mode (mutually exclusive to a)aAppend mode (mutually exclusive to w)kFile locking modelLink modelinkfile->targetLink pair rule (cannot be combined with other access modes) 可讀、可寫、可擴充、可連結等(還有可執行x在表中沒有列出)……
在設定檔中的寫法:
如 /tmp r, (表示可對/tmp目錄下的檔案進行讀取)
注意一點,沒在設定檔中列出的檔案,程式是不能訪問的,這有點像白名單。

(2)資源限制
Apparmor可以提供類似系統調用setrlimit一樣的方式來限制程式可以使用的資源。要限制資源,可在設定檔中這樣寫:set rlimit [resource] <= [value],其resource代表某一種資源,value代表某一個值,
要對程式可以使用的虛擬記憶體做限制時,可以這樣寫:set rlimit as<=1M, (可以使用的虛擬記憶體最大為1M)注意:Apparmor可以對程式要使用多種資源進行限制(fsize,data,stack,core,rss,as,memlock,msgqueue等),但暫不支援對程式可以使用CPU時間進行限制。(現在OJ一般都對ACMer提交的程式的已耗用時間有嚴格的限制,所以要將Apparmor用於OJ後台安全模組,必須自己另外實現對CPU時間的限制。)

(3)訪問網路
Apparmor可以程式是否可以訪問網路進行限制,在設定檔裡的文法是:network [ [domain] [type] [protocol] ]瞭解網路編程的應該知道domain、type和protocol是什麼。
要讓程式可以進行所有的網路操作,只需在設定檔中寫:
network,
要允許程式使用在IPv4下使用TCP協議,可以這樣寫:
network inet tcp,

(4)capability條目Capability statements are simply the word capability followed by the name of the POSIX.1e capability as defined in the capabilities(7) man page.在linux的手冊頁裡面有一個capablities列表,apparmor可以限制程式是否可以進行列表裡的操作,如:
capability setgid,(允許程式進行setgid操作)

四、設定檔的編寫
前面提到,編寫完設定檔後,要把檔案放到/etc/apparmor.d這個目錄下,其實有更方便的方法,直接在命令列裡面用:sudo genprof [filename]就可以為指定的程式建立一個設定檔,並把它放到該目錄。

建立的設定檔內容如下:
  # Last Modified: Fri Feb 1 20:06:09 2013 #include <tunables/global>
  /home/lei/apparmor-helper/demoexe {
  #include <abstractions/base> }
 注意,該檔案預設使用enforcement模式,要修改模式,只需將設定檔改為:
  # Last Modified: Fri Feb 1 20:06:09 2013 #include <tunables/global>
  /home/lei/apparmor-helper/demoexe flags=(complain){
  #include <abstractions/base> }
 紅字前面的部分是檔案的路徑,作用是為這個設定檔綁定某個程式。
  www.2cto.com  
好,那接下來就可以在設定檔中添加相應的內容,在大括弧中加上:  /home/lei/apparmor-helper/data rw,
  set rlimit stack<=1M,
然後再執行命令:sudo /etc/init.d/apparmor reload就可以重新載入設定檔,使設定檔生效。

注意如果設定檔中文法有錯誤的話會載入失敗。
這篇文章只是我在使用apparmor過程中的一點小總結,並不完善,例如設定檔還有很多細節我沒提到,有一些工具可以比較方便地管理設定檔我也沒提到,大家要研究apparmor的話還是要查閱其他更詳細的資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.