macOSに組み込まれているシステム整合性保護 (SIP: System Integrity Protection) 機能を一時的に無効化して、再度有効化するときの手順についてです。T2チップなどがなく、昔のmacOSでは単純に有効化するだけでも問題なかったと思うのですが、MacBook Pro 2020 M1 と macOS 12 Monterey の組み合わせでは問題が起きました。
システム整合性保護について
システム整合性保護 (SIP: System Integrity Protection) はOS X 10.11 ElCapitan から導入されたセキュリティ機能です。ルートアカウントを制限し、特定のディレクトリにはルート権限であっても変更ができなくなります。
詳細については、こちらをご覧ください。
Mac のシステム整合性保護について – Apple サポート (日本)
SIPの無効化について
この機能を無効化するということはセキュリティリスクの高い行為であるということははっきりしていますが、無効化する必要があるときがあります。例えば、KEXT (Kernel Extension) やDEXT (DriveKit Extension) などのドライバ開発時、CoreMediaIO DAL (Device Abtraction Layer) Pluginの開発時などです。
開発中のプログラムはデバッグ用のビルドになっていたり、一部をデバッガで実行したりします。また、本来のインストール先ディレクトリとは別のディレクトリで実行することもあります。このようなときにSIPによって制限されてしまうと開発中のプログラムを実行できません。そのため、開発中のプログラムを動かせるようにするためにSIPを無効化します。
SIPの無効化手順
SIPを無効化するには、次のように操作します。
(1) Macをリカバリーモードで起動する。
Apple Silicon Mac : システムをシャットダウンし、電源ボタンを押したままメッセージが表示され、押し続けるように指示されている間、電源ボタンを押したままにする。
Intel Mac : システムをシャットダウンし、USB接続キーボードの場合は、CommandキーとRキーを押したまま、電源を入れる。Bluetooth接続のキーボードの場合は、電源をオンにしたときのブート音が聞こえた直後にCommandキーとRキーを押しはじめて、押したままにする。
(2) ターミナルを起動する
(3) csrutil
で無効化する
% csrutil disable
(4) 再起動する
% reboot
SIPの有効化手順
開発がある程度終盤になり、リリースビルドに切り替えた後は、エンドユーザーと同じ場所にインストールして、エンドユーザーと同じ状態で動作試験を行います。その段階になったらSIPを有効化しましょう。SIPを有効化した後は、Notarizeも必要になります。
SIPの有効化するには、次のように操作します。本来はcsrutil enable
だけで戻るのですが、GateKeeperのキャッシュDBが壊れた状態になることがあり、次のような手順が必要でした。
(1) Macをリカバリーモードで起動し、ターミナルを起動する
(3) SIPの情報をクリアして、再起動する
% csrutil clear
% reboot
(4) Macをリカバリーモードで起動し、ターミナルを起動する
(5) KEXTの承認情報をクリアする
% kmutil trigger-panic-medic --volume-root /
(6) 再起動する
% reboot
(7) もう一度再起動する
(8) USB機器などを何かしらを接続する
(9) 「セキュリティ環境設定」を開き、認識されたドライバ類を承認する
(10) 再起動する
(11) Macをリカバリーモードで起動し、ターミナルを起動する
(12) SIPの設定を確認する
% csrutil status
(13) もし、disable
になっていたら、次のようにして有効化します。通常はclear
でenable
になっていると思います。
% csrutil enable
(14) 再起動する
% reboot
セキュリティポリシーが高セキュリティに戻っているので、サードパーティのKEXTはロードされません。サードパーティのKEXTが必要な場合は、セキュリティポリシーを変更してください。
手順(4)から(10)はドライバ(KEXT)の許可を取り消す操作です。こちらについては別の記事でも解説しています。

セキュリティポリシーについては、次の記事もご覧ください。
