首頁 > 軟體

SELinux入門和基本設定

2020-06-16 17:33:09

SElinux的概念:
  SELinux[Security Enhanced Linux (安全強化 Linux)],是工作在核心中的MAC (Mandatory Access Control,強制存取控制系統)的一個實現,目的在於明確的指明某個進程可以存取哪些資源(檔案、網路埠等)。強制存取控制系統的用途在於增強系統抵禦 0-Day 攻擊(利用尚未公開的漏洞實現的攻擊行為)的能力。所以它不是網路防火牆或 ACL 的替代品,在用途上也不重複。

DAC和MAC的聯絡和區別:
      一般系統上採用的DAC的環境,selinux則是MAC(強制存取控制)
        DAC環境下進程是無束縛的
        MAC環境下策略的規則決定控制的嚴格程度
        MAC環境下進程可以被限制的
        策略被用來定義被限制的進程能夠使用那些資源(檔案和埠)
        預設情況下,沒有被明確允許的行為將被拒絕

對於selinux的通俗理解:
      selinux,它給一些特定程式(這些程式也在不斷增加)做了一個沙箱,它將檔案打上了一個安全標籤,這些標籤屬於不同的類,也只能執行特定的操作,也就是規定了某個應用程式設定了你可以存取那些檔案或目錄。
    subject operation object
  主體:進程稱為主體(subject)
  物件(object):所有可以讀取的物件,包括檔案、目錄和進程,埠等,
 
  SELinux中對所有的檔案都賦予一個type的檔案型別標籤,對於所有的進程也賦予各自的一個domain的標籤。Domain標簽能夠執行的  操作由安全策略裡定義。當一個subject試圖存取一個object,Kernel中的策略執行伺服器將檢查AVC (存取向量快取Access Vector Cache),  在AVC中,subject和object的許可權被快取(cached),查詢“應用+檔案”的安全環境。然後根據查詢結果允許或拒絕存取
 
      安全策略:定義主體讀取物件的規則資料庫,規則中記錄了哪個型別的主體使用哪個方法讀取哪一個物件是允許還是拒絕的,並且定義了哪種行為是充許或拒絕
 
了解和設定 SELinux

1. 獲取當前 SELinux 執行狀態

getenforce
    可能返回結果有三種:Enforcing、Permissive 和 Disabled。Disabled 代表 SELinux 被禁用,Permissive 代表僅記錄安全警告但不阻止可疑行為,Enforcing 代表記錄警告且阻止可疑行為。

2. 改變 SELinux 執行狀態

setenforce [ 1 | 0 ]
 
    切換disabled狀態或者從disabled狀態切換至別的狀態都需要重新啟動。而enforceing和Permissive兩種狀態間切換不需要重新啟動
      重新啟動時會為整個檔案系統重新建立安全標籤(touch /.autorelabel && reboot)。
      只要grub中或者組態檔中有一個設定了disabled ,那麼seLinux就是不啟動的。

  若是想要永久變更系統 SELinux 執行環境,可以通過更改組態檔 /etc/sysconfig/selinux實現。

3. SELinux 執行策略
    strict: CentOS5,每個進程都受到selinux的控制
    targeted: 用來保護常見的網路服務,僅有限進程受到selinux控制,只監控容易被入侵的進程,rhel4只保護13個服務,rhel5保護88個服務
    minimum:centos7,修改過的targeted,只對選擇的網路服務
    mls:提供MLS(多級安全)機制的安全性
    minimum和mls穩定性不足,未加以應用
   
    一般都是預設採用targeted,不用修改

4.  安全標籤
 
a.檢視程式的安全標籤
#ps auxZ | grep lldpad 
system_u:system_r:initrc_t:s0 root 1000 8.9 0.0 3040 668 ? Ss 21:01 6:08 /usr/sbin/lldpad -d
b.檢視檔案的安全標籤:有.就是有安全標籤
#ls -Z /usr/lib/xulrunner-2/libmozjs.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 /usr/lib/xulrunner-2/libmozjs.so
 
安全標籤有多個選項,我們只需要關注第三個type就行。
    Type:指定資料型別,規則中定義何種進程型別存取何種檔案Target策略基於type實現,多服務共用:public_content_t
   
    給檔案重新打安全標籤:
    chcon  [-t TYPE] FILE...
    chcon[OPTION]... --reference=RFILE FILE...
    -R:遞回打標;
    恢復目錄或檔案預設的安全上下文:
    restorecon[-R] /path/to/somewhere

5.安全上下文
    semanage來自policycoreutils-Python包,centos 6上預設沒安裝
    檢視預設的安全上下文
    semanage  fcontext  –l
    新增安全上下文
    semanage  fcontext  -a –t httpd_sys_content_t‘/testdir(/.*)?’
    restorecon  –Rv  /testdir
    刪除安全上下文
    semanage  fcontext  -d –t httpd_sys_content_t‘/testdir(/.*)?’

6.埠

    檢視埠標籤
    semanage  port –l
    新增埠
    semanage port -a -t port_label-p tcp|udpPORT
    semanage port -a -t http_port_t -p tcp 9527
    刪除埠
    semanage port -d -t port_label-p tcp|udpPORT
    semanage port -d -t http_port_t -p tcp 9527
    修改
    semanage port -m -t port_label-p  tcp|udpPORT
    semanage port -m -t http_port_t-p tcp9527

7.布林規則
    布林型規則:
    getsebool
    setsebool
    檢視bool命令:
    getsebool [-a] [boolean]
    semanage  boolean  –l
    semanage  boolean  -l –C 檢視修改過的布林值
    設定bool值命令:
    setsebool  [-P] booleanvalue
    setsebool  [-P] Boolean=value
   
8.紀錄檔
      yum install setroublesshoot*(重新啟動生效)
    將錯誤的資訊寫入/var/log/message
      grep setroubleshoot/var/log/messages
      sealert-l UUID
    檢視安全事件紀錄檔說明
    sealert-a /var/log/audit/audit.log
    掃描並分析紀錄檔

Apache SELinux 設定範例

1、安裝httpd服務,改變網站的預設主目錄為/website,新增SELinux檔案標籤規則,設定http_sys_content_t到/website及目錄下所有檔案,使網站可存取
    [root@~]# mkdir /website
    [root@~]# ll -Z /website -d
    drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /websit
    [root@~]# ll -Z /var/www/html/
    -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
    [root@~]# chcon --reference=/var/www/html /website
    [root@~]#ll -Z /website/
    -rwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
    [root@~]# vim /etc/httpd/conf/httpd.conf
      DocumentRoot "/website"
    [root@~]# service httpd restart
    [root@~]#echo "test website" > /website/index.html
    測試:
        在瀏覽器上輸入地址,可以正常存取到
 

 
2、修改網站埠為9527,增加SELinux埠標籤,使網站可存取
 
    [root@~]# semanage port -l | grep "http_port_t"
        http_port_t                    tcp        80, 81, 443, 488, 8008, 8009, 8443, 9000
    [root@~]# semanage port -a -t http_port_t -p tcp 9527
    [root@~]# semanage port -l | grep "http_port_t"
      http_port_t                tcp        9527,80, 81, 443, 488, 8008, 8009, 8443, 9000
    [root@~]#vim /etc/httpd/conf/httpd.conf
      Listen 9527
    測試:
 

3、啟用SELinux布林值,使使用者student的家目錄可通過http存取
      [root@~]#vim /etc/httpd/conf/httpd.conf
      修改為:
            #  UserDir disabled
            UserDir public_html

        [root@~]# chmod 711 /home/jay
        [root@~]#mkdir /home/jay/public_html
        [root@~]#echo "jay home" > /home/jay/public_html/index.html
      檢視布林規則:
        [root@~]# semanage boolean -l | grep "homedir"
        httpd_enable_homedirs    (off  ,  off)  Allow httpd to read home directories
      修改布林規則:
      [root@~]# setsebool -P httpd_enable_homedirs on
測試:

SELinux安全上下文初探 http://www.linuxidc.com/Linux/2014-04/99508.htm

一次由SELinux引起的SSH公鑰認證失敗問題 http://www.linuxidc.com/Linux/2013-07/87267.htm

SELinux 入門教學 http://www.linuxidc.com/Linux/2013-04/82371.htm

SELinux簡單設定 http://www.linuxidc.com/Linux/2012-12/77032.htm

CentOS系統如何快速關閉SELinux http://www.linuxidc.com/Linux/2012-11/74613.htm

CentOS/RHEL下如何關閉SELinux  http://www.linuxidc.com/Linux/2011-05/36486.htm

SELinux 入門指南  http://www.linuxidc.com/Linux/2016-05/131162.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-09/135202.htm


IT145.com E-mail:sddin#qq.com