首頁 > 軟體

初步認識SELinux安全管理

2020-06-16 17:52:50

今天我們來看一下Linux系統下一個神秘的安全管理SELinux。

SELinux安全的基本概念

Security Enhanced Linux (SELinux)是一個額外的系統安全層。SELinux的主要目標是防止已遭遇洩露的系統服務存取使用者資料。大多數Linux管理員都熟悉標準的使用者/組/其他許可權安全模型。這種基於使用者和組的模型稱為自由決定的存取控制。SELinux提供另一層安全,他基於物件並由更加複雜的規則控制,稱為強制存取控制。

SELinux是用於確定那個進程可以存取那些檔案、目錄和埠的一組安全規則。每個檔案、進程和埠都具有特別的安全標籤,稱為SELinux上下文。上下文是一個名稱,SELinux策略使用它來確定某個進程能否存取檔案、目錄或埠。除非顯式規則授予存取許可權,否則,在預設情況下,策略不允許任何互動。如果沒有允許規則,則不允許存取。

SELinux標籤具有多種上下文:使用者、角色、型別和敏感度。目標策略(即 Red Hat Enterprise Linux 中啟用的預設策略)會根據第三個上下文(即型別上下文)來制定自己的規則。型別上下文名稱通常以 _t 為結尾。伺服器的型別上下文是 httpd_t 。通常位於 /var/www/html 中的檔案和目錄的型別上下文是 httpd_sys_content_t 。通常位於 /tmp 和 /var/tmp 中的檔案和目錄的型別上下文是 tmp_t 。Web伺服器埠的型別上下文是 http_port_t 。

SELinux模擬練習

練習環境:RHEL7.0

1、如果不知道你的SELinux有沒有啟動的話,你可以用下面這條命令檢視:

[root@server0 ~]# getenforce
Enforcing

Enforcing的意思是當前狀態是開啟的

下面我們來看看如何更改SELinux模式:

[root@server0 ~]# vim /etc/sysconfig/selinux

# 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,
#    minimum - Modification of targeted policy. Only selected processes are protected.
#    mls - Multi Level Security protection.
SELINUXTYPE=targeted

 

SELinux模式分為三種:Enforcing、Permissive 和 Disabled。Disabled 代表 SELinux 被禁用,Permissive 代表僅記錄安全警告但不阻止可疑行為,Enforcing 代表記錄警告且阻止可疑行為。

改變 SELinux 執行狀態

setenforce [ Enforcing | Permissive | 1 | 0 ]

該命令可以立刻改變 SELinux 執行狀態,在 Enforcing 和 Permissive 之間切換,結果保持至關機。一個典型的用途是看看到底是不是 SELinux 導致某個服務或者程式無法執行。若是在 setenforce 0 之後服務或者程式依然無法執行,那麼就可以肯定不是 SELinux 導致的。

若是想要永久變更系統 SELinux 執行環境,可以通過更改組態檔 /etc/sysconfig/selinux 實現。注意當從 Disabled 切換到 Permissive 或者 Enforcing 模式後需要重新啟動計算機並為整個檔案系統重新建立安全標籤(touch /.autorelabel && reboot)。

2、下面我們來做一個小例子:

當我們將SELinux設定為“強制”模式後,我們把httpd.conf裡的根目錄更改以後,會發現,網頁無法開啟。

這裡我們將http的根目錄改為如下:

[root@server0 ~]# vim /etc/httpd/conf/httpd.conf

...
DocumentRoot "/html"
...
...
<Directory "/html">

然後再在根下建立html資料夾

[root@server0 ~]# mkdir /html
[root@server0 ~]# echo "linuxidc" > /html/index.html

建立完之後我們來看一下咱們建立檔案的上下文

顯示SELinux上下文的選項(通常是-Z)。例如,ps、ls、cp和mkdir全都使用 -Z 選項來顯示或設定SELinux上下文。

更改完目錄後我們重新啟動httpd服務然後後開啟網頁,您將會得到一個錯誤訊息,提示您不具有存取該檔案的許可權。

開啟網頁我們這裡使用elinks命令,如果沒有可以通過yum來安裝。

[root@server0 ~]# elinks http://localhost/index.html

為什麼會顯示沒有許可權呢?咱們接著往下看。

3、首先咱們來看看/var/www/html目錄標準的上下文是什麼。

[root@server0 ~]# ll -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

然後再看看咱們剛才新建立目錄的上下文是什麼。

[root@server0 html]# ll -Z
-rw-r--r--. root root system_u:object_r:default_t:s0  index.html

這裡我們看到/var/www/html(源目錄)的上下文是httpd_sys_content_t,而咱們之前建立(目標目錄)的index.html檔案的上下文是default_t。

由於源上下文和目標上下文的型別不同,httpd進程無法對default_t類的檔案及目錄的讀取,所以會顯示沒有許可權,這裡我們需要把/html目錄的上下文修改成httpd能夠讀取的型別。

httpd能夠讀取什麼樣的型別呢,從上邊我們可以看到httpd 能讀取的型別是 httpd_sys_content_t的型別。

知道了這個型別,我們就把/html這個目錄改成這個型別。

4、更改檔案的SELinux上下文

更改SELinux的上下文可以使用兩個命令:chcon和restorecon。

chcon 命令是將檔案的上下文更改成已指定為該命令引數的上下文。

chcon 命令:修改物件(檔案)的安全上下文。比如:使用者:角色:型別:安全級別。 語法:
  Chcon [OPTIONS…] CONTEXT FILES…..
  Chcon [OPTIONS…] –reference=PEF_FILES FILES…
 選項:
    CONTEXT 為要設定的安全上下文
    FILES 物件(檔案)
    --reference 參照的物件
    PEF_FILES 參照檔案上下文
    FILES      應用參照檔案上下文為我的上下文。
    OPTIONS 如下:
        -f          強迫執行
        -R        遞回地修改物件的安全上下文
        -r ROLE    修改安全上下文角色的設定
        -t TYPE    修改安全上下文型別的設定
        -u USER  修改安全上下文使用者的設定
        -v        顯示冗長的資訊
        -l, --range=RANGE    修改安全上下文中的安全級別

restorecon 命令是更改檔案或目錄的SELinux上下文的首選方法。不同於 chcon,在使用此命令時,不會明確指定上下文。它使用SELinux策略中的規則來確定應該是那種檔案上下文。

restorecon命令用來恢復SELinux檔案屬性即恢復檔案預設的安全上下文。
 語法
 restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...]
 選項
-i:忽略不存在的檔案。
-f:infilename 檔案 infilename 中記錄要處理的檔案。
-e:directory 排除目錄。
-R/-r:遞回處理目錄。
-n:不改變檔案標籤。
-o/outfilename:儲存檔案列表到 outfilename,在檔案不正確情況下。
-v:將過程顯示到螢幕上。
-F:強制恢復檔案安全語境。

下面給大家演示一下

注意:最好不要使用chcon來更改檔案的SELinux上下文。如果在系統啟動時重新標記了其檔案系統,檔案上下文將會還原為預設上下文。

上面圖中大家可以看到,我用chcon -t把/html資料夾的型別上下文更改成httpd正確的上下文,chcon只更改了上下文,但沒有更改資料夾的規則。當我在用restorecon來恢復預設上下文的規則的時候/html資料夾的上下文又更改回來了。上面這個例子說明你用chcon相當於臨時更改,當你重新重新整理標籤,你的上下文又會變為原來預設的上下文。如果你想不管怎麼重新整理標籤上下文都不變的話,你就需要重新定義SELinux預設上下文的規則了。

5、定義 SELinux預設檔案上下文規則

semanage fcontext 命令可用於顯示或修改,restorecon命令用來設定預設檔案上下文的規則。它使用擴充套件正規表示式來指定路徑和檔名。fcontext規則中最常用的擴充套件正規表示式是 (/.*)?  意思是:“(可選)匹配 / 後跟任意數量的字元”。他將會匹配在表示式前面列出的目錄並遞回的匹配該目錄中的所有內容。

semanage命令是用來查詢與修改SELinux預設目錄的安全上下文。
 語法:
 semanage {login|user|port|interface|fcontext|translation} -l
 semanage fcontext -{a|d|m} [-frst] file_spec
 選項:
 -l:查詢。 fcontext:主要用在安全上下文方面。
 -a:增加,你可以增加一些目錄的預設安全上下文型別設定。
 -m:修改。
 -d:刪除。

下面咱們就用semanage fcontext命令來更改一下/html目錄預設的安全上下文。

上面這幅圖我們先檢視了一下/html目錄的上下文,然後用semanage來更改預設向下文的規則,最後用restorecon命令恢復預設上下文規則,現在/html目錄的上下文規則就改好了,接下來咱們來測試一下網頁是否能夠開啟了。

同樣還是用elinks http://localhost/index.html來開啟咱們的網頁

現在咱們可以看到頁面不在提示沒有許可權,而是出現了咱們之前用echo輸入進去的linuxidc的欄位。

SELinux的多層安全機制  http://www.linuxidc.com/Linux/2015-05/117168.htm

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

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


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