LoginSignup
4
2

More than 5 years have passed since last update.

macOS High Sierra で、"vagrant up" が System Integrity Protecton (SIP) によって実行できない問題

Last updated at Posted at 2018-04-18

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 をインストールディスクからクリーンインストール

過程

  1. Virtualbox (5.1.32)をインストールしようとすると、「インストールを完了できません」的なメッセージが出てインストールができない
  2. ググってみてSIPが原因ぽいとわかったので、とりあえずcsrutil disableでSIPを無効化
  3. Virtualbox (5.1.32), Vagrant (2.0.3) をインストール
  4. Vagrant をセットアップしてvagrant upで起動を確認
  5. csrutil enableでSIPを有効化する
  6. vagrant upを試みるもエラーが出て起動できない 2018-04-18 10.36.48_ex.jpg

調査

SIP有効時

  • Virtualbox (5.1.32) ではなく、最新バージョンのVirtualbox (5.2.8)をSIPを一旦無効にしてからインストールしたが、やはり同じ結果だった
    ※古いVirtualboxをインストールしようとしたのは、VirtualboxとVagrantの連携が以前の最新バージョンではうまくいかなかったため
  • Virtualboxのイメージ設定画面を確認したが、ネットワークホストオンリーアダプターの名前指定プルダウンが”未選択”となっており、他に選択肢がなかった
  • Virtualboxのホストネットワークマネージャーから新たにアダプターを作成しようとしたが、エラーが出て作成できなかった 2018-04-18 10.37.46_ex.jpg

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の無効化はセキュリティリスクがありますので、実行される際は自己責任でお願いします。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2