首頁 > 軟體

SELinux管理原則

2020-06-16 16:48:27

SELinux使用所謂的委任式存取控制(Mandatory Access Control,MAC),可以根據特定的程式和特定的檔案資源進行許可權的管理。即使是root使用者,在使用不同的程式時,你所能獲得的許可權不一定是root,需要根據程式的設定。

一、SELinux的工作模式

1、主體(Subject)
        SELinux主要管理的就是程式。可以相比於process。
2、目標(Object)
        主體程式存取的目標資源一般就是檔案系統。
3、策略(Policy)
        存取安全性策略,規則等。CentOS6.x提供targeted和mls兩個主要的策略。
    targeted:針對網路服務限制較多,針對本機限制較少,是預設的策略。
    mls:完整的SELinux限制,限制方面較為嚴格。
4、安全性環境(Security Context)
        類似於檔案系統的rwx。

檢視/root下面檔案的安全性環境

[root@www ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog

Identify:role:type
身份識別:角色:型別

身份識別(Identify):相當於賬號方面的身份識別。主要的身份識別有:
1、root:表示root的賬號身份
2、system_u:表示系統程式方面的識別,通常就是程式
3、user_u:代表的是一般使用者賬號相關的身份

角色(Rule):通過角色欄位,我們可以知道這個資料是代表程式、檔案資源還是使用者。
1、object_r:代表的是檔案或目錄等資源,這是最常見的。
2、system_r:代表的就是程式了。不過一般使用者也會被指定成為system_r

型別(Type):一個主體程式能否讀取到這個檔案資源,與型別欄位有關
1、Type:在檔案資源中被稱為型別
2、Domain:在主體程式中被稱為域

二、SELinux的啟動、關閉與檢視

三種模式:
# 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.

檢視:getenforce
臨時設定:setenforce 【0 | 1】
永久修改:vim /etc/selinux/config,再重新啟動

注意:setenforce無法在disabled的模式下進行切換

三、SELinux的Type欄位修改
複製檔案的Type欄位會繼承自目標目錄,而移動檔案保持不變。
1、chcon

chcon [-R] [-t type] [-u user] [-r role] 檔案
chcon [-R] --reference=範例檔案 檔案
-R:連同該目錄下的子目錄也進行修改
-t:後面接安全性環境的型別欄位
-u:後面接身份識別
-r:後面接角色
--reference:參考範例檔案

2、restorecon

restorecon [-Rv] 檔案或目錄
-R:連同子目錄修改
-v:過程顯示到螢幕

3、semanage

semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec

fcontext:主要用作安全性環境方面,-l為查詢
-a:增加
-m:修改
-d:刪除

四、SELinux策略內的規則布林值修訂
1、策略查閱

seinfo [-Atrub]
-A:列出SELinux的狀態
-t:所有類別
-r:所有角色種類
-u:所有身份識別種類
-b:所有規則的種類(布林值)

詳細的規則:
sesearch [--all] [-s 主體類別] [-t 目標類別] [-b 布林值]

2、布林值的查詢與修改


查閱:
getsebool [-a] [布林值條款]
修改:
getsebool [-P] 布林值=[0|1]

五、SELinux紀錄檔檔案記錄所需的服務
使用setsebool、chcon、restorecon等都是為了當某些網路服務無法正常提供相關功能時才需要進行修改的一些命令動作。CentOS提供了幾個檢測的服務來檢測處理在登入SELinux時產生的錯誤,那就是auditd、setroubleshoot。
1、setroubleshoot:將錯誤資訊寫入/var/log/message與/var/log/setroubleshoot/*

安裝並啟動該服務

[root@www ~ ]yum install setroubleshoot setroubleshoot-server
[root@www ~ ]service auditd restart

運作方式:

1、先由auditd去呼叫audispd服務
2、然後audispd服務去啟動sedispatch程式
3、sedispatch再將原本的auditd資訊轉成setroubleshoot的資訊,進一步儲存下來。

以httpd程式產生的錯誤為例

2、使用E-mail或在命令列上面直接提供setroubleshoot錯誤資訊
3、SELinux錯誤克服的總結
網路連線要通過SELinux的許可權判定後才能夠繼續rwx的許可權對比,而SELinux的對比需要通過策略的各項規則對比後才能夠進行SELinux Type安全性環境的對比。而後續的SELinux的修改通過chcon、restorecon、setsebool等命令來處理。通過分析/var/log/messsage內提供的setroubleshoot的資訊。

a】在服務和rwx許可權都沒有問題,卻無法成功的使用網路服務時,先使用setenforce 0 設定為寬容模式
b】再次使用該網路服務,如果這樣就能使用,則問題出現在SELinux上面,若仍無法使用則應從其他方面考慮排錯。
c】分析/var/log/message中的資訊,找到sealert -l相關的資訊並且執行
d】找到Allow Access的關鍵詞,按照裡面的動作來進行SELinux的錯誤克服。
e】處理完畢重新setenforce 1,再次測試網路服務

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-08/153603.htm


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