關於作者
E-moss,程式設計師,愛好閱讀和擼狗,主要從事iOS開發工作,公眾號:知本集。
主要分享和編寫技術方面文章,不定期分享讀書筆記,亦可訪問“知本集”Git地址:https://github.com/knowtheroot/KnowTheRoot_iOS,歡迎提出問題和討論。
複製程式碼
一、前言
什麼是BSD層?
BSD層是建立在Mach之上,是XUN中一個不可分割的一部分。BSD負責提供可靠的、現代的API。其內容包括:
- UNIX程式模型
- POSIX執行緒模型及相關的同步原語
- UNIX使用者和組
- 網路協議棧
- 檔案訪問系統
- 裝置訪問
二、BSD的相關特性
儘管XUN的絕對核心是Mach,但是XUN向使用者態提供的主要介面是BSD介面。
1.sysctl
sysctl命令用於執行時配置核心引數,這些引數位於/proc/sys目錄下。
在openBSD的描述為:
The sysctl utility retrieves kernel state and allows processes with appropriate privilege to set kernel state. The state to be retrieved or set is described using a “Management Information Base” (MIB) style name, using a dotted set of components.
sysctl(8)命令算得上是一種訪問核心內部狀態的標準方法。
作用
通過使用這條命令,系統管理員可以直接查詢核心變數的值,獲得重要的執行時診斷資訊。
ps:只有非常少量的變數會通過這種方式匯出。
核心元件可以在執行時註冊額外的sysctl變數值,甚至增加整個名稱空間。
2.kqueue
定義:
kqueue是BSD中使用的核心事件通知機制。
功能:
一個kqueue指的是一個描述符,這個描述符會阻塞等待直到一個特定的型別和種類的事件發生。
作用:
使用者態或者核心的程式可以等待這個描述符,因而kqueue提供了一種用於一個或多個程式同步的簡單且高效的方法。
kqueue和kevent(表示事件的資料結構)構成了核心非同步I/O的基礎。
3.審計(OS X)
OS X實現了最基本的安全模組BSM。
審計子系統對OS X的價值是最大的,而對iOS意義不大,因為iOS沒有啟用審計。
ps:由於審計是一個和安全密切相關的操作,因此必須在核心層面執行。
4.強制訪問控制(MAC)
MAC:既Mandatory Access Control,強制訪問控制。
關鍵概念
MAC中的關鍵概念是標籤(label),標籤指的是一個預定義的分類,系統中的檔案集合或其他物件都可以應用這個標籤分類。
可以想象諜戰片中給檔案打上“機密”、“最高機密”等標籤
匹配標籤
如果請求訪問的物件沒有提供匹配的標籤,那麼MAC就會拒絕訪問請求。
每一個系統呼叫首先必須通過MAC的驗證,然後才能真正處理來自使用者態的請求。
用途
MAC是OS X的隔離機制既“沙盒機制”的基礎。