centos7 selinux

selinuxhtml

http://hongge.blog.51cto.com/linux

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

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

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

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

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

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

一、Selinux狀態查看與配置:ide

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

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

clip_image002

文件內容以下圖:

clip_image004

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

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

使用selinux相關命令查看和修改狀態:(屬於當即生效但臨時性的)
a、sestatus 查詢selinux工做狀態

clip_image005

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

c、getenforce查看selinux的狀態

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

clip_image008

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

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

clip_image010

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

clip_image012

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

clip_image013

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

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

以httpd爲例,這個httpd的進程能夠訪問/var/www/html下的文檔對象

在/root目錄下建立兩個測試頁文件(如test1.html、test2.html)

clip_image015

複製test1.html文件到/var/www/html目錄下,剪切test2.html文件到/var/www/html目錄下

clip_image016

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

clip_image018

經過上圖能夠看到剪切操做時文件的上下文沒有發生改變,仍然是原上下文,而複製操做時文件的上下文繼承了目標目錄的上下文。

經過瀏覽器訪問這兩個網頁文件

clip_image019

clip_image020

能夠看到test1.html頁面能訪問而test2.html卻被拒絕訪問

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

clip_image021

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

查看日誌/var/log/audit/audit.log

clip_image022

經過日誌記錄也能看到test2.html文件拒絕httpd進程訪問。

clip_image024

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

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

clip_image026

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

clip_image027

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

clip_image028

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

#tail /var/log/messages | grep setroubleshoot

clip_image030

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

clip_image031

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

sesearch命令由下列軟件包提供

clip_image032

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

clip_image033

clip_image035

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

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

clip_image036

clip_image038

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

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

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

分兩步實現:

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

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

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

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

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

clip_image040

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

clip_image041

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

clip_image042

注:

chcon 意思是change context
    -t type 類型
    -R recursive 遞歸(特別適用於改變某個目錄下全部文件的context)
    -u user
    -r role

clip_image044

--reference表示用test1.html文件的上下文修改test2.html文件的上下文。

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

看看有哪些布爾值

clip_image045

也可用semanage命令#semanage boolean –l

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

clip_image047

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

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

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

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

clip_image049

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

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

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

clip_image051

使用匿名登陸測試:

clip_image053

發現這裏看不到 root.txt 文件

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

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

以下:

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

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

命令,首先啓動 audit

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

clip_image054

clip_image056

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

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

clip_image057

clip_image058

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

clip_image059

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

因此更改此 bool 值就能夠

clip_image060

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

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

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

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

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

3.SELinux的上下文和布爾值

http://hongge.blog.51cto.com/

相關文章
相關標籤/搜索