Linux SELinux筆記整理

SELinux(Security Enhanced Linux)

系統資源都是通過進程來讀取更改的,爲了保證系統資源的安全,傳統的Linux使用用戶、文件權限的概念來限制資源的訪問,通過對比進程的發起用戶和文件權限以此來保證系統資源的安全,這是一種自由訪問控制方式(DAC);但是隨着系統資源安全性要求提高,出現了在Linux下的一種安全強化機制(SELinux),該機制爲進程和文件加入了除權限之外更多的限制來增強訪問條件,這種方式爲強制訪問控制(MAC)。這兩種方式最直觀的對比就是,採用傳統DAC,root可以訪問任何文件,而在MAC下,就算是root,也只能訪問設定允許的文件。



目錄

  • SELinux的工作原理

  • 工作模式和工作類型

  • 安全上下文

  • SELinux日誌管理


一、SELinux的工作原理

先說下SELinux下的幾個基本的概念

    主體    # SELinux管理的主體爲進程

    目標    # SELinux通過管理進程,來限制進程訪問的目標,指文件

    工作模式    # 決定SELinux機制的啓動與否

        enforcing ===>強制模式,SELinux已經啓動   

        permissive===>寬容模式,SELinux已經啓動,但不會禁止,只是會提出警告信息

        disabled  ===>關閉模式,關閉SELinux

    工作類型(SELinux type)   # 表示SELinux具體的安全性策略

        strict  ===>每個進程都受限制(僅在centos5)

        targeted===>默認類型爲targeted,主要限制網絡服務

        minimum ===>簡化版的targetd,限制部分網絡服務(centos7)

        mls     ===>多級安全限制,較爲嚴格

    安全上下文(security context)

        這個是我們主要修改的地方,進程必須和文件的安全上下文對應(不是必須一樣)才能對其進行訪問。

        ls -Z 文件名    # 查看文件的安全上下文

        ps -eZ           # 查看進程的安全上下文


sestatus    # 查看SELinux的具體的工作狀態

blob.png


工作原理如下圖:

blob.png


二、工作模式和工作類型

2.1 工作模式

getenforce可以查看當前SELinux的工作模式;setenforce可以修改SELinux的工作模式,不過僅能在permissive和enforcing之間切換

        [root@CentOS6 ~]# setenforce 0|1  分別代表permissive、enforcing   

使用命令修改工作模式只在當前有效,想要開機生效,而且如果想要在disabled和其他兩種模式之間切換,只有修改配置文件參數然後重啓,該配置文件是/etc/selinux/config,另外也可以通過/etc/sysconfig/selinux文件修改,其實該文件是/etc/selinux/config的軟鏈接文件

blob.png

    notice:SELinux從disabled切換到其他模式的時候,系統的重啓會花費很長的時間,因爲需要爲每個受管制的進程和文件寫入安全上下文,我的小夥伴以爲是配置過程中出錯然後直接恢復快照了。


2.2 工作類型

SELinux下存在不同的規則,SELinux根據不同的工作類型對這些規則打開或關閉(on|off<布爾值1|0>),然後通過規則的開啓與關閉具體地限制不同進程對文件的讀取。

    getsebool -a 或者 sestatus -b      # 查看當前工作類型下各個規則的開啓與否

blob.png

    setsebool -P 規則名稱 [0|1]    # 修改當前工作類型下指定規則的開啓關閉,-P表示同時修改文件使永久生效

blob.png


三、安全上下文

3.1 security context介紹

安全上下文存在於進程與文件中,context隨進程一起存入內存中,文件的context存放在其對應的inode中,因此進程在訪問文件時,要先讀取inode,再判斷是否能夠訪問該文件。

    ls -Z    # 顯示文件的安全上下文

    ps -eZ   # 顯示所有進程的安全上下文

blob.png


context可以有5個字段,以:爲分割符,分別代表的含義如下

userroletype sensitivitycategory

身份識別

unconfined_u不受限的用戶或文件

system_u受限的進程或文件

文件、進程、用戶

object_r文件

system_r進程和用戶

數據類型,重要

何種類型進程訪問何種文件

安全級別

s0最低

只要在msl下才有意義

劃分的不同分類,當它不存在了



context查詢工具seinfo、sesearch

    seinfo -u    # 查詢所有的user字段的種類

    seinfo -r    # 查詢所有的role字段的種類

    seinfo -t    # 查詢所有的type字段的種類  

sesearch -A 可以查詢什麼類型進程可以讀取什麼type類型的文件

    sesearch -A -s 進程type    # 查詢type類型的進程能夠讀取的文件type    

    sesearch -A -b 規則(規則的boolean值,所以爲-b選項,理解爲bool規則)

                               # 查詢指定規則下放行的進程能夠讀取的文件type

blob.png

blob.png


3.2 當前context和期望context   

系統中的每個文件都會有context,我們使用ls -Z查詢出來的我們看到的context就是當前context;那期望context又是什麼呢,系統會把每個文件的默認context記錄下來並保存,這樣系統記錄下來的就是期望context。semanage命令可以管理每個文件的期望context,也叫期望標籤。

    semanage fcontext -l                     # 查看所有的期望SELinux標籤

    semanage fcontext -a -t type 目標目錄    # 添加期望SELinux標籤

     semanage fcontext -m -t type 目標目錄    # 修改期望SELinux標籤

     semanage fcontext -d -t type 目標目錄    # 刪除期望SELinux標籤

    修改規範:

~]# semanage fcontext -a -t type 目錄(/.*)?

blob.png


3.3 修改當前context    

使用chcon命令手動修改security context,格式chcon 選項 目標文件

        chcon        # 手動修改文件的context,-R選項可以遞歸修改目錄,-v選項可以顯示context的修改前後的結果

        chcon -t     # 修改文件的context的type字段

        chcon -u     # 修改文件的context的user字段

        chcon -r     # 修改role字段

       chcon -l     # 修改安全級別

       chcon -h     # 針對軟鏈接文件的修改,不加-h則會修改軟鏈接對應的原文件

        chcon --reference=file # 以file的context爲模板修改

使用restorecon命令修改context爲期望context,格式restorecon 選項 目標文件,    

        restorecon -R    # 遞歸修改目錄

        restorecon -v    # 顯示修改的過程


3.3 semanage修改進程訪問的端口號

雖然聽起來是修改端口號的,但是到底還是修改安全上下文的,我們用semanage工具,命令爲semanage port

查詢某個服務的context type字段

        語法:semanage port -l |grep 服務名

添加某個端口爲指定服務的訪問端口        

        語法:semanage port -a -t type -p 協議 端口號(不要與常用端口重複)

例如添加ssh服務的端口號,默認爲22

blob.png    


四、SELinux日誌管理

SELinux阻止的進程的日誌記錄存放在/var/log/audit/audit.log文件中,但是該文件中的內容用戶閱讀體驗很差,可以去cat /var/log/audit/audit.log看看,因此係統爲我們提供了sealert工具,幫助我們整理該日誌文件,sealert工具處理日誌文件的時候需要花費一點時間,請耐心等待。

    另外SELinux的日誌功能需要auditd.service服務的開啓。


結合案例(apache SELinux配置)來了解sealert工具

1.確保本機配置了httpd服務並處於開啓狀態,httpd服務配置方法請參考博客:Apache部署httpd服務

blob.png

2./usr/sbin/httpd命令會開啓進程去讀取/var/www/html/目錄下以.html結尾的文件,現在在家目錄下創建文件~/index.html,隨意編寫內容,之後把新創建的文件移動至/var/www/html/下。

blob.png

3.我們通過瀏覽器,在地址欄輸入本機IP,查看成功與否,當出現如下界面的時候表示訪問失敗。

blob.png

4.我們在配置服務的時候確定了沒有問題,這時候我們要想到可能是SELinux阻止了我們訪問。我們通過命令

    sealert -a /var/log/audit/audit.log

查看SELinux日誌,我們找到httpd的關鍵字,閱讀內容,下圖中的內容是我們主要關注的部分,其他則是/var/log/audit/audit.log的內容,我們可以忽略。最後我們優先考慮改動最小的解決方案,即修改SELinux標籤。

blob.png

5.執行命令restorecon -v /var/www/html/index.html,就是修改該文件爲httpd能夠訪問的默認標籤blob.png

6.再用瀏覽器訪問查看結果,這次成功。

blob.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章