iOS底層系統:BSD層詳解

cjlcooper發表於2019-05-07

關於作者

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的隔離機制既“沙盒機制”的基礎。

相關文章