
通常macOSではデフォルトでmacOSのシステム保護機能「SIP(System Integrity Protection)」が有効になっているが「NVRAM」など一部のコンポーネントのみSIPを無効にし、他のコンポーネントはSIPで保護する方法を紹介する。
INDEX
通常時の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ではエラーが出るコマンドが正常に実行できたら成功だ。
4. デフォルトのSIP設定に戻す場合
なお元の設定(SIPで全コンポーネントを保護する)に戻すには再びリカバリーモードを起動し、ターミナルで下記のフラグなしのコマンドを実行する。
csrutil enable
まとめ
一部のみとはいえSIPを無効にするのはセキュリティ的にリスクが伴うが、もしNVRAM関連のコマンドなどSIP有効時では実行できないコマンドを多用したり、SIPを常時オフにする必要があるアプリケーションを利用している場合はSIPを部分的に無効化したほうが少なくとも常時SIPを無効にするよりは安全だろう。