Rootless 的說明
在OS X 10.11中蘋果引入的Rootless機(jī)制含滴。
關(guān)于Rootless的小小說明:
Rootless討論的前提是假定root賬戶是OS
X(或者其他Unix系統(tǒng))中對(duì)抗惡意程序保護(hù)操作系統(tǒng)的最后一道防線遭商。意思是一個(gè)應(yīng)用程序一旦獲得了root賬戶權(quán)限日月,將會(huì)獲得系統(tǒng)的無限的權(quán)限幽告。就可以進(jìn)行實(shí)時(shí)修改鉴逞、修改磁盤愉老、替換任何系統(tǒng)文件等驶兜。
目前吞鸭,許多傳統(tǒng)的Unix操作系統(tǒng)中珊蟀,root賬戶都是被強(qiáng)密碼保護(hù)著的菊值。這里的問題在于大部分的OS X系統(tǒng)基本上是單用戶系統(tǒng),也就是不存在單獨(dú)的root賬戶密碼育灸,root密碼就是管理員賬戶的密碼腻窒。簡(jiǎn)單來說,蘋果通過以下途徑來獲取root權(quán)限:大部分用戶會(huì)毫不猶豫的輸入密碼磅崭,都不會(huì)想他們到底授權(quán)了什么行為儿子。更重要的是,授權(quán)給了什么應(yīng)用程序砸喻∪岜疲可以說,對(duì)于一般的無經(jīng)驗(yàn)用戶割岛,他們沒有時(shí)間和專業(yè)知識(shí)來考慮這個(gè)問題愉适。他們不會(huì)意識(shí)到他們一旦輸入了密碼,請(qǐng)求的進(jìn)程就會(huì)獲得root權(quán)限癣漆。
什么是系統(tǒng)集成保護(hù)(System Integrity Protection)维咸?
使用了系統(tǒng)集成保護(hù),蘋果決定第三方應(yīng)用有一些永遠(yuǎn)不會(huì)被允許的事情惠爽。從某些層面來講癌蓖,這種保護(hù)和iOS更像了。第三方應(yīng)用相比起來更受限制疆股。這就是rootless一詞的由來费坊,系統(tǒng)在某種程度上限制了管理員賬號(hào)的權(quán)限。
rootless特性使得某些操作只有蘋果的應(yīng)用可以被許可(通過代碼簽名來判斷)旬痹。所以第三方應(yīng)用即使是運(yùn)行在root權(quán)限中附井,有一些操作也無法完成讨越。在我的測(cè)試中我注意到了以下幾點(diǎn):
/System文件夾下的所有文件都不能被蘋果應(yīng)用以外的程序修改(例如各種安裝器和升級(jí)部件)
當(dāng)前的API例如task_for_pid不能在系統(tǒng)進(jìn)程下被調(diào)用了。這意味著以前注入系統(tǒng)進(jìn)程(Finder永毅、Messages或者系統(tǒng)內(nèi)核)的程序都不能用了把跨。
有意思的是,rootless依然允許已簽名的KEXT內(nèi)核拓展被載入沼死。問題是KEXT可以進(jìn)行許多無限制的系統(tǒng)及操作着逐。
** 總結(jié) **
Rootless機(jī)制的目的很明顯是改進(jìn)安全性和可靠性,使得惡意軟件以及木馬很難滲透進(jìn)系統(tǒng)意蛀。我很確信他將成為許多惡意軟件開發(fā)者的一個(gè)挑戰(zhàn)耸别,不過我也很確定人們會(huì)發(fā)現(xiàn)這一機(jī)制很多薄弱的環(huán)節(jié)。
這個(gè)特性對(duì)于一些合法的軟件有很多副作用县钥。對(duì)此秀姐,蘋果提供了一種方法使得用戶可以關(guān)閉這個(gè)特性,但這需要用戶以恢復(fù)模式啟動(dòng)(開機(jī)按住Command+R)
如果想了解更多若贮,可以參考蘋果的WWDC session視頻省有。
rootless 的關(guān)閉方法
更新后的關(guān)閉方法,兼容Beta7: (在正式版中一樣有效親試)
- 開機(jī)按住Command+R,進(jìn)入恢復(fù)模式谴麦,打開terminal蠢沿,鍵入:
csrutil disable
回車,重新啟動(dòng)即可匾效。
要重新恢復(fù)舷蟀,只需將disable改為enable
csrutil enable
圖文教程:
先關(guān)機(jī)
-
先按住 command + r 不要松 再按 開機(jī)鍵 (開機(jī)鍵可以送 command + r 不可送)
Snip20151009_2.png -
之后會(huì)看到系統(tǒng)加載進(jìn)度 (command + r 這個(gè)時(shí)候還是不可以松的)
Snip20151009_3.png -
見到這個(gè)界面的時(shí)候松開 (command + r)
Snip20151009_4.png -
打開終端
Snip20151009_5.png -
輸入
Snip20151009_6.png -
回車 見到 表示已近成功
Snip20151009_7.png 重啟電腦,這樣就可以盡情的使用cocoapods 了
注意:
這兩個(gè)指令已經(jīng)失效弧轧。
這個(gè)是關(guān)閉的指令:
sudo nvram boot-args="kext-dev-mode=1 rootless=0";sudo reboot
這個(gè)是開啟的指令:
sudo nvram -d boot-args && sudo reboot
cocoa pods 不能正常的原因
cocoa pods不能正常使用的在于蘋果開啟了 rootless 導(dǎo)致
/usr/bin
文件夾我們不能進(jìn)行正常的讀寫
如果是第一次在OS X 10.11下安裝 cocoa pod ( sudo gem install cocoa pods
)見到的錯(cuò)誤就是
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/xcodeproj
也就是我們沒有權(quán)限操作這個(gè)文件夾xcodeproj 執(zhí)行內(nèi)部的代碼
這個(gè)是我關(guān)閉 rootless 后的效果
和在10.10 系統(tǒng)下使用沒有區(qū)別雪侥。不會(huì)出現(xiàn)警告和錯(cuò)誤碗殷。
參考的相關(guān)博客:
OS X 10.11 安裝Cocoapods 出現(xiàn)問題的解決方法
Mac升級(jí)10.11后Xcode的CocoaPods插件報(bào)錯(cuò) 這個(gè)問題也是系統(tǒng)升級(jí)導(dǎo)致的精绎,解決的。
OS X 10.11 安裝Cocoapods 出現(xiàn)有關(guān)問題的解決辦法
關(guān)于 mac OSX 10.11 下 Rootless 模式的一些見解
安裝Cocoapods锌妻, 更新gem出現(xiàn)的問題
stackoverflow 類似問題的解答
OS X 10.11中Rootless的實(shí)現(xiàn)與解釋以及關(guān)閉方法