Linux內核的兩種安全策略:基于inode的安全與基于文件路徑的安全

實現系統安全的策略

在Linux中,一切且為文件,實現系統安全的策略主要可分為兩種:基于inode的安全、基于文件路徑的安全。

基于inode的安全

為文件引入安全屬性,安全屬性不屬于文件內容,它是文件的元數據,應該與inode關聯,一些內核安全模塊將安全屬性存儲在文件的擴展屬性中,這種方式就是基于inode的安全。基于inode的安全的優點主要有兩個:

  • 文件的安全屬性與文件路徑無關。文件可以在不同目錄間移動,不管它怎么移動,其安全屬性都沒有變化。
  • 同一個文件可以有多個鏈接,從不同鏈接訪問文件,其安全屬性總是一樣的。

基于inode的安全的缺點是:

  • 文件系統必須支持擴展屬性,并且掛載文件系統時必須使用擴展屬性。
  • 刪除文件時,文件的安全屬性會隨之消失。再在原來的路徑處創建同名文件,并不能保證新文件和老文件的安全屬性相同。
  • 安裝軟件和升級軟件需要保證系統中新的文件具有正確的安全屬性。新文件來自軟件包,新的安全屬性自然也應該來自軟件包。于是就有了下一個要求:眾多軟件包格式也需要支持文件的擴展屬性,比如tar、cpio等。

基于inode的安全實現策略有SELinux、SMACK等。

基于路徑的安全

從用戶角度看,用戶通過路徑訪問文件,用戶態進程無法用inode號來訪問文件。即使是基于inode的安全,用戶讀寫安全屬性也需先通過路徑找到文件,然后才能訪問文件的安全屬性。那么能否將文件的安全屬性簡單地與文件路徑對應起來呢?比如/bin/bash 的安全屬性是“system-shell”,/usr/local/bin/bash 的安全屬性是“local-shell”。不把這些安全屬性存儲在文件的擴展屬性中,而是存儲在系統內部的一張表里,這就是基于路徑的安全的實現原理。這樣做的優點是:

  • 不需要文件系統有額外支持。
  • 不怕文件更新,對打包格式也沒有額外要求。用戶甚至可以為還不存在的文件定義安全屬性。

基于路徑的安全的缺點是:同一個文件可能有多個安全屬性,簡單地創建鏈接就可能讓文件擁有另一個安全屬性。

基于路徑的安全實現策略實現有Tomoyo、AppArmor等。

對文件讀取的安全策略

實現對文件讀取的安全策略也有兩種,一種是使用file_permission鉤子函數,另一種是使用inode_permission鉤子函數。它們的區別如下:

inode_permissionfile_permission 都與文件系統中的權限有關,但是它們的作用和范圍不同。

inode_permission 是指針對文件 inode 的權限控制,而 file_permission 則是針對打開的文件描述符的權限控制。

當一個文件被創建時,系統為其分配一個 inodeinode 存儲了文件的元數據,如訪問時間、修改時間、權限等信息),在對該文件進行權限控制時,操作系統會檢查進程是否有訪問該文件 inode 的權限,如果權限不足則拒絕訪問。這部分的權限控制由inode_permission 完成。

而開發者在使用系統調用(如 openreadwrite等)打開文件時可以得到一個文件描述符,通過該描述符可以對打開的文件進行操作。在這里,系統會檢查該進程是否有訪問該文件描述符所代表的文件的權限,并在權限不足的情況下拒絕訪問。這部分的權限控制就是由 file_permission 完成的。

因此,inode_permissionfile_permission 雖然都是與權限有關,但是控制的范圍不一樣。inode_permission 主要關注于文件所在的 inode層面,而 file_permission 則關注于打開的文件描述符層面,它們協同工作來保證文件的安全性。

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

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

相關文章

EV PV AC SPI CPI TCPI

SPI EV / PV CPI EV / ACCPI 1.25 SPI 0.8 PV 10 000 BAC 100 000EV PV * SPI 10 000 * 0.8 8000 AC EV / CPI 8000 / 1.25 6400TCPI (BAC - EV) / (BAC -AC) (100 000 - 8 000) / (100 000 - 6 400) 92 000 / 93 600 0.98290598

RabbitMQ面試題

1. 什么是MQ MQ 就是消息隊列。是軟件和軟件進行通信的中間件產品 2. MQ的優點 異步處理 - 相比于傳統的串行、并行方式,提高了系統吞吐量。 應用解耦 - 系統間通過消息通信,不用關心其他系統的處理。 流量削鋒 - 可以通過消息隊列長度控制請求量…

Selenium webdriver_manager根據瀏覽器版本自動下載對應驅動程序

前言 webdriver_manager是什么? webdriver_manager 是 Python 中的一個庫,用于管理 Web 驅動程序。它的作用是自動下載和設置不同瀏覽器(如 Chrome、Firefox、Edge 等)的 Web 驅動程序,以便在自動化測試中使用這些瀏…

每日一題:leetcode1338 3n塊披薩

給你一個披薩,它由 3n 塊不同大小的部分組成,現在你和你的朋友們需要按照如下規則來分披薩: 你挑選 任意 一塊披薩。Alice 將會挑選你所選擇的披薩逆時針方向的下一塊披薩。Bob 將會挑選你所選擇的披薩順時針方向的下一塊披薩。重復上述過程…

SCSS 學習筆記 和 vscode下載live sass compiler插件配置

1、下載livelive sass compiler插件并配置 // 在 已有代碼 下面 添加下面 代碼,一般剛剛下載打開最后一行是:// "liveSassCompile.settings.autoprefix": [],// 所以直接 把下面復制進去保存就行"liveSassCompile.settings.autoprefix&qu…

MySQL:在MySQL中實現toStartOfQuarter和toStartOfWeek等函數

文章目錄 在 MySQL 中實現 ClickHouse 日期函數:toStartOfYear/toStartOfQuarter/toStartOfMonth/toMonday/toStartOfWeektoStartOfYeartoStartOfQuartertoStartOfMonthtoStartOfWeek/toMonday 在 MySQL 中實現 ClickHouse 日期函數:toStartOfYear/toSta…

基于Java+SpringBoot+Vue的烏魯木齊南山冰雪旅游服務網站【源碼+論文+演示視頻+包運行成功】

博主介紹:?csdn特邀作者、博客專家、java領域優質創作者、博客之星,擅長Java、微信小程序、Python、Android等技術,專注于Java技術領域和畢業項目實戰? 🍅文末獲取源碼聯系🍅 👇🏻 精彩專欄推…

MVCC 是否徹底解決了事物的隔離性 ?

目錄 1. 什么是 MVCC 2. MVCC 是否徹底解決了事物的隔離性 3. MySQL 中如何實現共享鎖和排他鎖 4. MySQL 中如何實現悲觀鎖和樂觀鎖 1. 什么是 MVCC MVCC(Multi-Version Concurrency Control,多版本并發控制)是一種多版本并發控制機制&…

webpack 和 ts 簡單配置及使用

如何使用webpack 與 ts結合使用 新建項目 ,執行項目初始化 npm init -y會生成 {"name": "tsdemo01","version": "1.0.0","description": "","main": "index.js","scripts&…

Spring的ApplicationEvent簡單使用

ApplicationEvent以及Listener是Spring為我們提供的一個事件監聽、訂閱的實現,內部實現原理是觀察者設計模式,設計初衷也是為了系統業務邏輯之間的解耦,提高可擴展性以及可維護性。事件發布者并不需要考慮誰去監聽,監聽具體的實現…

自動駕駛數據集匯總

1.Nuscenes 數據集鏈接:nuScenes nuscenes數據集下有多個任務,涉及Detection(2D/3D)、Tracking、prediction、激光雷達分割、全景任務、規劃控制等多個任務; nuScenes數據集是一個具有三維目標注釋的大型自動駕駛數…

【ARM 嵌入式 編譯系列 10.3 -- GNU elfutils 工具小結】

文章目錄 什么是 GNU elfutils?GNU elfutils 常用工具有哪些?objcopy 常用參數有哪些?GNU binutils和GNU elfutils區別是什么?上篇文章:ARM 嵌入式 編譯系列 10.2 – 符號表與可執行程序分離詳細講解 什么是 GNU elfutils? GNU elfutils是一個開源的工具集,用于處理ELF…

2023-8-15差分矩陣

題目鏈接&#xff1a;差分矩陣 #include <iostream>using namespace std;const int N 1010;int n, m, q; int a[N][N], b[N][N];void insert(int x1, int y1, int x2, int y2, int c) {b[x1][y1] c;b[x1][y2 1] - c;b[x2 1][y1] - c;b[x2 1][y2 1] c; }int main…

基于SOLIDWORKS配置功能建立塑料模具標準件庫

在塑料模具的設計過程中&#xff0c;建立其三維模型對于后續進行CAE分析和CAM加工是非常重要的。除了型腔和型芯以外&#xff0c;塑料模具中的標準件很多&#xff0c;如推桿、導柱、導套、推板、限位釘等&#xff0c;這些對于不同的產品是需要反復調用的。目前&#xff0c;我國…

汽車OTA活動高質量發展的“常”與“新”

伴隨著車主的頻繁崔更&#xff0c;車企除了卷硬件、拼價格&#xff0c;逐漸將精力轉移到汽車全生命周期的常用常新。時至下半年&#xff0c;車企OTA圈愈發熱鬧&#xff0c;以新勢力、新實力為代表新一代車企&#xff0c;OTA運營活動逐漸進入高質量發展期。 所謂高質量&#xf…

記錄--webpack和vite原理

這里給大家分享我在網上總結出來的一些知識&#xff0c;希望對大家有所幫助 前言 每次用vite創建項目秒建好&#xff0c;前幾天用vue-cli創建了一個項目&#xff0c;足足等了我一分鐘&#xff0c;那為什么用 vite 比 webpack 要快呢&#xff0c;這篇文章帶你梳理清楚它們的原理…

FFmpeg 靜態庫編譯錯誤匯總

今天使用靜態庫編譯發現 了錯誤 這個只有在arm64 的編譯上 存在 。armeabi-v7a不存在問題 ld: error: relocation R_AARCH64_ADD_ABS_LO12_NC cannot be used against symbol ff_cos_16384; recompile with -fPIC 解決方案列舉匯總 有很多 大家如果有同樣的問題可以一一測試。…

c++ 虛函數

虛函數的作用就是當一個類繼承另一個類時&#xff0c;兩個類有同名函數&#xff0c;當你使用指針調用時你希望使用子類的函數而不是父類的函數&#xff0c;那么請使用 virutal 和 override 關鍵詞 看代碼&#xff1a; #include <iostream> #include <string> #in…

Kotlin開發筆記:集合和逆變協變

Kotlin開發筆記&#xff1a;集合和逆變協變 Kotlin中的集合 基本的集合類型 Kotlin中的集合類型和Java差不多&#xff0c;不過有些在名稱上可能有出入&#xff0c;下面是Kotlin中的一些基本集合類型&#xff1a; 類型介紹Pair兩個值的元組Triple三個值的元組Array經過索引的…

去掉鼠標系列之一: 語雀快捷鍵使用指南

其實應該是系列之二了&#xff0c;因為前面寫了一個關于Interlij IDEA的快捷鍵了。 為什么要寫這個了&#xff0c;主要是覺得一會兒用鼠標&#xff0c;一會兒鍵盤&#xff0c;一點兒不酷&#xff0c;我希望可以一直用鍵盤&#xff0c;拋開鼠標。后面陸續記錄一下各個軟件的快捷…