NVRAMなど特定のコンポーネントのみSIPを無効にする方法

通常macOSではデフォルトでmacOSのシステム保護機能「SIP(System Integrity Protection)」が有効になっているが「NVRAM」など一部のコンポーネントのみSIPを無効にし、他のコンポーネントはSIPで保護する方法を紹介する。

通常時のSIPの動作

通常時のmacOSではSIPで全てのシステムが保護されている状態であり、一部のNVRAM関連のコマンドなどもエラーが出て実行できない。

例えば下記ターミナルコマンドはmacOSの次回起動をセーフブートで行うものだが、デフォルト状態のSIPではコマンドを実行してもエラーが出る。

sudo nvram boot-args="-x"

こうしたターミナルコマンドのエラーはリカバリーモードでSIPを無効にすれば実行可能になるが、SIPの完全無効化はmacOSのセキュリティが脆弱になるため、常時無効にするのはお勧めできない。

特定のコンポーネントのみSIPを無効にする方法

SIPの完全無効化は危険であるため、例えばNVRAMのみSIPを無効にするといったようにSIPの部分的な無効化を試してみよう。

なお、部分的とはいえSIPを無効にするのはセキュリティ的にリスクが伴うため、くれぐれも注意してほしい。

1. リカバリーモードからターミナルを起動してコマンドを実行

まずはMac起動時にCommand+Rキーを押してリカバリーモードを起動する。

リカバリーモードに入ったら「ユーティリティ」から「ターミナル」を起動し、下記のようなコマンドを実行する。

csrutil enable --without nvram

このコマンドでは「--without」というフラグにより、上記コマンドの場合はNVRAMのみSIPを無効にしている。

他のコンポーネントのSIPを無効にしたい場合は下記のリストを参照してほしい。

  • csrutil enable --without kext
  • csrutil enable --without fs
  • csrutil enable --without debug
  • csrutil enable --without dtrace
  • csrutil enable --no-internal

2. Macを通常起動してSIPのステータスを確認

部分的にSIPを無効にしたらMacを通常起動して下記コマンドでSIPのステータスを見てみよう。

csrutil status

SIPのステータスを見てみると、先ほどのコマンドでNVRAMのみSIPを無効にしたため「NVRAM Protections」の項目が「disabled」なっていることが確認できる。

ちなみに「Apple Internal」は通常時のSIPでも「disabled」である。

3. コマンドを実行して確認する

あとはターミナルで通常SIP有効時ではエラーが出るコマンドを実行して確認してみよう。

通常SIP有効時ではエラーが出た冒頭のコマンドが正常に実行できた

通常時のSIPではエラーが出るコマンドが正常に実行できたら成功だ。

4. デフォルトのSIP設定に戻す場合

なお元の設定(SIPで全コンポーネントを保護する)に戻すには再びリカバリーモードを起動し、ターミナルで下記のフラグなしのコマンドを実行する。

csrutil enable

まとめ

一部のみとはいえSIPを無効にするのはセキュリティ的にリスクが伴うが、もしNVRAM関連のコマンドなどSIP有効時では実行できないコマンドを多用したり、SIPを常時オフにする必要があるアプリケーションを利用している場合はSIPを部分的に無効化したほうが少なくとも常時SIPを無効にするよりは安全だろう。