SELinux 是什麼?

来源:https://www.cnblogs.com/linhaostudy/archive/2018/03/27/8659662.html
-Advertisement-
Play Games

一、SELinux的歷史 SELinux全稱是Security Enhanced Linux,由美國國家安全部(National Security Agency)領導開發的GPL項目,它擁有一個靈活而強制性的訪問控制結構,旨在提高Linux系統的安全性,提供強健的安全保證,可防禦未知攻擊,相當於B1 ...


一、SELinux的歷史

SELinux全稱是Security Enhanced Linux,由美國國家安全部(National Security Agency)領導開發的GPL項目,它擁有一個靈活而強制性的訪問控制結構,旨在提高Linux系統的安全性,提供強健的安全保證,可防禦未知攻擊,相當於B1級的軍事安全性能。比MS NT的C2等高得多。

SELinux起源於自1980開始的微內核和操作系統安全的研究,這兩條研究線路最後形成了一個叫做的分散式信任電腦(Distribute Trusted Mach (DTMach))的項目,它融合了早期研究項目的成果(LOCK【鎖】,它包含一組安全內核類型強制;Trusted Mach【信任電腦】,它將多層安全控制合併到電腦微內核中)。美國國家安全局的研究組織參加了DTMach項目,付出了巨大努力,並且繼續參與了大量的後續安全微內核項目。最終,這些工作和努力導致了一個新的項目產生,那就是Flask,它支持更豐富的動態類型的強制機制。

由於不同平臺對這這項技術沒有廣泛使用,NAS認為需要在大量的社團中展示這個技術,以說明它的持久生命力,並收集廣泛的使用支持意見。在1999年夏天,NSA開始在Linux內核中實現Flask安全架構,在2000年十二月,NSA發佈了這項研究的第一個公共版本,叫做安全增強的Linux。因為是在主流的操作系統中實現的,所以SELinux開始受到Linux社區的註意,SELinux最遲是在2.2.x內核中以一套內核補丁的形式發佈的。

隨著2001年Linux內核高級會議在加拿大渥太華順利召開,Linux安全模型(LSM[7])項目開始為Linux內核創建靈活的框架,允許不同的安全擴展添加到Linux中。NSA和SELinux社區是SELinux的主要貢獻者,SELinux幫助LSM實現了大量的需求,為了與LSM一起工作,NSA開始修改SELinux使用LSM框架。2002年八月LSM核心特性被集成到Linux內核主線,同時被合併到Linux 2.6內核。2003年八月,NSA在開源社區的幫助下,完成了SELinux到LSM框架的遷移,至此,SELinux進入Linux 2.6內核主線,SELinux已經成為一種全功能的LSM模塊,包括在核心Linux代碼集中。

 數個Linux發行版開始在2.6內核中不同程度使用SELinux特性,但最主要是靠Red Hat發起的Fedora Core項目才使SELinux具備企業級應用能力,NSA和Red Hat開始聯合集成SELinux,將其作為Fedora Core Linux發行版的一部分。在Red Hat參與之前,SELinux總是作為一個附加的軟體包,需要專家級任務才能進行集成。Red Hat開始採取行動讓SELinux成為主流發行版的一部分,完成了用戶空間工具和服務的修改,預設開啟增強的安全保護。從Fedora Core 2開始,SELinux和它的支持基礎架構以及工具得到改進。在2005年早些時候,Red Hat發佈了它的Enterprise Linux 4(REL 4),在這個版本中,SELinux預設就是完全開啟的,SELinux和強制訪問控制已經進入了主流操作系統和市場。

SELinux仍然是一個相對較新和複雜的技術,重要的研究和開發在繼續不斷地改進它的功能。

應用SELinux後,可以減輕惡意攻擊或惡意軟體帶來的災難,並提供對機密性和完整性有很高要求的信息很高的安全保障。普通Linux安全和傳統Unix系統一樣,基於自主存取控制方法,即DAC,只要符合規定的許可權,如規定的所有者和文件屬性等,就可存取資源。在傳統的安全機制下,一些通過setuid/setgid的程式就產生了嚴重安全隱患,甚至一些錯誤的配置就可引發巨大的漏洞,被輕易攻擊。

而SELinux則基於強制存取控制方法,即MAC,透過強制性的安全策略,應用程式或用戶必須同時符合DAC及對應SELinux的MAC才能進行正常操作,否則都將遭到拒絕或失敗,而這些問題將不會影響其他正常運作的程式和應用,並保持它們的安全系統結構。

 

二、SELinux 的作用及許可權管理機制

2.1 SELinux 的作用

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

2.2 DAC

在沒有使用 SELinux 的操作系統中,決定一個資源是否能被訪問的因素是:某個資源是否擁有對應用戶的許可權(讀、寫、執行)。

只要訪問這個資源的進程符合以上的條件就可以被訪問。

而最致命問題是,root 用戶不受任何管制,系統上任何資源都可以無限制地訪問。

這種許可權管理機制的主體是用戶,也稱為自主訪問控制(DAC);

2.3 MAC

在使用了 SELinux 的操作系統中,決定一個資源是否能被訪問的因素除了上述因素之外,還需要判斷每一類進程是否擁有對某一類資源的訪問許可權。

這樣一來,即使進程是以 root 身份運行的,也需要判斷這個進程的類型以及允許訪問的資源類型才能決定是否允許訪問某個資源。進程的活動空間也可以被壓縮到最小。

即使是以 root 身份運行的服務進程,一般也只能訪問到它所需要的資源。即使程式出了漏洞,影響範圍也只有在其允許訪問的資源範圍內。安全性大大增加。

這種許可權管理機制的主體是進程,也稱為強制訪問控制(MAC)。

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

 

三、SELinux 基本概念

3.1 主體(Subject)

可以完全等同於進程。

3.2 對象(Object)

被主體訪問的資源。可以是文件、目錄、埠、設備等。

3.3 政策和規則(Policy & Rule)

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

3.4 安全上下文(Security Context)

安全上下文是 SELinux 的核心。

安全上下文我自己把它分為「進程安全上下文」和「文件安全上下文」。

一個「進程安全上下文」一般對應多個「文件安全上下文」。只有兩者的安全上下文對應上了,進程才能訪問文件。它們的對應關係由政策中的規則決定。

3.5 SELinux 的工作模式

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

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

2. permissive:寬容模式。違反 SELinux 規則的行為只會記錄到日誌中。一般為調試用。

3. disabled:關閉 SELinux。

3.6 SELinux 工作流程

這裡引用一張圖片,不必過多解釋。

 

 

四、SELinux 基本操作

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

1 ls -Z

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

4.2 查詢進程的安全上下文

1 ps auxZ | grep -v grep | grep

 

 舉例:

查詢 Nginx 相關進程的安全上下文。

1 ps auxZ | grep -v grep | grep nginx

 

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

1 chcon [...]

 

 選項功能-u 修改安全上下文的用戶欄位-r 修改安全上下文的角色欄位-t 修改安全上下文的類型欄位-l 修改安全上下文的級別欄位--reference 修改與指定文件或目錄相一致的安全上下文-R遞歸操作-h修改軟鏈接的安全上下文(不加此選項則修改軟鏈接對應文件)

4.4 把文件或目錄的安全上下文恢復到預設值

1 restorecon [選項] [...]

選項功能-v列印操作過程-R遞歸操作


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 隨筆: (1) 命名空間 using System.Data.OleDb; (2) 連接字元串 private staticstring connStr = @"Provider= Microsoft.Ace.OLEDB.12.0;Data Source = d:\login.accdb"; 註意: ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.UI.HtmlControls; using System... ...
  • 1 public static T Mapper(S source) 2 { 3 T t = Activator.CreateInstance(); 4 try 5 { 6 var s_type = source.GetType(); 7 ... ...
  • 有些時候我們寫的shell腳本中有一些後臺任務,當腳本的流程已經執行到結尾處並退出時,這些後臺任務會直接掛靠在init/systemd進程下,而不會隨著腳本退出而停止。 例如: 從結果中可以看到,腳本退出後,sleep進程的父進程變為了1,也就是掛在了init/systemd進程下。 這時我們可以在 ...
  • Ubuntu上官方的源,比如 Ubuntu14.04 預設源中的是 PHP5.6.x、Ubuntu16.04 預設源中的是 PHP7.0.x,那麼如果想在 Ubuntu16.04 上安裝 PHP7.1,PHP7.2,應該怎麼辦呢? 答案是通過第三方的源來安裝, "ppa:ondrej/php" 是一 ...
  • yum工具比RPM工具好用,所以直接介紹yum工具來管理RPM包。 yum list |head -n 20 列出所有RPM資源。 yum search vim 搜索RPM包vim yum install -y protobuf-vim 安裝RPM包,如果不加-y,則會以與用戶交互的方式安裝。 yu ...
  • 低功耗廣域網路LPWAN(Low Power Wide Area Network),專為低帶寬、低功耗、遠距離、大量連接的物聯網應用而設計。今天痞子衡就用一張表為大家搜羅常見的低功耗廣域物聯網協議。 ...
  • .rar壓縮文件linux中不識別,.zip在windows和Linux中動能使用。 .gz:由gzip壓縮工具壓縮的文件 .bz2:bzip2壓縮工具壓縮的文件 .tar:由tar打包程式打包的文件。(tar並沒有壓縮功能,只是把一個目錄合併成一個文件)。 .tar.gz:先有tar打包,然後再由 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...