最近, 有用戶反應(yīng)在 OS X 10.11(以下簡稱 10.11)下安裝 fir-cli 報(bào)錯, 報(bào)錯的截圖如下:
從報(bào)錯信息上來看岩榆,是操作系統(tǒng)權(quán)限的問題错负,可是用戶執(zhí)行命令的時候已經(jīng)使用了 sudo 了, 為什么還報(bào)錯呢? 事實(shí)上, 這就是 10.11 新增的 Rootless 引起的.
什么是 Rootless 呢?
知乎上有篇 文章 解釋的很清楚。簡單的來說, Rootless 機(jī)制限制了 Root 賬戶的權(quán)限, 使其沒有了對系統(tǒng)的完全控制權(quán).
受到權(quán)限影響的有以下幾點(diǎn):
- 禁止直接對 /System, /bin, /sbin, /usr 目錄的修改(/usr/local 目錄除外). 只有通過蘋果開發(fā)者認(rèn)證的 app 才有權(quán)限對其修改.
- 禁止注入系統(tǒng)進(jìn)程. 某些需要注入系統(tǒng)進(jìn)程(finder, messages 等等系統(tǒng)級別的進(jìn)程)的程序, debugger 無法使用了.
- 禁止加載內(nèi)核擴(kuò)展(kexts), 除非它們被蘋果開發(fā)者正確的簽名
這些修改最明顯的好處就是: 惡意 app 無法通過用戶授權(quán)的方式從而獲得所有系統(tǒng)權(quán)限了.
當(dāng)然, 它帶來的副作用也是巨大的, 一些合法的 app 也無法獲得系統(tǒng)權(quán)限了. 比如: Homebrew, CocoaPods 以及所有需要在 /usr/bin 目錄下有可執(zhí)行權(quán)限的 app.
如何解決合法 app 也報(bào)錯的問題呢?
-
對于 CocoaPods, fir-cli 等以 Ruby Gem 包形式發(fā)布的 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
開機(jī)按住Command+R 直接關(guān)閉 Rootless(由于 osx 系統(tǒng)的升級, 這種方式不一定能生效)
我個人認(rèn)為, Rootless 這種做法, 使得 OS X 系統(tǒng)越來越趨于封閉, 越來越像 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
fir.im - Spirit