os x 10.11 中 root用戶無法刪除 /usr/bin/ 目錄下的程序


在 OS X 10.11 中引入的 Rootless

即使是root用戶,將無法對以下路徑有寫和執行權限:
/System
/bin
/sbin
/usr (except /usr/local)

 

  • 禁止直接對 /System/bin/sbin/usr 目錄的修改(/usr/local 目錄除外). 只有通過蘋果開發者認證的 app 才有權限對其修改.
  • 禁止注入系統進程. 某些需要注入系統進程(finder, messages 等等系統級別的進程)的程序, debugger 無法使用了.
  • 禁止加載內核擴展(kexts), 除非它們被蘋果開發者正確的簽名

這些修改最明顯的好處就是: 惡意 app 無法通過用戶授權的方式從而獲得所有系統權限了.

當然, 它帶來的副作用也是巨大的, 一些合法的 app 也無法獲得系統權限了. 比如: Homebrew, CocoaPods 以及所有需要在 /usr/bin 目錄下有可執行權限的 app.

 

Can someone elaborate on the OS X 10.11 feature called 'rootless'?

定義問題

Rootless討論的前提是假定root賬戶是OS X(或者其他Unix系統)中對抗惡意程序保護操作系統的最后一道防線。意思是一個應用程序一旦獲得了root賬戶權限,將會獲得系統的無限的權限。就可以進行實時修改、修改磁盤、替換任何系統文件等。

目前,許多傳統的Unix操作系統中,root賬戶都是被強密碼保護着的。這里的問題在於大部分的OS X系統基本上是單用戶系統,也就是不存在單獨的root賬戶密碼,root密碼就是管理員賬戶的密碼。簡單來說,蘋果通過以下途徑來獲取root權限:

大部分用戶會毫不猶豫的輸入密碼,都不會想他們到底授權了什么行為。更重要的是,授權給了什么應用程序。可以說,對於一般的無經驗用戶,他們沒有時間和專業知識來考慮這個問題。他們不會意識到他們一旦輸入了密碼,請求的進程就會獲得root權限。


什么是系統集成保護(System Integrity Protection)?

使用了系統集成保護,蘋果決定第三方應用有一些永遠不會被允許的事情。從某些層面來講,這種保護和iOS更像了。第三方應用相比起來更受限制。這就是rootless一詞的由來,系統在某種程度上限制了管理員賬號的權限。

rootless特性使得某些操作只有蘋果的應用可以被許可(通過代碼簽名來判斷)。所以第三方應用即使是運行在root權限中,有一些操作也無法完成。在我的測試中我注意到了以下幾點:

  1. /System文件夾下的所有文件都不能被蘋果應用意外的程序修改(例如各種安裝器和升級部件)
  2. 當前的API例如task_for_pid不能在系統進程下被調用了。這意味着以前注入系統進程(Finder、Messages或者系統內核)的程序都不能用了。
  3. 有意思的是,rootless依然允許已簽名的KEXT內核拓展被載入。問題是KEXT可以進行許多無限制的系統及操作。

總結

Rootless機制的目的很明顯是改進安全性和可靠性,使得惡意軟件以及木馬很難滲透進系統。我很確信他將成為許多惡意軟件開發者的一個挑戰,不過我也很確定人們會發現這一機制很多薄弱的環節。

這個特性對於一些合法的軟件有很多副作用。對此,蘋果提供了一種方法使得用戶可以關閉這個特性,但這需要用戶以恢復模式啟動(開機按住Command+R)

如果想了解更多,可以參考蘋果的WWDC session視頻。

 

解決辦法

將Rootless修改成了,enable,所以我們需要關掉它, 重啟電腦

按住 Command + R,進入到恢復界面
打開Terminal終端,然后輸入
csrutil disable
如果想改回來,將disable改成enable即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM