iOS底層系統:BSD層詳解

關於做者

E-moss,程序員,愛好閱讀和擼狗,主要從事iOS開發工做,公衆號:知本集。  
主要分享和編寫技術方面文章,不按期分享讀書筆記,亦可訪問「知本集」Git地址:https://github.com/knowtheroot/KnowTheRoot_iOS,歡迎提出問題和討論。
複製代碼

Git地址:github.com/knowtheroot…git

1、前言

什麼是BSD層?

BSD層是創建在Mach之上,是XNU中一個不可分割的一部分。BSD負責提供可靠的、現代的API。其內容包括:程序員

  • UNIX進程模型
  • POSIX線程模型及相關的同步原語
  • UNIX用戶和組
  • 網絡協議棧
  • 文件訪問系統
  • 設備訪問

2、BSD的相關特性

儘管XUN的絕對核心是Mach,可是XUN向用戶態提供的主要接口是BSD接口github

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.bash

sysctl(8)命令算得上是一種訪問內核內部狀態的標準方法。網絡

做用

經過使用這條命令,系統管理員能夠直接查詢內核變量的值,得到重要的運行時診斷信息
ps:只有很是少許的變量會經過這種方式導出。
內核組件能夠在運行時註冊額外的sysctl變量值,甚至增長整個名稱空間。數據結構

2.kqueue

定義:

kqueue是BSD中使用的內核事件通知機制。app

功能:

一個kqueue指的是一個描述符,這個描述符會阻塞等待直到一個特定的類型和種類的事件發生異步

做用:

用戶態或者內核的進程能夠等待這個描述符,於是kqueue提供了一種用於一個或多個進程同步的簡單且高效的方法spa

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

相關文章
相關標籤/搜索