中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何應用SELinux中的目標策略限制進程運行

發布時間:2021-10-21 18:14:41 來源:億速云 閱讀:169 作者:柒染 欄目:云計算

如何應用SELinux中的目標策略限制進程運行,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

一、安裝SELinux相關的安裝包

雖然在有的Linux發行套件中已經缺省安裝了SELinux(例如Fedora 10和Red Hat Enterprise Linux 5、6),然而用戶還是需要了解具體安裝SELinux所需要的安裝包,下面對他們進行簡要介紹,主要包括如下幾個部分:

Policycoreutils:提供與SELinux相關的命令,比如semanage,restorecon,audit2allow,semodule,load_policy,以及setsebool等,來操作和管理SELinux。

Policycoreutils-gui:提供圖形化的工具system-config-selinux來管理SELinux。

Selinux-policy:提供SeLinux應用策略。該應用策略包括了所有的SELinux策略,并作為其他諸如目標策略(targeted policy)的基礎使用。

Selinux-policy-policy:提供SELinux策略。對于目標策略,安裝selinux-policy-targeted包,對于MLS策略,則安裝selinux-policy-mls包。需要說明的是:在Fedora 8中,strict策略與目標策略結合在一起。

Setroubleshoot-server:翻譯SELinux拒絕操作信息,成為sealert軟件可以查看的詳細描述信息。

Setools,setools-gui和setools-console:這些安裝包提供了與SELinux有關的策略分析和檢索、審計日志監控、文件上下文管理等命令和工具。

Libselinux-utils:提供諸如avsstat,getenforce,getsebool,matchpathcon,selinuxconlist,selinuxdefcon,selinuxenabled,setenforce,togglesebools等工具。

Mcstrans:提供對SELinux上下文中級別(比如s0-s0:c0.c1023)信息的翻譯工作,在缺省情況下該軟件包不安裝。

二、使用與SELinux有關的日志文件

SELinux有許多相關的日志文件來記錄在運行過程中對操作的拒絕日志,以便用戶在后續過程中進行審計評估。在缺省情況下,SELinux將拒絕日志寫入到/var/log/audit/audit.log文件中,該文件的部分內容顯示如圖1所示:

圖1 /var/log/audit/audit.log文件的部分內容顯示

另外,如果setroubleshooted運行的話,在/var/log/audit/audit.log中的記錄將被翻譯成容易理解和閱讀的方式,保存在/var/log/messages文件中:

圖2  var/log/messages文件的部分輸出

當然,拒絕信息被送到不同的地方,這要根據不同的守護進程而定表1列出了對應于不同的守護進程的日志文件的路徑:

表1 SELinux日志文件列表

守護進程      

日志文件      

auditd on      

/var/log/audit/audit.log      

Auditd off; rsyslogd on      

/var/log/messages      

Setroubleshootd, rsylogd, auditd on      

/var/log/audit/audit.log翻譯后存入/var/log/messages      

為了啟動上述的守護進程,需要來分別配置auditd,rsyslogd以及setroubleshootd來使他們在系統啟動時自動運行,可以以root身份運行下述命令:

#/sbin/chkconfig -levels 2345 auditd on
#/sbin/chkconfig -levels 2345 rsyslogd on
#/sbin/chkconfig -levels 2345 setroubleshootd on

并且,可以使用如下命令檢查這些守護進程是否正常運行:

#/sbin/service auditd status
#/sbin/service rsyslogd status
#/sbin/service setroubleshootd status

三、啟動和禁用SELinux

啟動和禁用SELinux的步驟非常簡單,只需要修改其配置文件,然后執行重啟即可。以下是啟動SELinux的詳細步驟:

(1)編輯配置文件

根據上面的介紹,編輯確定SELinux的運行模式和活動策略(見下面配置文件中的黑體部分)即可:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#   targeted - Targeted processes are protected.
#   mls - Multi Level Security protection.
SELINUXTYPE=targeted

(2)使用getenforce命令和sestatus命令查看SELinux的運行模式和詳細上下文信息:

#/usr/sbin/getenforce
#/usr/sbin/sestatus

(3)使用root用戶身份重啟系統即可:

#reboot

同理,禁用SELinux的詳細步驟如下:

(1) 編輯配置文件

根據上面的介紹,編輯確定SELinux的運行模式和活動策略(見下面配置文件中的黑體部分)即可

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=diabled
# SELINUXTYPE= can take one of these two values:
#   targeted - Targeted processes are protected.
#   mls - Multi Level Security protection.
SELINUXTYPE=targeted

(2) 使用getenforce命令和sestatus命令查看SELinux的運行模式和詳細上下文信息

#/usr/sbin/getenforce
#/usr/sbin/sestatus

(3) 使用root用戶身份重啟系統即可

#reboot

四、目標策略原理

Targeted策略是從strict示例策略衍生而來的,它的結構和組織幾乎是一樣的,但strict策略更趨向于最大化使用SELinux所有特性,為大部分程序提供強壯的安全保護,而targeted策略的目標是隔離高風險程序,使用targeted策略的好處是一方面可以向Linux系統添加大量的安全保護,同時又盡量少影響現有的用戶程序,targeted策略主要集中于面向網絡的服務(即那些暴露在外任意遭受******的組件),targeted策略是RHEL和Fedora系統上標準的策略,因為它在增強安全性和減少對現有應用程序影響之間達到了一個很好的平衡。

如果安裝了targeted示例策略,可以在/etc/selinux/targeted/src/policy/目錄下看到它的源文件,從各個方面來看,targeted示例策略源與strict示例源都非常相似。

Targeted示例策略和strict示例策略之間主要的差異是使用了無限制的域類型unconfined_t,并移除了所有其他用戶域類型,如sysadm_t和user_t,這也意味著基本的角色結構也被移除了,所有用戶都以角色system_r運行,幾乎所有的用戶運行的程序都以unconfined_t域類型執行。當然,無限制域和限制域都需要接受可執行和可寫的內存檢查。在默認情況下,運行在無限制域下的主體不能分配可寫和可執行的內存,這個機制降低了系統遭受緩沖區溢出***(buffer overflow attack)的風險。當然,這些內存檢查可以通過設置下面需要詳細介紹的布爾變量來關掉,它使得SELinux策略可以在運行時得到修改。

用戶可以在./domain/unconfined.te中找到unconfined域定義,注意在targeted示例策略中,strict策略文件admin.te和user.te不再位于./domains/目錄下,這些文件為strict示例策略定義了各種各樣的用戶域,每一個都具有受限的特權,在targeted示例策略中,所有程序都以unconfined_t域類型運行,除非它們都明確地指定了域類型(因此稱其為targeted),本質上unconfined域可以訪問所有的SELinux類型,使它免除SELinux安全控制(因此成為unconfined)。在strict示例策略中,./domains/program/包括許多策略模塊,每個模塊代表一個或多個域類型和關聯的類型,以及為特定程序制定的規則。在targeted示例策略中,這個目錄包括的文件要少得多,這些就是目標。

目標示例策略模塊與strict策略中策略模塊類似,例如:strict ping模塊和targeted ping模塊是一致的,但有部分targeted模塊只是簡單地定義類型使域不受限制(不是targeted),例如:如果查看crond的targeted策略(crond.te),會發現有一行unconfined_domain(crond_t)。這個宏在targeted示例中定義在./policy/macros/global_macros.te文件中,它將crond域類型提供了所有SELinux訪問權,使得它不受限制,如果用戶將其域strict版本(/etc/selinux/strict/src/policy/domains/program/crond.te)crond模塊進行比較,會看到它們之間有很大的差異,在targeted策略中,crond被認為是不受限制的域,但在這兩個策略中ping卻保留是strict域。

五、應用目標策略限制進程運行

幾乎所有的服務進程都在限制下運行。并且,大多數以root身份運行的系統進程(比如說passwd進程)都是受限制域性的。當進程受限制時,它只能在自己限制的域內運行,例如Web服務進程httpd只能運行在httpd_t域內。如果一個受限制的進程被******并控制了,根據SELinux策略配置,這個***也僅僅只能訪問這個受限制的域,因此***所帶來的危害也比傳統的Linux小了很多。

以下通過一個具體的限制進程的例子(RHEL或者Fedora系統中的例子)來說明SELinux是如何將進程限制在自己的域內運行的。這個例子以用戶非常熟悉且常用的Apache服務器中的httpd進程為例,來介紹SELinux是如何阻止httpd進程來訪問由其他域管理的文件類型的。

(1)運行sestatus命令來確認Linux中SELinux是運行的,它運行在enforcing模式下,該模式可以簡單理解為SELinux的完全運行模式,它可以進行強制訪問控制),且確保采用了目標策略。

圖1  使用sestatus確認SELinux是否運行

上述運行結果表明SELinux運行在enforcing模式下,且采用了目標策略。

(2)采用Linux中的root用戶權限,使用如下命令在httpd的工作目錄中創建一個新的文件:

#touch /var/www/html/testfile

(3)運行如下命令來查看該文件的SELinux上下文信息:

# ls -Z /var/www/html/testfile-rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfile

從上述結果可以清楚地看到:在默認情況下,Linux用戶是非限制的,因此剛創建的testfile文件的SELinux上下文中的類型標記為unconfined_u。RBAC訪問控制機制是用于進程的,不是用于文件。并且,角色對于文件來說也沒有什么太大的含義,因此上述結果中的object_r角色也僅僅是一個用于文件的通用角色。在/proc目錄下,與進程相關的文件可以采用system_r角色。另外,結果中的httpd_sys_content_t類型允許httpd進程訪問該文件。

(4)以Linux的root用戶身份,運行下述命令來運行httpd進程。

圖2  成功啟動httpd進程

(5)切換到一個Linux用戶具有權限的目錄下,運行如下命令,圖3所示結果為該命令能夠正確的執行并下載文件。

圖3  wget正確執行并下載文件

(6)使用chcon命令來對文件的類型進行重新標識。然而,這樣的標識不是永久性的修改,一旦系統重啟,該標識就會改變回去。對于文件類型的永久性改變,需要采用semanage命令,這個命令在后面將進行詳細介紹。下面,以root用戶的身份,運行圖4所示chcon命令來將上面步驟中創建的testfile文件的類型改為由Samba進程使用的文件;然后,運行ls -z /var/www/html/testfile命令來查看改變的結果。

圖4  chcon命令運行結果

(7)在傳統的Linux中httpd進程可以訪問testfile文件,下面需要嘗試一下在SELinux中,該進程是否能夠成功訪問testfile文件。如步驟(5)所示,再次運行該命令進行文件下載工作,發現命令運行失敗,文件沒有權限下載,運行結果。

圖6  wget命令執行失敗

通過上述7個步驟的詳細演示可以得知:雖然傳統的Linux的DAC機制允許httpd進程訪問testfile文件,然而SELinux的MAC機制卻拒絕該訪問操作。原因在于:該文件的類型(samba_share_t)httpd進程不能訪問,因此SELinux拒絕了該操作。同時,SELinux對這些操作日志進行了詳細的記載,以方便系統管理員事后進行審計和處理,可以查看/var/log/messages文件。

圖7  /var/log/messages文件圖示

另外,相關的錯誤日志也可以查看/var/log/audit/audit.log文件,如圖8所示:

type=AVC msg=audit(1241564654.246:26): avc: denied { getattr } for pid

并且,由于該操作牽涉到httpd服務進程,由于該服務也有自己的日志文件,因此,也可以通過/var/log/httpd/error_log文件進行查看。

看完上述內容,你們掌握如何應用SELinux中的目標策略限制進程運行的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博客| 峨眉山市| 松江区| 平泉县| 江山市| 巴彦淖尔市| 商洛市| 剑阁县| 南涧| 营山县| 宁都县| 南宫市| 江都市| 凯里市| 建阳市| 乡城县| 锡林浩特市| 长武县| 仪征市| 永康市| 灵宝市| 宜良县| 绥阳县| 比如县| 邢台县| 府谷县| 商洛市| 高青县| 包头市| 清原| 增城市| 泾阳县| 漳州市| 永泰县| 丰台区| 武定县| 湘乡市| 呼玛县| 洞口县| 琼中| 当涂县|