簡單了解linux中的selinux

2021-10-04 23:10:22 字數 4391 閱讀 7397

一、安全增強型 linux(security-enhanced linux)簡稱 selinux,它是乙個 linux 核心模組,也是 linux 的乙個安全子系統。

二、selinux 主要作用就是最大限度地減小系統中服務程序可訪問的資源(最小許可權原則)。

在沒有使用 selinux 的作業系統中,決定乙個資源是否能被訪問的因素是:某個資源是否擁有對應使用者的許可權(讀、寫、執行)。只要訪問這個資源的程序符合以上的條件就可以被訪問。而最致命問題是,root 使用者不受任何管制,系統上任何資源都可以無限制地訪問。這種許可權管理機制的主體是使用者,也稱為自主訪問控制(dac)。

在使用了 selinux 的作業系統中,決定乙個資源是否能被訪問的因素除了上述因素之外,還需要判斷每一類程序是否擁有對某一類資源的訪問許可權。這樣一來,即使程序是以 root 身份執行的,也需要判斷這個程序的型別以及允許訪問的資源型別才能決定是否允許訪問某個資源。程序的活動空間也可以被壓縮到最小。即使是以 root 身份執行的服務程序,一般也只能訪問到它所需要的資源。即使程式出了漏洞,影響範圍也只有在其允許訪問的資源範圍內。安全性大大增加。這種許可權管理機制的主體是程序,也稱為強制訪問控制(mac)。

而 mac 又細分為了兩種方式,一種叫類別安全(mcs)模式,另一種叫多級安全(mls)模式。

三、selinux 基本概念

3.1 主體(subject)

可以完全等同於程序。

注:為了方便理解,如無特別說明,以下均把程序視為主體。

3.2 物件(object)

被主體訪問的資源。可以是檔案、目錄、埠、裝置等。

注:為了方便理解,如無特別說明,以下均把檔案或者目錄視為物件。

3.3 政策和規則(policy & rule)

系統中通常有大量的檔案和程序,為了節省時間和開銷,通常我們只是選擇性地對某些程序進行管制。

而哪些程序需要管制、要怎麼管制是由政策決定的。

一套政策裡面有多個規則。部分規則可以按照需求啟用或禁用(以下把該型別的規則稱為布林型規則)。

規則是模組化、可擴充套件的。在安裝新的應用程式時,應用程式可通過新增新的模組來新增規則。使用者也可以手動地增減規則。

在 centos 7 系統中,有三套政策,分別是:

targeted:對大部分網路服務程序進行管制。這是系統預設使用的政策(下文均使用此政策)。

minimum:以 targeted 為基礎,僅對選定的網路服務程序進行管制。一般不用。

mls:多級安全保護。對所有的程序進行管制。這是最嚴格的政策,配置難度非常大。一般不用,除非對安全性有極高的要求。

政策可以在 /etc/selinux/config 中設定。

3.4 安全上下文(security context)

安全上下文是 selinux 的核心。

安全上下文我自己把它分為「程序安全上下文」和「檔案安全上下文」。

乙個「程序安全上下文」一般對應多個「檔案安全上下文」。

只有兩者的安全上下文對應上了,程序才能訪問檔案。它們的對應關係由政策中的規則決定。

檔案安全上下文由檔案建立的位置和建立檔案的程序所決定。而且系統有一套預設值,使用者也可以對預設值進行設定。

需要注意的是,單純的移動檔案操作並不會改變檔案的安全上下文。

安全上下文的結構及含義

安全上下文有四個字段,分別用冒號隔開。形如:system_u:object_r:admin_home_t:s0。

3.5 selinux 的工作模式

selinux 有三種工作模式,分別是:

enforcing:強制模式。違反 selinux 規則的行為將被阻止並記錄到日誌中。

permissive:寬容模式。違反 selinux 規則的行為只會記錄到日誌中。一般為除錯用。

disabled:關閉 selinux。

selinux 工作模式可以在 /etc/selinux/config 中設定。

如果想從 disabled 切換到 enforcing 或者 permissive 的話,需要重啟系統。反過來也一樣。

enforcing 和 permissive 模式可以通過 setenforce 1|0 命令快速切換。

需要注意的是,如果系統已經在關閉 selinux 的狀態下執行了一段時間,在開啟 selinux 之後的第一次重啟速度可能會比較慢。因為系統必須為磁碟中的檔案建立安全上下文。

selinux 日誌的記錄需要借助 auditd.service 這個服務,請不要禁用它。

3.6 selinux 工作流程圖

注:上面的安全文字指的就是安全上下文。

四、selinux 基本操作

4.1 查詢檔案或目錄的安全上下文

命令基本用法

ls -z 《檔案或目錄》

用法舉例

查詢 /etc/hosts 的安全上下文。

ls -z /etc/hosts

執行結果

-rw-r–r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts

4.2 查詢程序的安全上下文

命令基本用法

ps auxz | grep -v grep | grep 《程序名》

用法舉例

查詢 nginx 相關程序的安全上下文。

ps auxz | grep -v grep | grep nginx

執行結果

4.3 手動修改檔案或目錄的安全上下文

命令基本用法

chcon 《選項》 《檔案或目錄 1> [《檔案或目錄 2>…]

選項功能-u 《值》修改安全上下文的使用者欄位-r 《值》修改安全上下文的角色欄位-t 《值》修改安全上下文的型別欄位-l 《值》修改安全上下文的級別字段–reference 《檔案或目錄》修改與指定檔案或目錄相一致的安全上下文-r遞迴操作-h修改軟鏈結的安全上下文(不加此選項則修改軟鏈結對應檔案)

用法舉例

修改 test 的安全上下文為 aaa_u:bbb_r:ccc_t:s0。

chcon -u aaa_u -r bbb_r -t ccc_t test

五、selinux 錯誤分析和解決

5.1 認識 selinux 日誌

當開啟了 selinux 之後,很多服務的一些正常行為都會被視為違規行為(標題及下文中的錯誤均指違規行為)。

這時候我們就需要借助 selinux 違規日誌來分析解決。

selinux 違規日誌儲存在 /var/log/audit/audit.log 中。

/var/log/audit/audit.log 的內容大概是這樣的。

type=login msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1

type=user_start msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg=『op=pam:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=「root」 exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success』

該檔案的內容很多,而且混有很多與 selinux 錯誤無關的系統審計日誌。我們要借助 sealert 這個實用工具來幫忙分析(如果提示找不到命令的話請安裝 setroubleshoot 軟體包 yum install setroubleshoot)。

5.2 使用 sealert 分析錯誤

命令基本用法

sealert -a /var/log/audit/audit.log

執行完命令之後,系統需要花一段時間去分析日誌中的違規行為並給出分析報告。分析報告的結構講解請看下圖:

在Linux系統中如何檢視和關閉SELinux

一 檢視selinux狀態命令 1 usr sbin sestatus v 如果selinux status引數為enabled即為開啟狀態 selinux status enabled 2 getenforce 也可以用這個命令檢查 二 關閉selinux方法 1 臨時關閉 不用重啟機器 如下 s...

Linux 程序簡單了解

首先我們先了解下程式和程序的區別 程式是儲存在硬碟 光碟等介質中的可執行 和資料,是硬碟 外設 上的乙個普通檔案。程序是在cpu及記憶體中執行的程式 就是被載入到記憶體裡的程式 程序大體要了解如下內容 描述程序 pcb linux下的pcb是 task struct task struct內容分類 ...

python中的模組簡單了解

模組使用 模組就像工具包一樣,裡面有很多任務具 函式 類等 使用時匯入即可 匯入 import random 匯入 import random as rdm 匯入後起別名 from random import randint 指定匯入 from random import randint as ri...