selinux相關知識詳解及實例講解

一。selinux相關知識html

    1.SELinux簡介node

         SELinux是一個強制訪問控制的安全模塊,linux內核2.6版本後集成在內核python

            DAC:Discretionary Access Control自由訪問控制linux

            MAC:Mandatory Access Control 強制訪問控制web

                DAC下進程是毫無束縛的centos

                MAC環境下策略的規則決定控制的嚴格程度緩存

                MAC環境下,進程能夠被限制安全

                策略被用來定義被限制的進程可使用哪些資源(文件和端口)服務器

                默認狀況下,沒有被明確容許的行爲將被拒絕網絡


    2.selinux運行模式

        (1)對象(object):全部可讀取的對象,包括文件、目錄、進程、端口等

        (2)主體:進程稱爲主體(subject)

        (3)selinux的工做模式(selinux策略)

               strict:只有centos5纔有,每一個進程都受到selinux嚴格的控制

                targeted:用來保護常見的網絡服務,只監控容易被***的進程;rhel4保護13個服務,rhel5保護88個服務

                minimum:centos7,修改過的targeted

                mls:提供MLS(多級安全)機制的安全性


                mls和minimum穩定性不足,未加以應用

        (4)selinux安全上下文

                <1>傳統linux,一切皆文件,由用戶、組、權限控制訪問

                <2>在selinux中,一切皆對象,

                            文件安全上下文:由存放在inode拓展屬性域中的安全元素所控制其訪問

                            進程安全上下文:存放在內存當中

                <3>全部文件、端口資源、進程都具備安全標籤:安全上下文

                            ll 查看文件屬性,權限所在列的尾部的「.」表明有安全標籤

                <4>安全上下文由5個元素組成

                            user:role:type:sensitivity:category

                            user_u:object_r:tmp_t:s0:c0

                                user:指示登陸系統的用戶類型,如root、user_u、system_u;多數本地進程屬於自由(unconfined)進程

                                role:定義文件、進程和用戶的用途

                                        文件:object_r

                                        進程和用戶:system_r

                                type:指定數據類型,規則中定義何種進程類型訪問何種文件,target策略是基於type實現的,   多服務功用:public_content_t

                                sensitivity:限制訪問的須要,由組織定義的分層安全級別,如unclassfied,secret,top,一個對象有且只有一個sensitivity,分0-15級,s0最低,target策略默認使用s0

                                category:對於特定組織劃分不分層的分類,如FBI Secret,NSA Secret,一個對象能夠有多個category,c0-c1023共1024個分類,target策略不使用category

                <5>實際安全上下文存放在文件系統中,ls -Z ;ps -Z

                <6>默認上下文:存放在二進制的selinux策略庫中

                            semanage fcontext -l


小結:selinux對全部的文件都賦予一個type的文件類型標籤,對於全部的進程也賦予各自的一個domain的標籤;domain標籤可以執行的操做由安全策略規定

當一個subject試圖訪問一個object,kernel中的策略執行服務器將檢查AVC(Access Vector Cache訪問矢量緩存),在AVC中,subject和object的權限被緩存,查找「應用+文件」的安全環境。而後根據查詢結果容許或拒絕訪問

    3.設置selinux的相關注意操做

            selinux是否啓用

            給文件從新打標籤

            給端口設置安全標籤

            設置某些操做的布爾值開關

            selinux的日誌管理


    4.selinux的(狀態|模式)

            enforcing:強制,每一個受限的進程都必然受限

            permissive:容許,每一個受限的進程違規操做不會被禁止,但會被記錄於審計日誌

            disabled:禁用


            enforceing與permissive相互加的切換不須要重啓,其他狀態間切換須要重啓,由於selinux是整合到內核中的

            selinux的策略改變後須要重啓

    5.管理selinux的相關命令

        (1)查看selinux狀態及修改相關狀態

                getenforce:獲取selinux當前狀態

                sestatus:查看selinux狀態

                    -v 檢查列於/etc/sestatus.conf內的文件與程序的安全上下文內容

                    -b:將目前策略的規則布爾值列出來,即某些規則(rule)是否要啓動之意

                setenforce 0|1

                        0:設置爲permissive

                        1:設置enforcing

        (2)相關配置文件

                下面兩類文件有一個禁用即禁用selinux

                在/etc/grub/grub.conf文件的kernel行的行尾添加「selinux=0」,內核會忽略過selinux的加載

                /etc/grub/grub.conf   使用selinux=0禁用selinux

                /etc/sysconfig/selinux

                /etc/selinux/config   SELINUX={disabled|enforcing|permissive}

        (3)seinfo       查詢selinux策略的工具

                    -t 列出selinux的全部類型(type)

                    -r 列出selinux的全部角色(role)

                    -u 列出selinux的全部身份表示(user)

                    -b 列出全部規則的種類(布爾值)

        (4)sesearch命令詳解

                知道某個類型或者布爾值後,可用此命令瞭解詳細規則

                sesearch [-A] [-s 主體類型] [-t 目標類型]  [-b 布爾值]

                        -A 列出該類型或布爾值的全部相關信息


        (5)修改文件的selinux安全標籤

                <1>給文件從新打安全標籤

                        chcon [option] ... [-u user] [-r role] [-t type] file...

                        chcon [option] ... --reference=rfile file

                                -R 遞歸打標

                                 -v 將過程顯示到屏幕上

                <2>恢復文件默認的安全上下文

                            restorecon [-R] /path/to/somewhere

        (6)默認安全上下文查詢與修改

                    semanage命令來自於policycoreutils-python包

                    查看默認的安全上下文

                            semanage fcontext -l

                    添加安全上下文(只是爲用來恢復默認安全文,在所添加的特定目錄下所新建的文件,繼承的是當前目錄的安全文而不是默認安全文)

                            semanage fcontext -a -t httpd_sys_content_t  '/testdir(/.*)?'

                            restore -Rv /testdir

                    刪除安全上下文

                                semanage fcontext -d -t httpd_sys_content_t '/testdir(/.*)?'

        (7)修改端口的selinux標籤

                    查看端口標籤

                        semanage port -l

                    添加端口

                        semanage  port -a -t port_label -p tcp|udp PORT

                        semanage port -a -t httpd_port_t -p tcp 9527

                    刪除端口

                            semanage port -a -t port_label -p tcp|udp PORT

                            semanage port -d -t port http_port_t -p tcp 9527

                    修改

                            semanageport -m -t port_label-p tcp|udpPORT

                            semanageport -m -t http_port_t-p tcp9527

        (8)selinux布爾值

                布爾型規則

                        getsebool

                        setsebool

                查看bool命令

                        getsebool [-a] [boolean]

                        semanage boolean -l

                        semanage boolean -l -C 查看修改過的布爾值

                設置bool值命令

                        setsebool [-P] boolean value   將設置寫入配置文件

                        setsebool [-P] boolean=value

        (9)selinux日誌管理

                    yum install setroublesshoot*(重啓生效)

                     

                    方法一:

                        <1>將錯誤的信息寫入/var/log/message(錯誤信息其實最終是在/var/log/audit/audit.log中)

                        <2>用grep setroubleshoot /var/log/messages過濾所需的信息,

                        <3>而後用「sealert -l UUID 」 查看安全事件日誌說明

                    方法二:

                            sealert -a /var/log/audit/audit.log 掃描並分析日誌

    6.mv /dir1/file1 /dir2/file2  file2的安全標籤與file1安全標籤同樣

        cp /dri1/file1 /dir2/file2  file2的安全標籤繼承/dir2目錄的安全標籤

二selinux網絡服務運行範例

    1.在服務器端上邊啓動httpd服務,並關閉防火牆

    

wKiom1ffm4Hj97rmAAAIB74IJ0w053.png

    2.在服務器端上邊的/var/www/html/目錄下新建文件index.html

    

wKiom1ffnFyDg2lCAAAFyTlRen0749.png

    3.在客戶端上邊訪問pc1的httpd服務

    

wKioL1ffnPaBcA2OAAADydFtF1A737.png


wKiom1ffnPbCKIF_AAAECUtoZ9Q727.png

    發現能夠成功訪問

    4.在服務器端查看/var/www/html/index.html的安全上下文

wKioL1ffnr3SR8TyAAAICcakNWw084.png

    5.在服務器端的root下新建index2.html文件,查看安全上下文;而後移動到/var/www/html下,而後再查看安全上下文

        

wKiom1ffn0yiOtNFAAAU_OzNKoA760.png

發現通過mv安全上下文並無改變

    6.在客戶端訪問服務器端的index2.html文件


wKioL1ffn8WBv278AAADJeLJEOI818.png


wKiom1ffn8WDMApPAAAJ1fAKvQU739.png

    發現沒有權限訪問


   7. 在服務器端執行grep 'setroubleshoot' /var/log/message,會出現以下界面

wKioL1ffzdHSBaThAAAODcJ4vQE068.png

    8.由上圖知道,想了解更詳細信息,在服務器端執行sealert -l 92d22156-08a9-4967-a2e9-aa48a3207115

    

wKiom1ffzuSzEGonAAAsl_nQyY0577.png

    9由上圖可知,在服務器端執行/sbin/restorecon -v /var/www/html/index2.html科解決問題

    

wKiom1ffz0yBgQuUAAALohH_sqY985.png

    10.在客戶端從新訪問服務器端的web服務

/sbin/restorecon -v /var/www/html/index2.html
   發現實驗成功

3、

    一、安裝httpd服務,改變網站的默認主目錄爲/website,添加SELinux文件標籤規則,設置http_sys_content_t到/website及目錄下全部文件,使網站可訪問
    二、修改網站端口爲9527,增長SELinux端口標籤,使網站可訪問
    三、啓用SELinux布爾值,使用戶student的家目錄可經過http訪問

從本質上將:一、3小題實現的功能是同樣的,都是死特定目錄可經過http訪問

第一小題:

        本題pc1指的是服務器端,pc2指的是客戶端

        (1)進入pc1「httpd」服務配置文件/etc/httpd/conf/httpd.conf
,做以下修改

    修改前:    

wKioL1ff0T_xD8wqAAAR264FOLk600.png

    修改後:

    

wKiom1ff0Y6QR5BDAAAF2kX6IPI999.png

        (2)給/website目錄添加默認標籤規則

    

wKiom1ff0yjx1uHoAAAjCVstTWU694.png

        (3)在pc1上邊的/website目錄下新建index.html文件

    

wKioL1ff04TxY0ZgAAAEsDHgbcQ940.png

       (4)在pc1上邊重啓web服務

wKioL1ff0_rgkYPIAAAMhJ8dRdQ823.png

        (5)發現/website/index.html的安全標籤以下

wKiom1ff4ZSSX_bCAAAHP9CaoiE922.png

並非/website目錄下的默認安全文        

        (6)用restorecon -Rv /website/index.html的默認安全文

  

wKioL1ff4jqRp2LaAAAPf5bV4yI792.png

 

(5)在pc2上邊訪問pc1的web服務

wKioL1ff1Bjx0DOcAAAByp3bOAo178.png

        

wKioL1ff3Euit38oAAACNfBVdPs398.png

 第二小題:

        (1)進入httpd服務配置文件做以下修改

    修改前:

wKioL1ff3SSA0A8cAAAJDIvrmrc745.png

    修改後:

        

wKiom1ff3TSyIAO6AAAHAWpKoJE948.png

    (2)   添加端口默認安全標籤

wKiom1ff3crgNDIeAAAVdjccXTc661.png

發現http_port_t爲咱們要找的端口類型

    (3)爲http_port_t端口類型添加9527端口

wKioL1ff30SxlcR5AAAajpxTZW0726.png

    (4)重啓httpd服務

wKioL1ff4FbAnHp8AAAO-69ExJw484.png

    (5)在pc2訪問pc1的web服務

wKioL1ff4LWg2K6LAAAC8QCxl-I537.png

wKiom1ff4LXiPA7VAAAEOPpc2Wo812.png

發現試驗成功

    第三小題:

        (1)進入httpd服務的配置文件做以下修改

                    修改前

wKioL1ff5gfxbN-yAAAbSegd6gU913.png

                    修改後

wKioL1ff5hujUpREAAAW34q2CFI347.png

        (2)重啓httpd服務,而後在pc2上邊訪問pc1的web服務

wKioL1ff6_iSttSRAAAJAvylGVU073.png

    (3)在pc1上邊查看/~tian文件屬性,而後修改成Apache進程能夠切入該目錄

wKiom1ff7Hrg8WpPAAAO1P23-sg097.png

    (4)此時在pc2上邊訪問pc1的web服務

wKioL1ff7MjzBwJ8AAAH81aJMN8312.png

    (5)在pc1的圖形界面看到有selinux警報

wKioL1ff7iWSv9GLAACzz01dpms383.png

        (6)運行setsebool -P httpd_enable_homedirs 1,查看結果以下

wKiom1ff70fDKQI4AAAHlkQzxIE196.png

        (7)在pc2訪問pc1的web服務

wKioL1ff74vyEorbAAAEJd0z3M4092.png

wKiom1ff74uixEXjAAAEd4xbFPg458.png

相關文章
相關標籤/搜索