SELinux是什么以及如何編寫SELinux策略

目錄

一、SELinux 是什么?

二、SELinux 的兩種模式

如何查看當前 SELinux 狀態?

三、SELinux 在 Android 中的作用

四、為什么Root之后很多設備是 Permissive?

五、開發與調試場景

總結

🧩 一、什么是 SELinux 策略?

🗂? 二、SELinux 策略的組成

📄 三、一個簡單的策略例子(.te 文件)

解讀:

📁 四、文件上下文(.fc)

🛠? 五、策略編寫流程(開發者視角)

🔍 六、常用allow語法

🧪 七、開發時如何調試策略?

? 總結


一、SELinux 是什么?

SELinux 全稱是 Security-Enhanced Linux,是由美國國家安全局(NSA)和Red Hat開發的一種強制訪問控制(MAC)機制,被集成到了Linux內核中。

在Android中,SELinux 從 Android 4.3 開始引入,并從 Android 5.0(Lollipop)起默認啟用為強制模式(enforcing),是系統安全的核心。


二、SELinux 的兩種模式

SELinux 有兩個主要的運行狀態:

狀態名稱說明
Permissive寬容模式只記錄違規行為,不阻止操作;常用于調試或開發。
Enforcing強制模式嚴格執行策略,阻止不合法的行為(如非法訪問系統資源)。

如何查看當前 SELinux 狀態?

在 Android 終端或 ADB shell 中輸入:

getenforce
  • 返回 Enforcing 表示SELinux正在強制執行策略。

  • 返回 Permissive 表示只是記錄日志,不真正限制訪問。

  • 也可以使用 sestatus 命令(在某些Linux系統上)查看詳細信息。


三、SELinux 在 Android 中的作用

  1. 限制App權限越界
    即使一個應用有root權限,如果違反SELinux策略(比如訪問系統核心資源),它的操作依然會被阻止。

  2. 防止惡意軟件提權
    限制后臺服務或惡意模塊在未經授權的情況下獲取系統控制權。

  3. 分區不同安全域(context)
    每個進程、文件都有一個安全上下文,像 u:object_r:system_file:s0,用于判斷它是否有權執行某操作。


四、為什么Root之后很多設備是 Permissive?

  • Root工具(如Magisk)經常會將SELinux設置為 Permissive,這樣方便修改系統文件或執行本不被允許的操作。

  • 例如,某些模塊(如Xposed)需要插樁系統服務,如果SELinux是 Enforcing,這類操作會被阻止。

  • Permissive 模式存在安全風險,因為系統不會阻止任何行為,只記錄了日志。


五、開發與調試場景

  • 在開發調試定制ROM、修改系統行為時,為了方便調試,會把SELinux設為Permissive。

  • 發布正式ROM或上架Play商店時,Google強制要求為Enforcing模式。


總結

問題解釋
SELinux能提高安全性嗎?是的,它為Android添加了一道重要的系統級防線。
為什么root后會修改SELinux狀態?為了獲得更高權限訪問系統資源,繞開限制。
可以手動切換狀態嗎?在root環境下可以通過命令如 setenforce 0/1 進行切換,但需謹慎。


🧩 一、什么是 SELinux 策略?

SELinux 策略(policy) 是定義系統中哪些主體(subjects)可以訪問哪些客體(objects)以及如何訪問的規則集合。

在 Android 或 Linux 中:

  • 主體一般是進程(如 system_servervold)。

  • 客體一般是文件、目錄、socket、屬性等資源。

策略是以 "類型強制訪問控制(TE – Type Enforcement)" 的形式存在。


🗂? 二、SELinux 策略的組成

SELinux策略由多種類型的文件構成:

文件說明
*.teType Enforcement 文件,定義主體和客體的訪問規則(核心策略文件)
*.fc文件上下文文件,定義哪些文件路徑屬于哪種類型
*.if接口文件,模塊之間共享的抽象接口
*.pp編譯后的策略模塊文件(policy package)
*.cil高級策略中使用的中間語言文件


📄 三、一個簡單的策略例子(.te 文件)

我們看一個簡單的策略例子,假設我們創建了一個名為 myapp 的進程:

# myapp.te# 聲明類型
type myapp, domain;
type myapp_exec, exec_type, file_type;# myapp 允許以 myapp_exec 類型啟動
init_daemon_domain(myapp)# myapp 允許讀取 log 文件
allow myapp logd:unix_stream_socket connectto;# 允許 myapp 讀取某個配置文件
allow myapp myconfig_file:file { read open getattr };

解讀:

  • type myapp, domain;:定義了一個名為 myapp 的安全上下文(安全域)。

  • type myapp_exec, exec_type, file_type;:定義了 myapp 的可執行文件類型。

  • init_daemon_domain(myapp):允許它作為一個守護進程啟動(使用宏簡化配置)。

  • allow ... 是核心規則,定義主體如何訪問客體。


📁 四、文件上下文(.fc)

這個文件指定哪些路徑屬于哪種類型(用于掛載策略到文件系統):

# myapp.fc/system/bin/myapp        u:object_r:myapp_exec:s0
/data/myapp/config.xml   u:object_r:myconfig_file:s0

🛠? 五、策略編寫流程(開發者視角)

  1. 創建類型定義文件(如 myapp.te

  2. 指定文件上下文myapp.fc

  3. 構建并安裝模塊

    • 使用 checkmodulesemodule_package 工具將 .te 文件編譯成 .pp 模塊

  4. 加載策略模塊

semodule -i myapp.pp

Android使用自己的策略編譯系統(Android.bp + sepolicy),而不是手動運行這些命令。


🔍 六、常用allow語法

allow <subject> <object>:<class> <permissions>;

示例:

allow myapp sysfs:file { read open };
allow myapp system_file:dir { search };
allow myapp shell_exec:file { execute };
元素含義
subject進程類型(誰在訪問)
object被訪問的資源類型
class資源的類別,如 file、dir、socket 等
permissions允許的操作,如 readwriteopenexecute

🧪 七、開發時如何調試策略?

當 SELinux 阻止某項操作時,它會寫入 dmesg/var/log/audit.log(Android用logcat也能看到)。

日志格式大概如下:

avc: denied  { read } for pid=1234 comm="myapp" name="config.xml" dev="sda1" ino=12345 scontext=u:r:myapp:s0 tcontext=u:object_r:myconfig_file:s0 tclass=file
avc: denied  { read } for pid=1234 comm="myapp" name="config.xml" dev="sda1" ino=12345 scontext=u:r:myapp:s0 tcontext=u:object_r:myconfig_file:s0 tclass=file

?你可以用 audit2allow 工具自動生成建議的策略:

dmesg | audit2allow -m myapp

? 總結

內容要點
策略寫在 .te 文件allow 聲明訪問權限
每個文件/進程都有 contexttype 定義類型,.fc 綁定路徑
Android 使用宏(如 init_daemon_domain簡化復雜的策略編寫
日志審計是調試關鍵

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84232.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MQTT示例體驗(C)

1、通用依賴準備 安裝編譯工具? Linux/macOS 需安裝&#xff1a; sudo apt update && sudo apt install build-essential cmake git # Ubuntu/Debian:ml-citation{ref"6" data"citationList"} brew install cmake # macOSWindows 需安裝 CMake…

MySQL中的系統庫(簡介、performance_schema)

文章目錄 性能監控performance_schema1、performance schema入門2、performance_schema表的分類3、performance_schema的簡單配置與使用4、常用配置項的參數說明5、重要配置表的相關說明6、performance_schema實踐操作 Show processlist 性能監控 每次你提交完一個 sql 語句之…

【Ftrace 專欄】Ftrace 參考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析內核調用如何利用ftrace精確跟蹤特定進程調度信息使用 ftrace 進行追蹤延遲Linux-培訓筆記-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…

bug 記錄 - 使用 el-dialog 的 before-close 的坑

需求說明 彈窗中內嵌一個 form 表單 原始代碼 <script setup lang"ts"> import { reactive, ref } from "vue" import type { FormRules } from element-plus const ruleFormRef ref() interface RuleForm {name: stringregion: number | null } …

關鍵領域軟件測試的突圍之路:如何破解安全與效率的平衡難題

在數字化浪潮席卷全球的今天&#xff0c;軟件系統已成為國家關鍵領域的核心戰斗力。不同于普通商業軟件&#xff0c;這些承載著國家安全使命的軟件系統面臨著前所未有的質量挑戰——如何在確保絕對安全的前提下&#xff0c;實現高效測試與快速迭代&#xff1f;這一命題正考驗著…

老年生活照護實訓室建設規劃:照護質量評估與持續改進實訓體系

隨著人口老齡化程度的不斷加深&#xff0c;老年生活照護需求日益增長&#xff0c;對專業照護人才的培養提出了更高要求。老年生活照護實訓室建設方案作為培養高素質照護人才的重要載體&#xff0c;其核心在于構建科學完善的照護質量評估與持續改進實訓體系。通過該體系的建設&a…

Ctrl-Crash 助力交通安全:可控生成逼真車禍視頻,防患于未然

視頻擴散技術雖發展顯著&#xff0c;但多數駕駛數據集事故事件少&#xff0c;難以生成逼真車禍圖像&#xff0c;而提升交通安全又急需逼真可控的事故模擬。為此&#xff0c;論文提出可控車禍視頻生成模型 Ctrl-Crash&#xff0c;它以邊界框、碰撞類型、初始圖像幀等為條件&…

jieba實現和用RNN實現中文分詞的區別

Jieba 分詞和基于 RNN 的分詞在技術路線、實現機制、性能特點上有顯著差異&#xff0c;以下是核心對比&#xff1a; 1. 技術路線對比 維度Jieba 分詞RNN 神經網絡分詞范式傳統 NLP&#xff08;規則 統計&#xff09;深度學習&#xff08;端到端學習&#xff09;核心依賴詞典…

excel數據對比找不同:6種方法核對兩列數據差異

工作中&#xff0c;有時需要核對兩列數據的差異&#xff0c;用于對比、復核等。數據較少的情況下差異肉眼可見&#xff0c;數據量較大時用什么方法比較好呢&#xff1f;從個人習慣出發&#xff0c;我整理了6種方法供參考。 6種方法核對兩列數據差異&#xff1a; 1、Ctrl G定位…

C# 表達式和運算符(求值順序)

求值順序 表達式可以由許多嵌套的子表達式構成。子表達式的求值順序可以使表達式的最終值發生 變化。 例如&#xff0c;已知表達式3*52&#xff0c;依照子表達式的求值順序&#xff0c;有兩種可能的結果&#xff0c;如圖9-3所示。 如果乘法先執行&#xff0c;結果是17。如果5…

高頻面試之3Zookeeper

高頻面試之3Zookeeper 文章目錄 高頻面試之3Zookeeper3.1 常用命令3.2 選舉機制3.3 Zookeeper符合法則中哪兩個&#xff1f;3.4 Zookeeper腦裂3.5 Zookeeper用來干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 選舉機制 半數機制&#xff08;過半機制&#xff0…

CppCon 2015 學習:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ? 模式匹配就是一種“描述式”的寫法&#xff0c;不需要你手動判斷、提取數據&#xff0c;而是直接描述你希望的數據結構是什么樣子&#xff0c;系統自動判斷并提取。? 你給的定義拆解&#xff1a; ? Instead of …

刷題記錄(7)二叉樹

一、單值二叉樹 二叉樹為二叉鏈表形式&#xff0c;結點為&#xff1a; 大概看看題就知道這道題讓我們判斷一個樹到底所有結點的值是不是相同&#xff0c;相同就是單值二叉樹。在實現二叉樹相關操作的時候已經體會到了&#xff0c;遞歸來遍歷二叉樹是非常舒服的&#xff08;做這…

開源:FTP同步工具

文章目錄 簡介功能特性Windows (EXE)從源代碼構建依賴項Linux 構建Windows 構建 使用方法軟件截圖主界面FTP 設置快捷菜單定時設置 配置說明開發與貢獻許可證 歡迎來到盹貓的博客 本篇文章主要介紹了 [開源:FTP同步工具] ?博主廣交技術好友&#xff0c;喜歡我的文章的可以關注…

視頻質量測試點

目錄 功能/UI 端側性能 媒體質量 主觀 客觀 穩定性 兼容性 功能/UI 視頻預覽音頻預覽音視頻同步全屏收藏打賞 端側性能 PC端&#xff1a;內存占用、網絡帶寬占用等&#xff1b; 移動端&#xff1a;內存占用、功耗、發熱、流量消耗等&#xff1b; 媒體質量 主觀 音…

Ray框架:分布式AI訓練與調參實踐

Ray框架&#xff1a;分布式AI訓練與調參實踐 系統化學習人工智能網站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目錄 Ray框架&#xff1a;分布式AI訓練與調參實踐摘要引言框架架構解析1. 核心組件設計2. 關鍵技術實現2.1 動態資源調度2.2 …

成都鼎訊硬核科技!雷達目標與干擾模擬器,以卓越性能制勝電磁頻譜戰

在現代戰爭中&#xff0c;電磁頻譜已成為繼陸、海、空、天之后的 “第五維戰場”&#xff0c;雷達作為電磁頻譜領域的關鍵裝備&#xff0c;其干擾與抗干擾能力的較量&#xff0c;直接影響著戰爭的勝負走向。由成都鼎訊科技匠心打造的雷達目標與干擾模擬器&#xff0c;憑借數字射…

ubuntu22.04 安裝docker 和docker-compose

首先你要確保沒有docker環境或者使用命令刪掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安裝docker 更新軟件環境 sudo apt update sudo apt upgrade下載docker依賴和GPG 密鑰 # 依賴 apt-get install ca-certificates curl gnupg lsb-rel…

2025 后端自學UNIAPP【項目實戰:旅游項目】6、我的收藏頁面

代碼框架視圖 1、先添加一個獲取收藏景點的列表請求 【在文件my_api.js文件中添加】 // 引入公共的請求封裝 import http from ./my_http.js// 登錄接口&#xff08;適配服務端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…

20250609在榮品的PRO-RK3566開發板的Android13下解決串口可以執行命令但是腳本執行命令異常的問題

20250609在榮品的PRO-RK3566開發板的Android13下解決串口可以執行命令但是腳本執行命令異常的問題 2025/6/9 20:54 緣起&#xff0c;為了跨網段推流&#xff0c;千辛萬苦配置好了網絡參數。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在調試串口/DEBUG口正確執行。…