### 導讀
如果你在之前的Linux生涯中都禁用或忽略了SELinux,這篇文章就是專門為你寫的:這是一篇對存在于你的Linux桌面或服務器之下的SELinux系統的介紹,它能夠限制權限,甚至消除程序或守護進程的脆弱性而造成破壞的可能性。
回到Kernel 2.6 時代,那時候引入了一個新的安全系統,用以提供訪問控制安全策略的機制。這個系統就是Security Enhanced Linux (SELinux),它是由美國國家安全局(NSA)貢獻的,它為Linux內核子系統引入了一個健壯的強制控制訪問Mandatory Access Control架構。
在我開始之前,你應該已經了解的是SELinux主要是紅帽Red Hat Linux以及它的衍生發行版上的一個工具。類似地, Ubuntu 和 SUSE(以及它們的衍生發行版)使用的是 AppArmor。SELinux和AppArmor 有顯著的不同。你可以在SUSE,openSUSE,Ubuntu等等發行版上安裝SELinux,但這是項難以置信的挑戰,除非你十分精通 Linux,說了這么多,讓我來向你介紹SELinux。
#### DAC vs. MAC
Linux上傳統的訪問控制標準是自主訪問控制Discretionary Access Control(DAC)。在這種形式下,一個軟件或守護進程以User ID(UID)或Set owner User ID(SUID)的身份運行,并且擁有該用戶的目標(文件、套接字、以及其它進程)權限。這使得惡意代碼很容易運行在特定權限之下,從而取得訪問關鍵的子系統的權限。
另一方面,強制訪問控制Mandatory Access Control(MAC)基于保密性和完整性強制信息的隔離以限制破壞。該限制單元獨立于傳統的Linux安全機制運作,并且沒有超級用戶的概念。
#### SELinux如何工作
考慮一下SELinux的相關概念:
1. 主體Subjects
2. 目標Objects
3. 策略Policy
4. 模式Mode
當一個主體Subject(如一個程序)嘗試訪問一個目標Object(如一個文件),SELinux安全服務器SELinux Security Server(在內核中)從策略數據庫Policy Database中運行一個檢查。基于當前的模式mode,如果 SELinux 安全服務器授予權限,該主體就能夠訪問該目標。如果SELinux安全服務器拒絕了權限,就會在/var/log/messages中記錄一條拒絕信息。
聽起來相對比較簡單是不是?實際上過程要更加復雜,但為了簡化介紹,只列出了重要的步驟。
#### 模式
SELinux 有三個模式(可以由用戶設置)。這些模式將規定 SELinux 在主體請求時如何應對。
這些模式是:
1. Enforcing 強制— SELinux 策略強制執行,基于 SELinux 策略規則授予或拒絕主體對目標的訪問
2. Permissive 寬容— SELinux 策略不強制執行,不實際拒絕訪問,但會有拒絕信息寫入日志
3. Disabled 禁用— 完全禁用SELinux
(getenforce命令顯示SELinux的狀態是Enforcing啟用狀態)
默認情況下,大部分系統的SELinux設置為Enforcing。你要如何知道你的系統當前是什么模式?你可以使用一條簡單的命令來查看,這條命令就是 getenforce。這個命令用起來難以置信的簡單(因為它僅僅用來報告SELinux的模式)。要使用這個工具,打開一個終端窗口并執行 getenforce 命令。命令會返回 Enforcing、Permissive,或者Disabled(見上圖)。
設置SELinux的模式實際上很簡單——取決于你想設置什么模式。記住:永遠不推薦關閉 SELinux。為什么?當你這么做了,就會出現這種可能性:你磁盤上的文件可能會被打上錯誤的權限標簽,需要你重新標記權限才能修復。而且你無法修改一個以 Disabled 模式啟動的系統的模式。你的最佳模式是Enforcing或者Permissive。
你可以從命令行或/etc/selinux/config文件更改SELinux的模式。要從命令行設置模式,你可以使用setenforce工具。要設置Enforcing模式,按下面這么做:
1.打開一個終端窗口
2.執行su然后輸入你的管理員密碼
3.執行setenforce 1
4.執行getenforce確定模式已經正確設置(如下圖)
要設置模式為Permissive,這么做:
1.打開一個終端窗口
2.執行su然后輸入你的管理員密碼
3.執行setenforce 0
4.執行getenforce確定模式已經正確設置(如下圖)
注:通過命令行設置模式會覆蓋 SELinux 配置文件中的設置。
如果你更愿意在SELinux命令文件中設置模式,用你喜歡的編輯器打開那個文件找到這一行:
SELINUX=permissive
你可以按你的偏好設置模式,然后保存文件。
還有第三種方法修改SELinux的模式(通過 bootloader),但我不推薦新用戶這么做。
策略類型
SELinux策略有兩種:
Targeted目標 — 只有目標網絡進程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd)受保護
Strict嚴格 — 對所有進程完全的SELinux保護
你可以在/etc/selinux/config文件中修改策略類型。用你喜歡的編輯器打開這個文件找到這一行:
SELINUXTYPE=targeted
修改這個選項為targeted或strict以滿足你的需求。
檢查完整的SELinux狀態
有個方便的SELinux 工具,你可能想要用它來獲取你啟用了SELinux的系統的詳細狀態報告。這個命令在終端像這樣運行:
sestatus -v
你可以看到像下圖這樣的輸出。
僅是皮毛
和你預想的一樣,我只介紹了SELinux的一點皮毛。SELinux的確是個復雜的系統,想要更扎實地理解它是如何工作的,以及了解如何讓它更好地為你的桌面或服務器工作需要更加地深入學習。我的內容還沒有覆蓋到疑難解答和創建自定義SELinux策略。
SELinux是所有Linux管理員都應該知道的強大工具。現在已經向你介紹了SELinux,我強烈推薦你回到Linux.com(當有更多關于此話題的文章發表的時候)或看看 NSA SELinux文檔獲得更加深入的指南。
原文來自:https://linux.cn/article-7317-1.html
本文地址:https://www.linuxprobe.com/selinux-introduction.html
- 目錄
- W3School
- 工具
- 手冊
- 實驗
- 慕課
- Linux軟件安裝管理
- RPM包安裝
- yum安裝
- Linux系統管理
- ps_mem
- uname
- CentOS版本
- Linux服務管理
- Linux權限管理
- Linux 權限控制的基本原理
- Linux網絡管理
- Linux計劃任務
- Crontab
- 任務啟停
- 綜合用例
- 間隔任務
- 一次任務
- 跨天任務
- 輸出重定向
- Crontab任務權限
- 多任務
- 表達式
- 視頻教程
- 不知疲倦的時間表
- 發送郵件
- nginx
- nginx入門到實踐
- Nginx配置Web服務器
- 查看進程
- 配置步驟
- nginx升級
- 腳本升級
- systemctl 命令完全指南
- Linux 軟件安裝目錄
- 查看文件安裝路徑
- 書籍
- 《Linux Shell腳本攻略》
- 《循序漸進Linux》
- 課程
- Linux典型應用
- 網址
- 通信
- MySQL開啟遠程連接
- 防火墻
- 安全組規則
- Mailx
- 介紹
- 安裝
- 配置
- 發送郵件
- 163_email
- 安全
- Linux中root賬號和普通賬號有什么區別,root賬號為什么不能刪除?
- chmod改變文件權限
- SELinux入門