Linux SELinux筆記整理

SELinux(Security Enhanced Linux)html

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



目錄linux

  • SELinux的工做原理apache

  • 工做模式和工做類型centos

  • 安全上下文瀏覽器

  • SELinux日誌管理
    安全


1、SELinux的工做原理
bash

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

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

    目標    # 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、工做模式和工做類型

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、安全上下文

3.1 security context介紹

安全上下文存在於進程與文件中,context隨進程一塊兒存入內存中,文件的context存放在其對應的inode中,所以進程在訪問文件時,要先讀取inode,再判斷是否可以訪問該文件。

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

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

blob.png


context能夠有5個字段,以:爲分割符,分別表明的含義以下

user role type  sensitivity category

身份識別

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    


4、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

相關文章
相關標籤/搜索