System Integrity Protection(SIP)
少し前の記事だが引用するとSystem Integrity Protection(以降 SIP)の概要は以下の通り。
El Capitanでは、スーパーユーザ(root)の機能が制限される。正確にいえば、新たに導入された「System Integrity Protection」と呼ばれる機構により、UNIX系OSでは伝統的にあらゆる処理が許可されるroot -- OS Xの場合、sudoersで許可されたユーザを含む -- から一部の権限を奪うというもの。具体的には、/usr以下など特定領域へのファイルの書き込みおよび削除がrootですら不可能になる。
マイナビニュース「新・OS X ハッキング! Terminalから見た「El Capitan」の変更点(1)」
https://news.mynavi.jp/article/osxhack-142/
概要
VirtualboxをVagrantと連携させたかったので、まずはVirtualboxをインストールしようとしたが、SIPによってインストールが完了できなかった。
その後、一時的にSIPを無効にすることによってVirtualboxはインストールを完了し、その他のセットアップも済ませたが、今度は vagrant up
できなかったので、その原因と対処法を調べた。
環境
iMac late2012 macOS High Sierra
※macOS High Sierra をインストールディスクからクリーンインストール
過程
- Virtualbox (5.1.32)をインストールしようとすると、「インストールを完了できません」的なメッセージが出てインストールができない
- ググってみてSIPが原因ぽいとわかったので、とりあえず
csrutil disable
でSIPを無効化 - Virtualbox (5.1.32), Vagrant (2.0.3) をインストール
- Vagrant をセットアップして
vagrant up
で起動を確認 -
csrutil enable
でSIPを有効化する -
vagrant up
を試みるもエラーが出て起動できない
調査
SIP有効時
- Virtualbox (5.1.32) ではなく、最新バージョンのVirtualbox (5.2.8)をSIPを一旦無効にしてからインストールしたが、やはり同じ結果だった
※古いVirtualboxをインストールしようとしたのは、VirtualboxとVagrantの連携が以前の最新バージョンではうまくいかなかったため - Virtualboxのイメージ設定画面を確認したが、ネットワークホストオンリーアダプターの名前指定プルダウンが”未選択”となっており、他に選択肢がなかった
- Virtualboxのホストネットワークマネージャーから新たにアダプターを作成しようとしたが、エラーが出て作成できなかった
SIP無効時
-
vagrant up
できているのでセットアップは完了している - Virtualboxのイメージ設定画面を確認したが、ネットワークホストオンリーアダプターの名前指定プルダウンが”vboxnet0”となっており、選択済みだった
まとめ
- SIPが
vagrant up
できない原因で、どうやらネットワークホストオンリーアダプターを邪魔しているようだ
※ホストオンリーアダプターはゲストOSとホストOSの通信に使用されるものだそうです - Virtualboxで上記アダプターを手動設定することによって、この現象を回避することはできない
対処
面倒なのでcsrutil disable
してしまう…と言いたいところだが、そもそもSIPはセキュリティのために導入された仕組みなので、やはりまずい。なので以下を参考に、部分的にSIPを無効化することとした。
SIPをもっと深く知ってみよう! 〜SIPは一体何を保護しているのか〜 - Qiita
いくつかオプションがあるようで、一番関係ありそうだったのが以下。
※安直ですが、”ドライバ”あたりが関係ありそうかと…
CSR_ALLOW_UNTRUSTED_KEXTS
未署名のkextの読み込み制限を解除するフラグです。
kextはKernel Extentionの略でデフォルトのカーネルを拡張する為のモジュールです。
例えば、ドライバがこれに該当します。
10.10以降からkextには署名が必須となっているようです。
上記に対応するオプションをつけてSPI有効化コマンドを実行。
csrutil enable --without kext
実行の結果、vagrant up
できるようになった。
結論
正直なところ、ここら辺は全く詳しくないので原因自体はよくわからなかった。
SIP有効化コマンドのオプションを見るに、Virtualboxのネットワークホストオンリーアダプターらへんで問題が起きていることはわかったが、
- 別の最新のMacで同様のセットアップを行なったが、特に問題なく完了した
- 他の Sierra から High Sierra にアップグレードしたMacでも特に問題なく同様の環境が使用できている
上記のことから、Virutualboxというよりかは、自前でクリーンインストールした際のSIPの挙動が、その他のマシンと違うのかもしれない(推測)。
どなたか詳しい方突っ込んでいただけるとありがたいです。
なお、SIPの無効化はセキュリティリスクがありますので、実行される際は自己責任でお願いします。