Selinux

Selinux:強制訪問控制的安全模塊,linux內核2.6版本后集成在內核中。

    selinux的四種工作類型:

            strict:centos5中,每隔進程都受到selinux的控制,策略認識就允許,不認識就拒絕。

            targeted:用來保護常見的網絡服務,僅有限進程受到selinux控制,只監控容易被入侵的進程,rhel4只保護13個服務,rhel保護88個服務,系統默認該模式。

            minimum:centos7,修改過的targeted,只對選擇的網絡服務

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

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

            selinux 不同策略及違反策略后的動作:

root@cenots6.8  ~ # cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.   ###違反策略就拒絕
#     permissive - SELinux prints warnings instead of enforcing.    ###違反策略就警告
#     disabled - No SELinux policy is loaded.        ###違反策略不做處理
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted         ###默認工作類型

            setenforce 0 將當前模式由 enforcing 由切換到permissive,臨時更改,更改后文件里面還是默認值enforcing(該命令不能切換到disable,如需更改需要修改配置文件,然后重啟),setenforce 1切換成enforcing。

root@cenots6.8  ~ # setenforce 0
root@cenots6.8  ~ # sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

            selinux的啟用與禁用:

                        禁用方法1、將/etc/selinux/config 文件中的SELINUX=enforcing狀態改為disable,重啟。    

                        禁用方法2、在/boot/grub/grub.cof 文件中在內核參數處添加,selinux=0,重啟

                        注意:在這兩個文件中,只要有一個禁用就禁用。

            查看當正在生效的策略:getenforce

root@cenots6.8  ~ # getenforce
Enforcing

            查看當前策略設置的詳細信息:sestatus

root@cenots6.8  ~ # sestatus
SELinux status:                 enabled    
SELinuxfs mount:                /selinux
Current mode:                   enforcing    ###當前生效的
Mode from config file:          enforcing    ###/etc/selinux/config文件中的設置狀態
Policy version:                 24
Policy from config file:        targeted    ###工作類型

selinux安全上下文:

                傳統linux中,一切皆文件,由用戶,組,權限控制訪問。

                在selinux中,一切皆對象(object),由存放在inode的擴展屬性域的安全元素所控制其訪問。

                所有文件和端口資源的進程都具備安全標簽,安全上下文(security context)

                查看安全上下文信息:ls -Z;ps -Z

                期望(默認)上下文:存放在二進制的Selinux策略庫中

                              semanage fcontext -l

                安全上下文有五個元素組成:

                            user:role:type:sensitivty: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:限制訪問的需要,由組織定義的分層安全級別,如unclassified,secret,top,secret,一個對象有且只有一個sensitivity,分0-15級,s0最低,target策略默認使用s0.

                             category:對于特定的組織劃分不分層的分類,一個對象可以有多個categroy,c0-c1023共1024個分類,target策略不使用category。

-rwxr-xr-x. root root system_u:object_r:admin_home_t:s0 install.log.syslog
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 ks.cfg
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 公共的


selinux策略

                對象(object):所有可以讀取的對象,包括文件,目錄和進程,端口等。

                主體:進程成為主體(subject)

                selinux中的所有的文件都賦予了一個type的文件類型的標簽,對于所有的進程也賦予各自的一個domain的標簽,domain標簽能夠執行的操作由安全策略里定義。

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

                安全策略:定義主機讀取對象的規則數據庫,規則中記錄了哪個類型的主機使用哪個方法讀取哪一個對象是允許還是拒絕的,并且定義了哪種行為是允許或拒絕。    

                  舉例:

                           1、 A主機開啟http服務,在/var/html/index.html該網頁其他主機可以正常訪問,現在將index

。html,做如下操作:a、cp index.html /root

                                  b、mv  /root/index.html ./

                             此時,其他主機就不能正常訪問了。

                             原因:標簽發生變化導致,服務被拒絕。

root@centos7.2  /var/www/html # ll -Z
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index2.html

root@centos7.2  ~ # semanage fcontext -l |grep "/var/www"
/var/www(/.*)?                                     all files          system_u:object_r:httpd_sys_content_t:s0 
/var/www(/.*)?/logs(/.*)?                          all files          system_u:object_r:httpd_log_t:s0

                      注意:拷貝到哪里就會繼承其父目錄的標簽,mv移動會保留原父目錄的標簽,所以,第二步cp就不會出現該問題了。

                          2、 此時系統任務http服務放在/var/www/html目錄中,如果想改成/website 目錄中,則首先要修改vim /etc/httpd/conf/httpd.conf,Document Root "/var/www/html" 改成/website ,重啟服務,由于/website是我們自己創建的,在策略數據庫中是查不到的,因此需要 chcon –reference /var/www/html/ /website (不能使用restorecon,因為數據庫中沒有,加到數據庫中才可以使用),重啟服務就可以訪問了。

       如何查看文件或端口錄原有的標簽是什么呢?——  semanage fcontex | port -l(數據庫中查找)

       如果文件的標簽發生變化,如何恢復為默認值呢?—–restorecon fileName (通過查找semanage數據庫恢復默認的標簽 )

                                                                                 —–restorecon -R dirName 恢復目錄及其里面所有文件的默認標簽

       知道標簽名,如何手動修改?———— chcon -t default_t fileName

       參考前面文件的標簽進行修改——————chcon -R –reference dirName1 dirName2

       策略數據庫中添加或刪除文件或目錄————semange fcontext -a -t http_sys_content_t "/website(/.*)?"

                                                                      ——semange fcontext -d -t http_sys_content_t "/website(/.*)?"

                                                                      ——(/.*)?—-指該目錄下的任意文件或目錄

       策略數據庫中添加端口號————-semanage port -a -t http_prot -p tcp 8888 將8888加入到策略數據庫中

       修改策略數據庫中的端口號給別的端口–semanage prot -m -t ssh_prot_t -p tcp 8888 將原來的http的8888端口號給ssh


selinux布爾值

            有些服務或行為系統認為是危險的就拒絕,比如ftp上傳默認是不允許的,下載是可以的,這些行為就是由bool值控制的

            查看bool值命令:getsebool  -a 、semanage boolean -l 、

root@centos7.2  ~ # getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off            ###ftp上傳權限被拒絕
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
root@centos7.2  ~ # semanage boolean -l | grep ftp
SELinux 布爾值                    狀態  默認      描述
sftpd_enable_homedirs          (關    ,    關)  Allow sftpd to enable homedirs
httpd_can_connect_ftp          (關    ,    關)  Allow httpd to can connect ftp
ftpd_use_passive_mode          (關    ,    關)  Allow ftpd to use passive mode
ftpd_use_nfs                   (關    ,    關)  Allow ftpd to use nfs
ftpd_connect_all_unreserved    (關    ,    關)  Allow ftpd to connect all unreserved
sftpd_full_access              (關    ,    關)  Allow sftpd to full access
ftpd_anon_write                (關    ,    關)  Allow ftpd to anon write
狀態:當前狀態
默認:值文件中的設置

            設置selinux布爾值:

                   setsebool httpd_can_network_relay =1  設置httpd_can_network_relay 狀態為1(臨時生效)
                   setsebool -P httpd_can_network_relay on|off  設置httpd_can_network_relay 狀態和默認值都為1(永久有效)
                   semanage boolean -l -C  查看改過的boolean值

        

                        

                    

原創文章,作者:Naruto,如若轉載,請注明出處:http://www.www58058.com/47359

(0)
NarutoNaruto
上一篇 2016-09-18
下一篇 2016-09-18

相關推薦

  • 第四周作業

    作業 1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@cloud ~]# cp -R /etc/skel /home/tuser1 && chmod -R…

    Linux干貨 2016-12-25
  • N25第三周博客作業

    第三周博客作業: 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 2、取出最后登錄到當前系統的用戶的相關信息。                  …

    Linux干貨 2016-12-12
  • Linux用戶及組的管理相關知識

    Linux用戶及組的管理相關知識 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d " " -f1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 ~]# last -x | head -1 3、取出當前系統上被用戶當作其默認shell的最多的那…

    Linux干貨 2016-10-05
  • 循環的特殊用法及函數

    while特殊用法 while read 變量名;do 循環體 done<文件路徑(將文件中的每一行依次讀入循環體,賦值給變量)   (())可以實現C語言風格的變量操作 for循環特殊格式 for((控制變量初始化;條件判斷表達式;控制變量修正表達式)) do 循環體 done 控制變量初始化僅在循環開始時執行一次,進行條件判斷成立后執行循…

    Linux干貨 2016-08-21
  • bash的基礎特性[更新中]

    2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
    3、請使用命令行展開功能來完成以下練習:
    (1)、創建/tmp目錄下的:a_c, a_d, b_c, b_d
    (2)、創建/tmp/mylinux目錄下的:
    mylinux/
    ├── bin
    ├── boot
    │?? └── grub
    ├── dev
    ├── etc
    │?? ├── rc.d
    │?? │?? └── init.d
    │?? └── sysconfig
    │?? └── network-scripts
    ├── lib
    │?? └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │?? └── local
    │?? ├── bin
    │?? └── sbin
    └── var
    ├── lock
    ├── log
    └── run
    5、如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?
    6、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
    7、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
    8、顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
    9、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10、復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
    11、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
    12、復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

    2018-03-17
  • 權限管理

           學習文件和目錄的權限管理,不僅在學習上對我們的幫助很大,而且在工作上幫助也很大,因為你對文件或目錄設置了權限,其他用戶只能根據你設置的權限對文件或目錄進行瀏覽,修改,刪除或執行,也正是如此,權限的管理很重要。下面我就對Linux的權限管理進行簡單的介紹。 Linux下的文件類型 -:普…

    Linux干貨 2016-08-08
欧美性久久久久