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

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

原創(chuàng)
安全 網站安全
Targeted策略是從strict示例策略衍生而來的,它的結構和組織幾乎是一樣的,但strict策略更趨向于最大化使用SELinux所有特性,為大部分程序提供強壯的安全保護,而targeted策略的目標是隔離高風險程序,使用targeted策略的好處是一方面可以向Linux系統(tǒng)添加大量的安全保護...

【51CTO.com 獨家特稿】一、安裝SELinux相關的安裝包

雖然在有的Linux發(fā)行套件中已經缺省安裝了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有關的策略分析和檢索、審計日志監(jiān)控、文件上下文管理等命令和工具。

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

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

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

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

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

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

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

圖2  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來使他們在系統(tǒng)啟動時自動運行,可以以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

#p#

三、啟動和禁用SELinux

啟動和禁用SELinux的步驟非常簡單,只需要修改其配置文件,然后執(zhí)行重啟即可。以下是啟動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用戶身份重啟系統(tǒng)即可:

#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用戶身份重啟系統(tǒng)即可

#reboot

四、目標策略原理

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

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

Targeted示例策略和strict示例策略之間主要的差異是使用了無限制的域類型unconfined_t,并移除了所有其他用戶域類型,如sysadm_t和user_t,這也意味著基本的角色結構也被移除了,所有用戶都以角色system_r運行,幾乎所有的用戶運行的程序都以unconfined_t域類型執(zhí)行。當然,無限制域和限制域都需要接受可執(zhí)行和可寫的內存檢查。在默認情況下,運行在無限制域下的主體不能分配可寫和可執(zhí)行的內存,這個機制降低了系統(tǒng)遭受緩沖區(qū)溢出攻擊(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/包括許多策略模塊,每個模塊代表一個或多個域類型和關聯的類型,以及為特定程序制定的規(guī)則。在targeted示例策略中,這個目錄包括的文件要少得多,這些就是目標。

目標示例策略模塊與strict策略中策略模塊類似,例如:strict ping模塊和targeted ping模塊是一致的,但有部分targeted模塊只是簡單地定義類型使域不受限制(不是targeted),例如:如果查看crond的targeted策略(crond.te),會發(fā)現有一行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域。

#p#

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

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

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

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

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

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

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

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

#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用戶是非限制的,因此剛創(chuàng)建的testfile文件的SELinux上下文中的類型標記為unconfined_u。RBAC訪問控制機制是用于進程的,不是用于文件。并且,角色對于文件來說也沒有什么太大的含義,因此上述結果中的object_r角色也僅僅是一個用于文件的通用角色。在/proc目錄下,與進程相關的文件可以采用system_r角色。另外,結果中的httpd_sys_content_t類型允許httpd進程訪問該文件。

(4)以Linux的root用戶身份,運行下述命令來運行httpd進程,如圖2所示:

圖2  成功啟動httpd進程

圖2  成功啟動httpd進程

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

圖3  wget正確執(zhí)行并下載文件

圖3  wget正確執(zhí)行并下載文件

#p#

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

圖4  chcon命令運行結果

圖4  chcon命令運行結果

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

圖6  wget命令執(zhí)行失敗

圖6  wget命令執(zhí)行失敗

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

圖7  /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

圖8  /var/log/audit/audit.log文件圖示

圖8  /var/log/audit/audit.log文件圖示

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

圖9  /var/log/httpd/error_log文件圖示

圖9  /var/log/httpd/error_log文件圖示

【51CTO.com獨家特稿,非經授權謝絕轉載!合作媒體轉載請注明原文出處及出處!】

責任編輯:佟健 來源: 51CTO.com
相關推薦

2011-10-24 09:49:37

管理非限制進程SELinux

2017-03-23 10:24:33

2011-07-20 14:26:42

組策略USB可移動設備

2011-07-20 16:07:55

組策略

2022-03-17 12:08:40

移動目標防御

2011-03-03 15:30:18

PureFTPd

2022-10-14 16:18:40

MobileNetAndroid端模型訓練

2023-01-30 08:09:18

權限GreatSQL運行

2023-11-09 08:22:38

2011-07-26 16:11:51

2011-07-28 16:27:48

域控制器組策略

2009-11-09 11:21:32

路由策略

2017-03-17 16:10:24

linux進程后臺

2011-08-01 17:47:39

組策略域控制器

2022-05-16 07:31:42

Spring容器應用配置

2011-07-25 17:20:51

組策略本地組策略

2013-08-06 14:07:06

2011-01-26 13:26:32

Linux進程

2009-02-25 16:06:28

2013-05-06 16:36:55

SELinuxSELinux故障
點贊
收藏

51CTO技術棧公眾號