centos7的selinux的原理及相關配置

           centos7的selinux的原理及相關配置html


SELinux的全稱是Security Enhanced Linux, 就是安全增強的Linux。在SELinux以前,root帳號可以任意的訪問全部文檔和服務;若是某個文件設爲777,那麼任何用戶均可以訪問甚至刪除;這種方式稱爲DAC(主動訪問機制),很不安全。linux

DAC 自主訪問控制: 用戶根據本身的文件權限來決定對文件的操做,也就是依據文件的own,group,other/r,w,x權限進行限制。Root有最高權限沒法限制。r,w,x權限劃分太粗糙。沒法針對不一樣的進程實現限制。sql

SELinux則是基於MAC(強制訪問機制),簡單的說,就是程序和訪問對象上都有一個安全標籤(即selinux上下文)進行區分,只有對應的標籤才能容許訪問。不然即便權限是777,也是不能訪問的。apache

在SELinux中,訪問控制屬性叫作安全上下文。全部客體(文件、進程間通信通道、套接字、網絡主機等)和主體(進程)都有與其關聯的安全上下文,一個安全上下文由三部分組成:用戶(u)、角色(r)和類型(t)標識符。但咱們最關注的是第三個部分centos

當程序訪問資源時,主體程序必需要經過selinux策略內的規則放行後,就能夠與目標資源進行安全上下文的比對,若比對失敗則沒法存取目標,若比對成功則能夠開始存取目標,最終可否存取目標還要與文件系統的rwx權限的設定有關。因此啓用了selinux後出現權限不符的狀況時,你就得一步一步的分析可能的問題了。瀏覽器

以上簡單瞭解便可,下面的是要重點掌握的安全

.selinux的狀態查看與配置
服務器

    Selinux的配置文件位置:/etc/selinux/config,它還有個連接在/etc/sysconfig/selinux網絡

使用config文件來配置selinux(經過配置文件修改selinux的狀態屬於永久修改,要重啓系統才生效)ide

   查看selinux的配置文件/etc/selinux/config 或者他的連接文件 /etc/sysconfig/selinux/

wKiom1kcBeDwOW1lAAL4mMLGOeM922.jpg

  經過配置文件修改的selinux的狀態屬於永久修改,要從新啓動服務才能生效

  wKioL1kcBgCykzjZAAuL6Jonc5M852.jpg

SELINUX=enforcing
#此項定義selinux狀態。
#enforcing—是強制模式系統受selinux保護。就是你違反了策略,你就沒法繼續操做下去
#permissive—是提示模式系統不會受到selinux保護,只是收到警告信息。
permissive就是Selinux有效,可是即便你違反了策略的話它讓你繼續操做,可是把你的違反的內容記錄下來(警告信息)
#disabled—禁用selinux。
SELINUXTYPE=targeted
#此項定義selinux使用哪一個策略模塊保護系統。targeted只對apache ,sendmail,bind,postgresql,nfs,cifs等網絡服務保護。

以上策略配置都放置在/etc/selinux目錄中,目錄和策略名稱相同


1.使用selinux的相關命令查看和修改狀態:(屬於當即生效但臨時性的

a、sestatus 查詢selinux工做狀態

wKiom1kcBlvCi64RAAY3nJIskvQ035.jpg

b、selinuxenabled檢查selinux是否開啓,配合echo $?.傳回值是0爲開啓,1爲關閉.

wKiom1kcBnHjFUVCAAKXOObTH6w853.jpg

c、getenforce查看selinux的狀態

wKiom1kcBoDDPw7hAAF0WDwofbY638.jpg

d、setenforce設定selinux運行狀態,1開啓(Enforcing),0關閉(Permissive)

wKiom1kcBpnza8eVAAGOWNGhz_4511.jpg

二、查看安全上下文相關命令

a.查看文件上下文能夠經過ls -Z

wKioL1kcBrLRbEKdAAH4IFwiumg918.jpg

b.查看進程上下文可使用ps Z

wKioL1kcBr7DB6YBAAMOQFEW7es520.jpg

c.查看用戶上下文能夠用id –Z

wKioL1kcBs-gdtqaAAGGsCEEcJ8064.jpg

安全上下文以用戶:角色:類型(域)標識符的形式出現.(這裏的用戶指的是selinu用戶)


 

三、如下是複製和移動文件時安全上下文的變化:


以httpd爲例,這個httpd的進程能夠訪問/var/www/html下的文檔對象在一個直接建立到網站的根目錄下,另外一個建立在root下,而後用mv命令移動到網站的

wKioL1kcBvDTkjB4AAKT_C7BW_4135.jpg

查看html目錄下文件的安全上下文

wKioL1kcBwCRNxllAANz-DQ81F8412.jpg

經過上圖能夠看到剪切操做時文件的上下文沒有發生改變,仍然是原上下文,而複製操做時文件的上文繼承了目標目錄的上下文。經過瀏覽器訪問這兩個網頁文件

wKiom1kcBxbDuw5qAAbzFP8V1SE333.jpgwKioL1kcBzehhLZEAAltKJrSqlA317.jpg

能夠看到lala.html頁面能訪問而haha.html卻被拒絕訪問

查看權限發現apache用戶對這兩個文件都具備r權限,但haha.html文件卻拒絕訪問。

wKiom1kcB3ajnAZsAAMIMJ0EiWc710.jpg

緣由就是由於httpd進程不能訪問域類型標籤是admin_home_t的資源,被selinux將訪問拒絕了。

查看日誌/var/log/audit/audit.log 經過日誌記錄也能看到haha.html文件拒絕httpd進程訪問。


wKiom1kcB4WiOU-5AAO3IKvrdfQ892.jpg因爲此文件記錄的信息不少不宜直接查看,能夠藉助audit2why和audit2allow

#audit2why</var/log/audit/audit.log

wKioL1kcB_Sgzs5uAAqb_Ln29dM174.jpg

注:提供audit2why和audit2allow工具軟件包

wKiom1kcCBLhGKQ8AALDCD9dgiI919.jpg

收集Selinux產生的日誌,另外一個工具是setroubleshoot,對應的軟件包爲

wKiom1kcCCqy9R5tAAHpgKdS180027.jpg

Setroubleshoot將錯誤信息寫入/var/log/messages

#tail/var/log/messages | grep setroubleshoot

wKiom1kcCEaA1SIOAAsfUCBG70E300.jpg

上面的錯誤信息大概說的是」selinux阻止httpd訪問這個文件,要查看完整的信息,請執行sealert命令」

wKioL1kcCF7hCeRhAAFX0PXTlts400.jpg 

能夠用sesearch [--allow] [-s 主體類別] [-t 目標類別] [-b]查詢詳細規則

sesearch命令由下列軟件包提供

 wKiom1kcCG_jTRPjAAMuvKvBSaY387.jpg

找出目標資源類別爲httpd_sys_content_t的相關信息

 wKioL1kcCIOAd51PAAFljPgYtPQ798.jpg

wKioL1kcCLSCpdBCAAlCONUlrlk668.jpg

 

從上圖顯示信息表示[allow 主體程序安全上下文類別 目標資源安全上下文類別],說明這個資源類別能夠被哪一個主體程序類別所讀取。

找出主體程序爲httpd_t相關的全部信息

 

wKiom1kcCOXRKwF2AAHKEPt8d6Y837.jpg


 

從上面的數據就能夠看出程序httpd_t爲個類別能夠訪問的哪些資源類別。

如何解決上述問題呢?解決方法就是更改test2.html文件的上下文。有兩種方式,一種是經過restorerecon( restore context) 修復繼承當前目錄默認的上下文;一種是經過chcon (change context) 修改當前的上下文。

a.使用restorerecon( restore context) 修復繼承當前目錄默認的上下文

分兩步實現:

首先爲 /var/www/html 這個目錄下的全部文件添加默認標籤類型:

semanagefcontext  -a  -t httpd_sys_content_t  '/var/www/html(/.*)?' 

由於html目錄的默認標籤類型就是httpd_sys_content_t,因此此步能夠省略

而後用新的標籤類型標註已有文件:

restorecon -Rv /var/www/html/, 以後httpd就能夠訪問該目錄下的文件了。

wKiom1kcCObTSXr2AAPMLH7wM-U974.jpg

wKiom1kcCRTyM4SEAAhLGHyI0pI428.jpg

semanage和restorecon命令是由下列軟件包提供的

 wKiom1kcCVGRop27AANYHIOuWQo491.jpg

b.使用chcon (change context) 修改當前的上下文

 wKioL1kcCWjwDHpjAAGaJK8jsmo727.jpg

注:

chcon意思是change context 

    -t type 類型

    -R recursive 遞歸(特別適用於改變某個目錄下全部文件的context) 

    -u user 

    -r role

 

--reference表示用lala.html文件的上下文修改haha.html文件的上下文。

wKioL1kcCZex2mKhAAIlgCvHUjI966.jpg

最後再看一個概念,SELinux的布爾值。這個布爾值相似一個開關,打開的話,他對應的一些服務就容許執行,不然的話就拒絕執行。

看看有哪些布爾值

 wKioL1kcCaviWq6WAAEMWLQanrQ196.jpgwKioL1kcCb_SVmPLAARu-FP4HTU330.jpg

也可用semanage命令#semanageboolean –l

知道了布爾值的名字,能夠經過sesearch 來確認他關聯了哪些服務的域,好比httpd_enable_homedir容許下列規則,若是設置爲off的話,那麼他們都是沒法訪問的。

 wKioL1kcCfDAnzRuAAGLtLQ4lHk086.jpgwKioL1kcCgThPPwhAAdLDJJ_kFw484.jpg

設置boolean值,-P爲設置永久生效.

#setsebool [-P] 布爾值  on/off

下面看一個與布爾值有關的例子

確認已經啓用了 Selinux、啓動 FTP:

 wKiom1kcCiaSvqdjAAjW3Bp7yeo191.jpg

在匿名訪問目錄下建立 2 個文件進行測試,一個是在該目錄下手動建立,這樣

該文件會自動繼承/var/ftp/pub 下的目錄上下文的值,一個用 mv 命令從 root 目錄下移

動過來,這樣的文件會保留 root 目錄下的安全上下文,以下

 wKiom1kcCkHw967mAAYkIFpVlF8334.jpg

使用匿名登陸測試:

 wKioL1kcClqBSbCJAA4HYM5b6vI016.jpg

發現這裏看不到haha 文件

已知系統啓動了 Selinux,先查看系統日誌,有兩個工具能夠收集到 Selinux 產生的

日誌,一個是 setroubleshoot,一個是 audit,先使用 audit 工具,使用方法

以下:

系統中提供了 audit 相關的命令,經常使用的有 audit2why 和 audit2allow,audit 產生的日誌

放在/var/log/audit, 因爲此文件記錄的信息不少不宜直接查看,能夠藉助 audit2why

命令,首先啓動 audit

在客戶端登陸 FTP 服務器時會出發 audit deamon 產生日誌:

 wKiom1kcCoeBri1ZAAEBmPB8_6Q936.jpgwKiom1kcCp_hPX4XAAxRgLLwSWE748.jpgwKioL1kcCsHy7CS3AAvzmGEOqE0572.jpg

 

AVC 是 access vector cache 的縮寫, 目的是記錄全部與 SELinux 有關的存取統計資料。

根據日誌中的建議,使用 audit2allow 命令查看給出的建議以下:

 

 

驗證布爾值中有關 FTP 的定義

 wKiom1kcCumQ0I9ZAAowOMV1b0E005.jpg

發現ftp_home_dir --> off,文件 root.txt 的類型恰好是 root:object_r:user_home_t:s0

因此更改此 bool 值就能夠

 

wKiom1kcCwDA0lAnAAHU-FTNfKs364.jpg

wKioL1kcCwHxKfcDAAF4SOh635Q925.jpg

wKioL1kcCxDj7SoLAAwIkATGMnY467.jpg

(-P 是把該修改寫到文件,下次啓動仍然有效)

客戶端登陸測試,發現 haha 文件就能夠訪問了

總結一下,若是搭配了某個服務器,而後客戶端沒法正常訪問,應該按照下面的順序進行排錯:

1.該服務的配置文件中是否開啓了相關的權限 ,好比是否容許匿名用戶寫入等等;

2.文件系統的權限,好比是否須要使用chmod修改權限

3.SELinux的上下文和布爾值

相關文章
相關標籤/搜索