macOsで「ルートレス」として知られるシステム整合性保護(SIP)を無効にする方法[OS X]


157

Appleは、OS X 10.11、El Capitanで「ルートレス」としても知られるSystem Integrity Protectionを導入しました。これはマルウェアに対する一般的な保護のステップであることを理解していますが、開発者として、ロックされているファイルの一部への書き込みアクセスが必要です。

この保護を無効にするにはどうすればよいですか?


2
すべてのSIPの側面を修正できますが、これには多くのエントリがあります-システムを危険にさらすことにより、クライアントのマシンで実行されないものを構築していることに注意してください。
モッティシュニーア

5
@Motti Shneor-ただし、場合によっては、開発目的でいくつかのSDKをインストールするための書き込みアクセス権を得るために、これをオフにする必要があります。これは、クライアントが同じことをすることを必要としません。
defaultNINJA

私はルートレスのロジックを理解しようとしてUNIXの背景から来ました:それはコンピュータがシングルユーザーマシンである可能性が高いため、すべてがユーザーのホームディレクトリにインストールされるため、システムディレクトリを混乱させる必要はありません/ usr / share / vim /など。
ケミン周

回答:


148

Appleのドキュメントは、SIPを無効にカバーし、お使いのMac上のシステムの整合性の保護について設定システムの整合性の保護

lifehacker.comの記事には次の手順が記載されています。

  1. コンピューターを再起動し、Appleロゴが画面に表示されるまでCommand+ を押して、Macを回復モードで再起動しますR
  2. [ユーティリティ]> [ターミナル]をクリックします。
  3. ターミナルウィンドウで、入力しcsrutil disable、を押しEnterます。
  4. Macを再起動します。

ls大文字のO(ゼロ0ではない)を使用してこのコマンドを発行し、長いリストフラグを変更することにより、ファイルまたはフォルダーが制限されているかどうかを確認できます。

ls -lO /System /usr 

SIPが実施される場所を示す制限付きテキストを探します。

デフォルト(= SIP対応)では、次のフォルダーが制限されています(Appleサポートページを参照)。

/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X

...および次のフォルダは無料です:

/Applications
/Library
/usr/local

1
実行中ls -lO /usr/localは制限付きとしてマークされていません。また、/usr/local/再帰的にchowndしました。しかし、私はrootがhomebrewの所有権を取り/usr/local/bin/usr/local/shareそれがhomebrewに影響を与えるのを見続けています。これもSIPの仕事ですか?
-SaxDaddy

1
@SaxDaddy /usr/local制限されていない限り、このディレクトリの「下」にある権限を簡単に修正できます。Homebrewは、実際にはsudo chown -R $(whoami) /usr/local(管理者ユーザーとしてログインしている間)実行して、アクセス許可の問題を修正することを推奨しています。
nohillside

4
@SaxDaddy偶然にSophos Anti-Virusを使用していますか?ソフォスには、これらのディレクトリの権限を変更するという既知の問題があります。コミュニティフォーラムのスレッドによると「まもなく」更新される予定です。
NDオタク

1
@NDGeek:+1:素晴らしい、ありがとう!正しく呼び出しました。また、SAV 9.4.1(18nov15のリリース)で問題が修正されたことがわかります。そのバージョンをインストールし、/usr/localアクセス許可が正しく設定されたことを確認しました。
SaxDaddy

1
@andro -Oフラグ 10.11.6でも機能します。それがうまくいかない場合、それは別の問題であり、新しい質問をする必要があります。
マイクスコット

105

Recovery HDから起動して次のコマンドを実行することにより、SIPを無効にすることができます。

csrutil disable

ここに画像の説明を入力してください

csrutil enableコマンドに1つ以上のフラグを追加することにより、SIP保護を有効にし、その側面を選択的に無効にすることもできます。これらを設定するには、すべてRecoveryから起動する必要があります。

SIPを有効にして、署名されていないカーネル拡張機能のインストールを許可します

csrutil enable --without kext

ここに画像の説明を入力してください

SIPを有効にし、ファイルシステム保護を無効にします

csrutil enable --without fs

ここに画像の説明を入力してください

SIPを有効にし、デバッグ制限を無効にします

csrutil enable --without debug

ここに画像の説明を入力してください

SIPを有効にし、DTraceの制限を無効にします

csrutil enable --without dtrace

ここに画像の説明を入力してください

SIPを有効にし、NVRAMへの書き込みの制限を無効にします

csrutil enable --without nvram

ここに画像の説明を入力してください

また、SIPに関する詳細な情報を掲載した投稿もあります。

システム整合性保護– Appleのセキュリティモデルに別のレイヤーを追加


5
なんて素晴らしい知識だ。この賞金を倍にする必要があるかもしれません:-)
bmike

エラーが表示されます:csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
IgorGanapolsky

5
@IgorGanapolsky答えを読んでください。回復HDにブートしてSIPを無効にします
ブリック

13

目標が本当にSystem Integrity Protectionを無効にすることである場合、ここで他の回答で以前に推奨されたようにRecovery HDパーティションを起動時にCommand+ rで起動することは、これを行う最速の方法ではありません

文書化されていないスタートアップキーの組み合わせで、シングルユーザーモードブートとリカバリHDブートを組み合わせることができます。

これにより、これに必要な最低限の環境に直接入ります。


7

それが単に前である/etc/pathsように変更するのはより安全です。そうすれば、SIPを無効にすることなく、内部で開発作業を行うことができます。/usr/local/binusr/bin/usr/local/bin

OSのクリーンインストールは/etc/pathsEl Capitan以降、この方法で注文していますが、OSをYosemite以前からアップグレードする場合は、パスの順序を手動で変更する必要があります。


@iconoclast El Capitanより前の一般的な慣習は、プログラムをにインストールすることusr/binでした。SIPはこれを防ぐため、プログラムはにインストールする必要がありますusr/local/bin。これはSIPによって制限されません。usr/local/bin最初に置くことにより、ユーザーはプログラムへの絶対パスを入力することなくプログラムを実行できます。これは理にかなっていますか?他のことについて混乱していますか?
user260467

何かを入れるのは非常に悪い習慣であるといつも理解していました/usr/bin...しかし、私が尋ねるべきだったのは「このOPはOPの質問にどのように答えますか?」私はもともと、何らかの方法でそれが行われ、接続を確立していないと仮定してました。しかし、今、私はそれが何らかの接続を持っていることを非常に疑います。
iconoclast

@iconoclast開発者に、アプリを開発するためだけにSIPを無効にすべきではないことは言うまでもありません。
user260467

6

/ usr / localにアクセスするだけであれば、次のページをご覧ください:https : //github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md

アイデアは、を使用して一時的に SIPを無効にしcsrutil disable/usr/localchflagsを使用してそのディレクトリを制限なしに設定することです

 sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local

次に、を使用してSIPを再度有効にしcsrutil enableます。

/usr/localアップグレード時に既に存在している場合、上記でさえ必要ありません。簡単に実行できます

sudo chown -R $(whoami):admin /usr/local

エラーが発生し続ける:Read-only file system
IgorGanapolsky

このリンクは無効です:404エラー。
iconoclast

2

SIPを無効にするために)実行するためにリカバリパーティションに入ることができない場合は、コマンドでブート引数を設定してみてください。例えばcsrutil disablenvram

sudo nvram boot-args="rootless=0"

ただし、次のエラーが発生した場合:

nvram:変数の設定エラー-'boot-args':(iokit / common)not allowed

それは動作しません。リカバリ/セーフモードで起動する必要があります。

見る:


nvram: Error setting variable - 'boot-args': (iokit/common) not permitted
mghicks

1
@mghicksその場合、機能しません。答えを更新しました。
ケノーブ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.