Come disabilitare System Integrity Protection (SIP) AKA “rootless” su macOs [OS X]


157

Apple ha introdotto System Integrity Protection , noto anche come "rootless", con OS X 10.11, El Capitan. Capisco che questo è un passo per la protezione generale contro i malware ma come sviluppatore ho bisogno dell'accesso in scrittura ad alcuni dei file che si blocca.

Come disabilito questa protezione?


2
Anche se puoi correggere tutti gli aspetti SIP, ci sono molte voci per questo - ricorda che compromettendo il sistema, stai costruendo cose che potrebbero non essere eseguite sul computer del tuo client, dove SIP è attivato e gli utenti non accetteranno di disattivarlo
Motti Shneor,

5
@Motti Shneor - Tuttavia, in alcuni casi questo deve essere disattivato solo per avere accesso in scrittura per installare alcuni SDK a scopo di sviluppo. Ciò non richiederebbe al client di fare lo stesso.
defaultNINJA

Sono venuto da unix background, cercando di capire la logica del rootless: è perché il computer è probabilmente il computer dell'utente singolo, tutto sarà installato nella home directory dell'utente, in modo che non sia necessario pasticciare con la directory di sistema come / usr / share / vim /.
Kemin Zhou,

Risposte:


148

La documentazione di Apple copre la disabilitazione di SIP, Informazioni sulla protezione dell'integrità del sistema sul Mac e Configurazione della protezione dell'integrità del sistema .

Un articolo su lifehacker.com elenca questi passaggi:

  1. Riavvia il Mac in modalità di ripristino riavviando il computer e tenendo premuto Command+ Rfinché il logo Apple non viene visualizzato sullo schermo.
  2. Fai clic su Utilità> Terminale.
  3. Nella finestra Terminale, digitare csrutil disablee premere Enter.
  4. Riavvia il tuo Mac.

È possibile verificare se un file o una cartella è limitato emettendo questo lscomando utilizzando la O maiuscola (e non zero 0) per modificare il flag di elenco lungo:

ls -lO /System /usr 

Cerca il testo riservato per indicare dove viene applicato SIP.

Per impostazione predefinita (= SIP abilitato), le seguenti cartelle sono limitate (vedi pagina Supporto Apple ):

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

... e le seguenti cartelle sono gratuite:

/Applications
/Library
/usr/local

1
Vedo che la corsa ls -lO /usr/localnon è contrassegnata come limitata. Ho anche vestito /usr/local/ricorsivamente. Ma continuo a vedere che la proprietà di root è diventata /usr/local/bine /usr/local/shareciò ha un impatto sull'homebrew. È anche questo il lavoro di SIP?
SaxDaddy,

1
@SaxDaddy Finché /usr/localnon è limitato, è possibile correggere facilmente tutte le autorizzazioni "sotto" questa directory. Homebrew in realtà consiglia di eseguire sudo chown -R $(whoami) /usr/local(durante l'accesso come utente amministratore) per risolvere i problemi di autorizzazione.
Nohillside

4
@SaxDaddy Stai usando Sophos Anti-Virus, per caso? C'è un problema noto con Sophos in cui cambia i permessi su quelle directory. Secondo una discussione sui loro forum della comunità , dovrebbe essere risolto in un aggiornamento che uscirà "presto".
ND Geek,

1
@NDGeek: +1: geniale, grazie! L'hai chiamato correttamente. E vedo che SAV 9.4.1 (rilasciato 18nov15) ha risolto il problema. Ho quella versione installata e confermata che /usr/localora ha le autorizzazioni impostate correttamente.
SaxDaddy,

1
@andro Il flag -O funziona ancora nel 10.11.6. Se non funziona per te, questo è un problema separato e dovresti fare una nuova domanda.
Mike Scott,

105

È possibile disabilitare SIP avviando su Recovery HD ed eseguendo il comando seguente:

csrutil disable

inserisci qui la descrizione dell'immagine

È anche possibile abilitare le protezioni SIP e disabilitarne selettivamente alcuni aspetti, aggiungendo uno o più flag al csrutil enablecomando. Tutti richiedono l'avvio da Recovery per impostarli:

Abilita SIP e consenti l'installazione di estensioni del kernel non firmate

csrutil enable --without kext

inserisci qui la descrizione dell'immagine

Abilita SIP e disabilita le protezioni del filesystem

csrutil enable --without fs

inserisci qui la descrizione dell'immagine

Abilita SIP e disabilita le restrizioni di debug

csrutil enable --without debug

inserisci qui la descrizione dell'immagine

Abilita SIP e disabilita le restrizioni DTrace

csrutil enable --without dtrace

inserisci qui la descrizione dell'immagine

Abilita SIP e disabilita le restrizioni sulla scrittura su NVRAM

csrutil enable --without nvram

inserisci qui la descrizione dell'immagine

Ho anche un post disponibile con ulteriori informazioni su SIP:

Protezione dell'integrità del sistema: aggiunta di un altro livello al modello di sicurezza di Apple


5
Che benvenuta ricchezza di conoscenza. Potrei dover raddoppiare su questa taglia :-)
bmike

csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
Viene visualizzato

5
@IgorGanapolsky Leggi la risposta. ' disabilita SIP avviando su Recovery HD ' .
Mattone

13

Se l'obiettivo è semplicemente disabilitare System Integrity Protection, l'avvio nella partizione Recovery HD come precedentemente raccomandato nelle altre risposte qui tramite Command+ rall'avvio non è il modo più veloce per farlo.

È possibile combinare l'avvio in modalità utente singolo con l'avvio HD di ripristino in una combinazione di tasti di avvio non documentata:

Questo ti porta solo nell'ambiente minimo necessario per questo direttamente .


7

Sarebbe più sicuro modificarlo in /etc/pathsmodo che /usr/local/binsia semplicemente prima usr/bin. In questo modo puoi svolgere il tuo lavoro di sviluppo all'interno /usr/local/binsenza dover disabilitare SIP.

Le installazioni pulite del sistema operativo sono state ordinate in /etc/pathsquesto modo da El Capitan, ma se si stava aggiornando il sistema operativo da Yosemite o precedente, è necessario modificare manualmente l'ordine dei percorsi.


@iconoclast Prima di El Capitan, una convenzione comune era installare programmi usr/bin. Poiché SIP lo impedisce ora, i programmi dovrebbero essere installati usr/local/bin, che non è limitato da SIP. In usr/local/binprimo luogo, gli utenti possono eseguire i programmi senza dover digitare il percorso assoluto del programma. Questo ha senso? Sei confuso per qualcos'altro?
user260467

Ho sempre capito che sarebbe stata una brutta pratica inserire qualcosa /usr/bin... ma immagino che ciò che avrei dovuto chiedere è "come fa questa risposta alla domanda di OP?" Inizialmente pensavo che lo facesse in qualche modo e che non stavo facendo la connessione. Ma ora sono molto dubbioso che abbia qualche connessione.
iconoclasta

@iconoclast Penso che sarebbe irresponsabile non dire a uno sviluppatore che in realtà non dovrebbero disabilitare SIP solo per sviluppare un'app.
user260467

6

Se tutto ciò di cui hai bisogno è accedere a / usr / local, dai un'occhiata a questa pagina: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md

L'idea è di disabilitare temporaneamente SIP usando csrutil disable, aggiungere /usr/local, usare chflags per impostare quella directory su non riservata

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

e quindi riattivare SIP utilizzando csrutil enable.

Se /usr/localesiste già al momento dell'aggiornamento, non è necessario nemmeno quanto sopra. Puoi semplicemente correre

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

Continuo a ricevere un errore:Read-only file system
IgorGanapolsky

Questo link è morto: errore 404.
iconoclasta

2

Se non è possibile entrare in partizione di ripristino per l'esecuzione csrutil disable(per disabilitare SIP ), provare a impostare argomenti di avvio con nvramil comando, ad esempio,

sudo nvram boot-args="rootless=0"

Tuttavia, se hai il seguente errore:

nvram: errore durante l'impostazione della variabile - 'boot-args': (iokit / common) non consentito

allora non funzionerà. È ancora necessario avviarlo in modalità ripristino / sicura.

Vedere:


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

1
@mghicks In tal caso, non funzionerà. Ho aggiornato la risposta.
Kenorb,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.