最近, 有用戶反應(yīng)在 OS X 10.11(以下簡(jiǎn)稱 10.11)下安裝 fir-cli 報(bào)錯(cuò), 報(bào)錯(cuò)的截圖如下:

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