歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 初步認識SELinux安全管理

初步認識SELinux安全管理

日期:2017/2/28 13:57:42   编辑:Linux教程

今天我們來看一下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

Copyright © Linux教程網 All Rights Reserved