国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

簡簡單單創建SELinux策略
2008-03-12   

SELinux并不是象許多人想的那樣難以管理。現代Linux發行版都裝載了許許多多的安全特性和工具,大部分重要的特性都被添加到內核中去了,如SELinux。

SELinux在安全方面解決了許多具有挑戰性的問題,如何控制信任用戶或進程,信任用戶,如在*nix域的root用戶,可以無限制地訪問系統,而這個賬號應該只有系統管理員可用,但是,這會引起一個問題,如果root本身被黑會發生什么,讓黑客可以完全控制整個系統,惡意用戶不是唯一的問題,錯誤配置一個安全工具,如iptables,導致隱藏極深難以發現的問題,除此之外,假設在你服務器上運行的服務有一個安全漏洞被發現,而且補丁還沒有發布出來,假如這樣,你的系統就很脆弱,SELinux通過在內核中實施強制訪問控制(MAC)來解決了這些安全問題,SELinux基于Flask安全框架,本文不打算討論Flask框架,在互聯網上可以找到有關它的優秀文檔。

為了理解強制訪問控制,我們必須討論一下目前部署的叫做任意訪問控制(DAC)的安全模塊,在一個DAC系統上,對對象的訪問受限于它們的類別,這種類型的控制是任意的,一個主體擁有訪問權限后它可以將這個權限指派給其它用戶,例如:有相同訪問權限的用戶登陸后,都可以訪問你運行的任何程序,而權限又是另外一個用戶設置的(如root)。

任何特殊的權限(讀、寫、執行等)都可以被看做一個二維圖,用戶在一個軸而對象在另外一個軸上,本質上,DAC系統檢查存儲的信息目前憑證的有效性。

如前面提到的,SELinux安全模塊是強制訪問控制或MAC,這是一個不同的訪問控制方法,DAC安全模塊是基于認證的,而MAC系統依賴授權,不僅針對用戶而且系統載入的對象。

MAC系統單獨控制對象并且決定基于安全策略的對象權限和/或許可,安全策略定義了對象應該授予的權限,以不同變量為基礎來進行定義。

影響計算機操作的任意訪問控制的一個例子是一個Python腳本,如果腳本允許一個外部的實體在DAC計算機系統上插入并執行惡意代碼,惡意代碼就具有與執行的代碼相同的訪問權限,即與那個Python腳本權限一樣。

一個MAC系統能限制某個特定進程的權限,僅允許它對需要的資源進行正常操作,一個Python腳本可能會創建一個進程(也可能被禁止),但是這個進程不具有與創建它的進程相同的權限,因此,MAC更安全。

簡述SELinux的本質

在SELinux下,安全策略配置是用m4語言在一個文本文件中定義的,在安全策略定稿后被編譯,在系統啟動時載入內存,只有安全服務器能決定一個對象的權限。

安全策略的執行是由一個叫做對象管理器的組件完成的,它從客戶端對象接收請求,向安全服務器條件查詢并強制實施查詢結果。

安全服務器的SELinux實施使用了2個安全范例的組合,它們叫做類型增強(TE)和基于角色的訪問控制(RBAC)。

類型增強

類型增強做出的安全決定基于對象請求的許可種類,例如:對象類型可能包括一個常規文件、一個目錄、一個進程或一個套接字,類型增強是一個對象標記系統,與訪問映射一起(對象請求許可的域和對象請求的類型),返回一個對象許可動作的定義。

基于角色的訪問控制

基于角色的訪問控制在一個基于角色的計算機系統上指出對對象的許可,在實踐中,這意味著一個進程應該基于它父進程的許可。

進程、文件系統對象和套接字是如何與其他通訊的?這個在安全策略中有定義,特別地,安全策略與其他特定規則一起管理不同類型和角色之間是如何交互的。

目前,SELinux提供與已有應用程序二進制兼容性,與內核模塊具有源代碼兼容性,目前SELinux的實現是基于x86架構的。

獲取并安裝SELinux

如今SELinux已經包括在多數發行版中,即使在主發行版里沒有,一般也會提供特殊的安裝包,源代碼可以在http://www.nsa.gov/selinux/code/download0.cfm找到。

安裝seedit

seedit是一個基于webmin的用戶界面友好的工具,它允許管理員從一個web瀏覽器來管理SELinux策略,seedit允許用戶執行通過用m4語言在一個點和點擊環境中手動編寫的腳本中指定的每一個操作。可以在http://seedit.sourceforge.net/找到它。

一旦安裝好后,SELinux策略被定義在$SELINUX/(seedit-something)/policy/policy.conf文件中($SELINUX是你安裝SELinux的根目錄—通常是/etc/selinux/)。

讓我們先來熟悉一下seedit的接口,打開一個瀏覽器,定位到http://localhost:10000,然后轉到系統-->SELinux配置小節。

你將看到6個標記為配置ACL、定義域轉換、定義用戶角色之間的關系、創建新域/角色、刪除域/角色和升級配置圖標。

配置ACL

實際上你可以在這里定義幾乎所有系統中對象的訪問控制,包括對目錄下的所有文件設置允許/不允許讀、寫或執行,或對單獨的文件進行設置以及允許/不允許訪問網絡,在這一小節,你也可以定義應用程序工作要用的端口,我們給Apache指定80端口,圖個它從81端口啟動,SELinux將終結這個進程。

IPC訪問控制也可以在這一小節定義,你可以定義這個特定應用程序使用哪種IPC機制,并定義哪個應用程序能與其進行通訊。

在這一小節還可以定義其他訪問控制包括許多管理的訪問控制,如內核通訊權限、SELinux操作、進程信息檢索等等。

定義域轉換

在域轉換小節,你可以定義哪個進程能生成當前的應用程序,例如:默認情況下,seedit策略為MySQL定義域轉換:kernelinitmysqld,這意味著內核能啟動init,init能啟動MySQL后臺進程,如果應用程序有一個后臺進程,域轉換應該被定義或者后臺進程將永遠不啟動。因此在這一小節,用戶可以定義域轉換,修改已有的或移除它們。

定義用戶和角色之間的關系

角色是指某個對象(如用戶)在系統上擁有的權限,例如:可能有一個角色允許訪問系統里的所有文件,因此,在這一小節,用戶可以在系統上將角色與特定用戶關聯起來。

下面的兩小節是不需要加以說明的,它們允許你定義一個新的域/角色和移除一個域/角色,定義一個域/角色是為一個新應用程序或用戶添加訪問控制的第一步。

最好一小節是升級配置,它允許用戶升級策略、重新編譯以及重新載入。

seedit附帶了許多預設的策略,覆蓋了Linux系統每一個流行的服務/后臺進程—從內核到MySQL后臺進程。

為一個后臺應用程序定義一個新的策略

為一個后臺應用程序定義一個SELinux策略是一個反復的過程,第一步是在SELinux中注冊后臺進程,在seedit webmin接口上申明一個域/角色,前面已經說過了,域約定用_t結束,角色定義用_r結束,因此,應該有一個角色如admin_r,一個域如mysqld_t。

定義域轉換是另外一個重要步驟,這里你必須允許后臺進程的父進程生成相關的子進程,通常,如果后臺進程在啟動時激活,你需要定義一個從init到子進程的域轉換。

給后臺進程定義初始化訪問控制列表,目前,當后臺進程初始化安裝后,為用戶定義一個詳盡的ACL是不可能的,通常是通過初始化ACL列表定義完成的,但它有很大的局限,每當應用程序訪問一個對象時不被允許,產生一條訪問違規的消息,存儲在/var/log/messages中,當你使用這個后臺進程時,SELinux將報告一些違規信息,我們嘗試為一個叫做foobar的后臺進程編寫規則,違規消息就象下面這樣:

|avc: denied { write } for pid=7279 exe=/usr/bin/foobar comm=ifup
name=dhclient-eth0.conf dev=hda12 ino=57400
scontext=system_u:system_r:foobar_t tcontext=system_u:object_r:etc_t
tclass=file

從這個違規消息來看我們的應用程序嘗試在dhclient-eth0.conf文件上進行寫入操作,可以通過授予應用程序寫入dhclient-eth0.conf文件的權限來消除這個違規信息,這個違規可以通過轉到配置ACL小節被解決,在文件ACL小節下,瀏覽到這個文件放置的位置,給應用程序foobar寫入權限。

另一個違規看起來可能是這樣的:

|avc: denied { create } for pid=7279 exe=/usr/bin/foobar
scontext=root:system_r:foobar_t tcontext=root:system_r:foobar_t\
tclass=udp_socket

這個違規報告指出應用程序嘗試創建一個UDP套接字,但是被拒絕了。要移除這個違規信息,我們只需要簡單地將網絡特征添加到foobar_t域的訪問控制,通過轉到配置ACL小節/網絡ACL小節來完成,為域foobar_t選項允許網絡。

所有訪問違規都可以在seedit webmin接口下的配置ACL小節來得到處理。

在每個策略升級后,通過seedit webmin接口升級策略選項重新載入,然后重新啟動后臺進程,發生其他違規時,再次升級它,直到你幾乎看到違規消息為止。

在audit2alow工具的幫助下有其他辦法為一個應用程序產生訪問規則,但是使用它能產生規則,也能產生安全問題,通常你還需要重新清理一篇這些規則。

當創建或升級策略時,確保你已經設置SELinux為許可模式,SELinux有3個模式:強制、禁止、許可。在強制模式下,所有訪問控制嚴格按照定義的策略執行的,在許可模式下,策略不是強制的,但是當任何違背策略的操作發生時都會生成一條違規消息,禁止模式完全禁用了SELinux。


熱詞搜索:

上一篇:Forefront構建從外到內的企業安全
下一篇:人人都可以使用的Linux防火墻(1)

分享到: 收藏
主站蜘蛛池模板: 德化县| 龙胜| 麦盖提县| 衡东县| 公主岭市| 若羌县| 阜平县| 沾化县| 合肥市| 渑池县| 宜黄县| 平安县| 宜阳县| 宁阳县| 元江| 合肥市| 开平市| 额济纳旗| 绵竹市| 巩义市| 贞丰县| 云龙县| 太原市| 乌拉特前旗| 团风县| 三亚市| 蒙阴县| 敦煌市| 山阴县| 酉阳| 天柱县| 绥芬河市| 沈丘县| 高邑县| 台南县| 津南区| 莲花县| 武功县| 辽宁省| 喀什市| 新宾|