SIP

許多 OS X 10.11 El Capitan Public Beta 的黑蘋果用戶,在這兩天升級至 Beta 3 之後,陸續傳出了災情...

  • 無法開機,因為 FakeSMC.kext 無法載入。
  • 即使勉強開機,修正或另外安裝的 kexts 也失效了(如網卡的驅動 kext,修正過的 AppleHDA.kext 音效,藍芽/WIFI/USB/Sata...等等)

這兩天爬了一些文,發現上述問題的原因,貌似和所謂的 SIP 有關。如果是的話,黑蘋果用戶恐怕又得開始擔心了...

什麼是 SIP?

SIP 全名是 System Integrity Protetion,詳細的介紹可以參考 Apple 的官方說明(網址)及 WIKI 說明(網址)。大意是 SIP 是 OS X 10.11 新增的安全機制,可分為三種類型:

  • 受保護的系統核心檔案
  • 受保護的運行中程序
  • Kext 必須被簽署驗證才能載入

為了保護系統磁區上的核心運作元件,系統只允許某些安裝程式和重要系統升級時才能更新異動。使用代碼注入(Code injection)或運行附加(runtime attachments)方式將不再被被允許了。而 SIP 運行的時候,沒有經過簽署的 Kexts 元件,都會被拒絕。

簡單來說,安全機制的概念是「Admin != kernel」,即使是最高管理權限的用戶,也無法任意更動核心元件。

AdminNotKernel

AdminNotKernel2

對白蘋果用戶來說,安全性更高了,用戶點擊惡意的檔案/連結且輸入管理密碼之後,系統被植入惡意程式的可能性大幅降低,可是對黑蘋果用戶來說,這安全機制恐怕會讓黑蘋果的漂白之路更加坎坷...

OS X 10.11 El Capitan 的 SIP 預設值是啟用的。在 Public Beta 2 以前,可用 NVRAM 內的參數 boot-args="rootless=0" 將 SIP 功能關閉,不過從 Public Beta3 開始, rootless 參數的開關方式就無效了(deprecated)。在白蘋果上,必須開機進入 Recover HD ,執行 Security Configuration ,取消勾選「Enforce System Integrity Protetion」才能將系統的 SIP 功能關閉。不過在黑蘋果上,這種透過 Recover HD 切換 SIP 的方式也是無效。

(註:OS X 10.11 El Capitan GM 版再度修改 SIP 的切換方式,拿掉了 Recover HD 模式下的 Security Configuration 的勾選設定方式。一樣是必須進入 Recover HD 開機之後,使用終端機輸入 csrutil enable/disable 指令進行切換。)

除此之外,磁碟的權限修復也有重大改變,以往用戶使用磁碟工具進行修復權限的方式將不復存在。

SIP 機制對黑蘋果的影響

Clover 使用 Inject Kexts 的方式,注入 EFI/CLOVER/kexts/10.11/ 底下的 kexts 也會被新的 SIP 安全機制拒絕。

以黑蘋果必要元件 FakeSMC.kext 為例,Public Beta 3 開始無法透過 Clover EFI 的 Inject Kexts 方式掛載,目前唯一的方式是必須將 FakeSMC.kexts 安裝到 S/L/E 目錄。不過別高興得太早,即使想盡辦法將 FakeSMC.kext 安裝運作,一旦 kernel Cache 被重建的時候(例如後來再安裝其他 Kext),FakeSMC.kext 會被認定為未簽署的 Kext,下次開機時 FakeSMC.kext 就會被拒絕載入,導致無法開機。

而 Clover 最常使用的 AppleHDA.kext 音效修正方式,也會跟著出問題。系統一旦發現 Kext 檔案被修改過,也會將它認定為未簽署的 Kext 而拒絕載入。更別說其他第三方 kext 套件,全被 SIP 擋在門外。

基於上述的安全機制,結果就是將你的黑蘋果系統立刻打回原形。如果你的黑蘋果必需使用一堆第三方 kext 外掛,或是大量修正原生 kext (如顯卡 FrameBuffer / 藍芽及網卡修正支援 Handoff)才能運作,被打回原形之後,恐怕連堪用都成問題。

所以了,為了將來黑蘋果之路能夠更加平順,一開始採購黑蘋果硬體的 OOB(Out of Box)策略就成了重點,能用最少的修正達到黑蘋果的目的,會減少很多冤枉路,三年前我寫的文章(黑蘋果採購指南:七、後記)就強調過這個重點。我的黑蘋果設備幾乎都是 OOB ,在這次升級之後,只有有線網卡失效,而音效透過 DSDT 修正之後, 至少還有 HDMI 可以用,算是災情很輕微的了。

一切的問題都圍繞在 SIP 機制上,黑蘋果用戶如果能夠關閉 SIP,相信問題就解決不少。

黑蘋果關閉 SIP 機制的方法

    1. 使用新版的 Clover EFI(v2.3k_r3252):下載 7311樓 的附件(網址)並安裝。
    2. 掛載 EFI ,並編輯 EFI/CLOVER/config.plist,在 RtVariablies 底下加上 BooterConfig = 0x28 與 CsrActiveConfig = 0x67 兩行。

config10.11b3

    3. 將 FakeSMC.kext (下載)安裝在 S/L/E。完成後重開機。(註:Clover v2.3k_r2359 已經支援關閉 SIP 後在 /EFI/CLOVER/kexts/10.11/*.kext 注入支援了!不需再安裝至 S/L/E 底下)

    4. 檢查是否已關閉 SIP:開啟終端機,輸入指令:

    csrutil status

SIP_disable

確認 SIP 已關閉之後,就可安裝三方 kext 了。

 

其他資料參考:@FredericJacobsThe Fight for RootClover General discussionSIP/Rootless Internal in El Capitan


升級到 10.11 Beta5 之後 USB 無法運作

不少人遇到升級到 Beta 5 之後,出現 USB 2 或 USB 3 無法運作的問題。我的黑蘋果主機板 GA-Z77X-UP4 TH 上面有三個 USB 2.0 10-pin header 插座,只有No.3 這個是正常的,其他兩個不會運作,而 USB 3.0 維持正常。

Z77X-UP4-TH_USB  

這個問題依舊導因於 Apple 修改了 USB 的運作規則,針對不同機型加上了指定 USB Port 的限制(Ports Restriction)。如果你的黑蘋果 DSDT 內容的 USB IO 名稱定義剛好落在 Apple 的限制範圍,就會發生這個問題。我的黑蘋果 DSDT 內的 USB 2.0 使用名稱 EHC1 / EHC2 跟 Apple 定義的都一樣,所以很不幸中招了。 

然而黑蘋果設備中 BCM94360CD WIFI + Bluetooth PCI-e 這個模組必須獨佔一個 USB 2.0 10-pin 插座,於是另一個需要 USB 2.0 10-pin 的讀卡機裝置就掛點了。有的主機板只有兩組以下的 USB 2.0 10-pin ,導致這些 USB 2.0 全數罷工。

解決方法有三種,擇一即可:

一、修改 AppleUSBEHCIPCI.kext/Info.plist

修改 S/L/E 底下 IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBEHCIPCI.kext/Contents/Info.plist 內容,找到對應的機型,刪除 port-count 與 ports 鍵值即可,就可取消 USB Ports Restriction 的限制。

iMac13.2EHCI  

(參考來源:insanelymac.com

二、修改 DSDT.aml

將 EHC1 / EHC2 變更為 EH01 / EH02,規避蘋果的 USB Ports Restriction 規則,這樣就不需修改 kext ,也就不用擔心 OS X 升級後 kext 被蓋掉的可能性。

EHC-EH0

三:修改 EFI/config.plist (*推薦)

修改 config.plist/ACPI/DSDT/Patches 加上兩個鍵值,作用原理和上面修改 DSDT.aml 一樣,都是將 EHCx 改為 EH0x 來規避蘋果的 USB Ports Restriction 規則。

<key>Patches</key>
<array>
	<dict>
		<key>Comment</key>
		<string>Rename EHC1 to EH01</string>
		<key>Find</key>
		<data>
		RUhDMQ==
		</data>
		<key>Replace</key>
		<data>
		RUgwMQ==
		</data>
	</dict>
	<dict>
		<key>Comment</key>
		<string>Rename EHC2 to EH02</string>
		<key>Find</key>
		<data>
		RUhDMg==
		</data>
		<key>Replace</key>
		<data>
		RUgwMg==
		</data>
	</dict>
</array>

如下:

EHC-EH0_config

不太清楚 Apple 為何要這麼做,著名的 RehabMan 大大的說法是, Apple 於 OS X El Capitan 10.11 重新改寫 USB 驅動,綁定更多且更依賴 ACPI 定義的內容,然而某些 Apple 自家 Mac 產品中也存在若干 ACPI 定義上的問題,所以又以 Kext 掛載的方式重新定義 USB 的屬性,再度加深了 OS X  與 Mac 硬體之間彼此綁定的程度。

對黑蘋果用戶來說,黑蘋果硬體屬性與 Mac 設備之間仍有些不同,外掛綁定暨定義的方式直接影響黑蘋果的 USB 運作,尤其是使用了相同名稱(詳見:[Guide] 10.11+ USB changes and solutions#Post 54),黑蘋果安裝與完美運行 OS X 的難度又拉高了。


OS X El Capitan 10.11 (Build 15A284) 已於台灣時間 2015.10.1 凌晨 01:00 於 Mac App Store 上架。安裝方式與預覽版相同,詳情可參考這篇文章

El Capitan on Mac App Store  

 

arrow
arrow
    全站熱搜

    benjenq 發表在 痞客邦 留言(12) 人氣()