【深入解析MAX OSX & iOS操作系統(tǒng)】讀書筆記 —— OS X 和 iOS 使用的技術(shù)

作為一個BSD衍生的操作系統(tǒng),OSX繼承了很多BSD的特性,包括POSIX系統(tǒng)調(diào)用、一些BSD擴展(內(nèi)核隊列)以及BSD的強制訪問控制。

蘋果新增的內(nèi)容:“沙盒”機制。替換了原本系統(tǒng)配置的/etc目錄。標準的UNIX syslog被AppleSystem Log增強了。還有FSEvents新技術(shù)。

BSD相關特性

盡管XNU的絕對的核心是Mach,但XNU向用戶態(tài)展現(xiàn)出來的主要接口是BSD層。

sysctl

sysctl(8)訪問內(nèi)核內(nèi)部狀態(tài)的標準方法。直接查詢內(nèi)核變量的值,獲得重要的運行時診斷信息。也可以設置可寫變量的值。

sysctl預定義的名稱空間
命令:sysctl user   // 列出user名稱空間下的所有內(nèi)核變量

內(nèi)核組件也可以在運行會注冊額外的sysctl變量值,甚至增加整個名稱空間。

sysctl變量的范圍很廣,包括從一些簡單的調(diào)試變量到其他可控制整個子系統(tǒng)行為的讀寫變量。ps和netstat都依賴于sysctl獲得PID和socket系列,當然也可以通過其他方式獲得。

kqueue

kqueue是BSD中使用的內(nèi)核事件通知機制。一個kqueue指的是一個描述符,這個描述符會阻塞等待知道一個特定類型和種類的事件發(fā)生。用戶態(tài)的進程(或內(nèi)核)可以等待這個描述符,因為kqueue提供了一種用于一個或多個進程同步的簡單高效的方法。

kqueue和對應的kevent(表示事件的數(shù)據(jù)結(jié)構(gòu))構(gòu)成了內(nèi)核異步I/O的基礎。

審計(OSX)

審計是OSX中一個自包含的子系統(tǒng)。主要的用戶態(tài)組件是auditd,由launchd根據(jù)需要而啟動的后臺服務進程。這個后臺服務進程不負責實際的審計日志記錄,審計日志記錄是由內(nèi)核本身直接完成的。然后這個后臺服務進程能控制內(nèi)核。

如果啟用了審計,那么XNU中編號從350到359的系統(tǒng)調(diào)用都被分配用于啟用和控制審計。

強制訪問控制(MAC)

添加了對象級別的安全性,限制特定進程針對具體文件或資源的訪問權(quán)限。可以控制一個給定的應用程序不允許訪問用戶的私有數(shù)據(jù)或某網(wǎng)站。

從內(nèi)核的角度看,在各種系統(tǒng)調(diào)用的實現(xiàn)中插入了對MAC的調(diào)用,每一個系統(tǒng)調(diào)用都必須先通過MAC的驗證,然后才能真正處理來自用戶態(tài)的請求。

MAC是OSX的隔離機制和iOS的entitlement機制的基礎。

OSX和iOS特有的技術(shù)

用戶和組的管理

UNIX從傳統(tǒng)上都依賴密碼文件/etc/passwd 和保存密碼的散列文件/etc/shadow。在OSX單用戶(以及iOS)中,使用/etc/master.passwd作為shadow文件,其他情況都放棄了這些密碼文件,使用自己的目錄服務

目錄服務的維護的內(nèi)容不僅僅是用戶和用戶組,還保存了系統(tǒng)配置和很多其他方面的信息。

系統(tǒng)配置

OSX還拋棄了大部分其他配置文件,這些配置文件傳統(tǒng)上在UNIX中是當做系統(tǒng)“注冊表”使用的。

為了維護系統(tǒng)配置,OSX和IOS使用了一個特殊的守護程序——configd(8),這個守護程序可以加載額外的可加載的bundle(插件),這個bundle位于/System/Library/SystemConfiguration下,包含IP和IPv6配置、日志以及其他bundle。

可通過工具scutil來流量和查詢系統(tǒng)配置。

記錄日志

OSX也繼承了傳統(tǒng)UNIX的系統(tǒng)日志功能。OSX10.4引入新的日志模型,ASL,提供了更多特性,例如過濾和搜索。

ASL采用模塊化設置,同時提供了以下四種日志接口:

  • 向后兼容syslogd
  • 網(wǎng)絡協(xié)議syslogd
  • 內(nèi)核日志接口
  • 全新的ASL接口

ASL日志收集在/var/log/asl目錄中。aslmanager(8)命令負責管理這些日志,launchd自動運行這條命令。

ASL日志采用的是二進制格式,而不是syslog采用的文本文件。日志文件變小了,但不像syslog那么對grep友好。OSX包含了syslog()命令用于顯示和查看日志,并提供了搜索和過濾的功能。

Apple事件和AppleScript

OSX有非常強大的支持腳本的能力。通過osascript(1)命令和友好的Automator應用程序可以訪問AppleScript

FSEvents

FSEvents是文件系統(tǒng)的通知API,應用程序可以簡單快速地響應文件添加、修改和刪除事件。

通知

OSX提供了一個系統(tǒng)級的通知機制,這是分布式IPC的一種形式。

通知機制核心部分在于notifyd(8)守護進程,在系統(tǒng)引導時啟動,這是Darwin的通知服務器。

其他重要API

  • GCD
    • 一個系統(tǒng)級的并行化框架,使用了工作隊列擴展,建立在pthread API之上
  • Launch Daemon
    • 同一管理UNIX系統(tǒng)守護程序,還管理Mach自舉服務器
  • XPC
    • 高級IPC框架,實現(xiàn)進程間特權(quán)的分離
  • kdebug
    • 可以在內(nèi)核層級跟蹤系統(tǒng)調(diào)用和Mach陷阱
  • 系統(tǒng)套接字
    • PF_SYSTEM 名稱空間的套接字,允許在內(nèi)核態(tài)的組件進行通信
  • Mach API
    • 直接提供了XNU的Mach核心的接口,某些情況比高層BSD/POSIX接口更強大
  • I/O Kit API
    • 用于和設備驅(qū)動程序通信的APi,提供了大量診斷信息。

OSX和iOS安全機制

代碼簽名

沙盒化

  • 無法突破應用程序目錄之外的位置
  • 無法訪問系統(tǒng)上的其他進程
  • 無法直接使用任何硬件設備,只能通過蘋果提供的框架
  • 無法動態(tài)生成代碼
  • 應用程序的root權(quán)限不存在

Entitlement可以將一些表現(xiàn)行為良好的應用程序單獨從監(jiān)禁中釋放出來。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容