天天看點

關于 mac OSX 10.11 下 Rootless 模式的一些見解

最近, 有使用者反應在 OS X 10.11(以下簡稱 10.11)下安裝 fir-cli 報錯, 報錯的截圖如下:

關于 mac OSX 10.11 下 Rootless 模式的一些見解

從報錯資訊上來看, 是作業系統權限的問題, 可是使用者執行指令的時候已經使用了 sudo 了, 為什麼還報錯呢?

事實上, 這就是 10.11 新增的 Rootless 引起的.

那麼什麼是 Rootless 呢?

知乎上有篇 文章 解釋的很清楚, 簡單的來說, Rootless 機制限制了 Root 賬戶的權限, 使其沒有了對系統的完全控制權.

受到權限影響的有以下幾點:

  • 禁止直接對

    /System

    ,

    /bin

    ,

    /sbin

    ,

    /usr

    目錄的修改(

    /usr/local

    目錄除外). 隻有通過蘋果開發者認證的 app 才有權限對其修改.
  • 禁止注入系統程序. 某些需要注入系統程序(finder, messages 等等系統級别的程序)的程式, debugger 無法使用了.
  • 禁止加載核心擴充(kexts), 除非它們被蘋果開發者正确的簽名

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

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

/usr/bin

目錄下有可執行權限的 app.

如何解決合法 app 也報錯的問題呢?

  • 對于 CocoaPods, fir-cli 等以 Ruby Gem 包形式釋出的 app, 有以下三種解決辦法:
    1. 使用 RVM 安裝 Ruby, 再安裝 fir-cli(推薦)
      # Install RVM:
      $ \curl -sSL https://get.rvm.io | bash -s stable --ruby
      
      $ gem install fir-cli
                 
    2. 指定 fir-cli 中 bin 檔案的 PATH
      $ export PATH=/usr/local/bin:$PATH;sudo gem install -n /usr/local/bin fir-cli
                 
    3. 重寫 Ruby Gem 的 bindir
      $ echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc
      $ sudo gem install fir-cli
                 
  • 對于 homebrew 安裝的某些 app, 需要 app 作者修改其安裝路徑, 修改為

    /usr/local/bin

  • 開機按住Command+R 直接關閉 Rootless(由于 osx 系統的更新, 這種方式不一定能生效)

我個人認為, Rootless 這種做法, 使得 OS X 系統越來越趨于封閉, 越來越像 Windows.

What is the freedom?

Freedom is the power to decide what your computer does, and the only way to have this freedom is to know what your computer is doing.

Freedom is a computer that is without secrets, one where everything can be known if you care enough to find out.

-- The Linux Command Line

繼續閱讀