¿Cómo deshabilito la Protección de integridad del sistema (SIP) AKA "sin raíz" en macOs [OS X]


157

Apple ha introducido la Protección de integridad del sistema , también conocida como "sin raíz", con OS X 10.11, El Capitan. Entiendo que este es un paso para la protección general contra el malware, pero como desarrollador necesito acceso de escritura a algunos de los archivos que bloquea.

¿Cómo desactivo esta protección?


2
Aunque puede solucionar todos los aspectos de SIP, hay muchas entradas para esto: recuerde que al comprometer el sistema, está creando cosas que pueden no ejecutarse en la máquina de su cliente, donde SIP está activado, y los usuarios no aceptarán apagarlo
Motti Shneor

55
@Motti Shneor: sin embargo, en algunos casos esto debe desactivarse solo para tener acceso de escritura para instalar algunos SDK con fines de desarrollo. Esto no requeriría que el cliente haga lo mismo.
defaultNINJA

Vengo de unix de fondo, tratando de entender la lógica de rootless: es porque es probable que la computadora sea una máquina de un solo usuario, todo se instalará en el directorio de inicio del usuario, por lo que no es necesario meterse con el directorio del sistema como / usr / share / vim /.
Kemin Zhou

Respuestas:


148

La documentación de Apple cubre deshabilitar SIP, Acerca de la Protección de integridad del sistema en su Mac y Configurar la Protección de integridad del sistema .

Un artículo en lifehacker.com enumera estos pasos:

  1. Reinicie su Mac en modo de recuperación reiniciando su computadora y manteniendo presionado Command+ Rhasta que aparezca el logotipo de Apple en su pantalla.
  2. Haga clic en Utilidades> Terminal.
  3. En la ventana Terminal, escriba csrutil disabley presione Enter.
  4. Reinicia tu Mac.

Puede verificar si un archivo o carpeta está restringido emitiendo este lscomando usando la O mayúscula (y no cero 0) para modificar el indicador de listado largo:

ls -lO /System /usr 

Busque el texto restringido para indicar dónde se aplica SIP.

De manera predeterminada (= SIP habilitado), las siguientes carpetas están restringidas (consulte la página de soporte de Apple ):

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

... y las siguientes carpetas son gratuitas:

/Applications
/Library
/usr/local

1
Veo que al correr ls -lO /usr/localno está marcado como restringido. También he comido /usr/local/recursivamente. Pero sigo viendo cómo root toma posesión /usr/local/biny lo /usr/local/shareque afecta a homebrew. ¿Es este también el trabajo de SIP?
SaxDaddy

1
@SaxDaddy Mientras /usr/localno esté restringido, puede corregir cualquier permiso "debajo" de este directorio fácilmente. Homebrew realmente recomienda ejecutar sudo chown -R $(whoami) /usr/local(mientras está conectado como usuario administrador) para solucionar problemas de permisos.
nohillside

44
@SaxDaddy ¿Está utilizando Sophos Anti-Virus, por casualidad? Hay un problema conocido con Sophos en el que cambia los permisos en esos directorios. De acuerdo con un hilo en sus foros de la comunidad , debería resolverse en una actualización que saldrá "pronto".
ND Geek

1
@NDGeek: +1: ¡Genial, gracias! Lo llamaste correctamente. Y veo que SAV 9.4.1 (publicado 18nov15) solucionó el problema. Tengo esa versión instalada y confirmó que /usr/localahora tiene los permisos configurados correctamente.
SaxDaddy

1
@andro La bandera -O no siguen trabajando en 10.11.6. Si no funciona para usted, es un tema aparte y debe hacer una nueva pregunta.
Mike Scott, el

105

Es posible desactivar SIP arrancando en Recovery HD y ejecutando el siguiente comando:

csrutil disable

ingrese la descripción de la imagen aquí

También es posible habilitar las protecciones SIP y deshabilitar selectivamente aspectos del mismo, agregando uno o más indicadores al csrutil enablecomando. Todos requieren ser arrancados desde Recovery para configurarlos:

Habilite SIP y permita la instalación de extensiones de kernel sin firmar

csrutil enable --without kext

ingrese la descripción de la imagen aquí

Habilite SIP y deshabilite las protecciones del sistema de archivos

csrutil enable --without fs

ingrese la descripción de la imagen aquí

Habilite SIP y deshabilite las restricciones de depuración

csrutil enable --without debug

ingrese la descripción de la imagen aquí

Habilite SIP y deshabilite las restricciones de DTrace

csrutil enable --without dtrace

ingrese la descripción de la imagen aquí

Habilite SIP y deshabilite las restricciones para escribir en NVRAM

csrutil enable --without nvram

ingrese la descripción de la imagen aquí

También tengo una publicación disponible con más información sobre SIP:

Protección de integridad del sistema: agregar otra capa al modelo de seguridad de Apple


55
Qué gran riqueza de conocimiento. Es posible que tenga que duplicar esta recompensa :-)
bmike

Me sale un error:csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
IgorGanapolsky

55
@IgorGanapolsky Lee la respuesta. ' deshabilitar SIP arrancando en Recovery HD ' .
Brick

13

Si el objetivo es realmente deshabilitar la Protección de integridad del sistema, el arranque en la partición Recovery HD como se recomienda anteriormente en las otras respuestas aquí a través de Command+ ren el arranque no es la forma más rápida de hacerlo.

Puede combinar el arranque en modo de usuario único con el arranque HD de recuperación en una combinación de teclas de inicio no documentada:

Esto lo lleva directamente al entorno mínimo necesario que se necesita para esto directamente .


7

Sería más seguro modificarlo de /etc/pathsmodo que /usr/local/binsea ​​solo antes usr/bin. De esa manera, puede hacer su trabajo de desarrollo /usr/local/binsin tener que deshabilitar SIP.

Las instalaciones limpias del sistema operativo se han ordenado de /etc/pathsesta manera desde El Capitán, pero si estuviera actualizando el sistema operativo desde Yosemite o antes, tendría que modificar el orden de la ruta manualmente.


@iconoclast Antes de El Capitan, una convención común era instalar programas en usr/bin. Dado que SIP evita esto ahora, los programas deben instalarse en usr/local/bin, que no está restringido por SIP. Al poner usr/local/binprimero, los usuarios pueden ejecutar programas sin tener que escribir la ruta absoluta al programa. ¿Esto tiene sentido? ¿Estás confundido acerca de otra cosa?
user260467

Siempre he entendido que es una muy mala práctica poner algo /usr/bin... pero supongo que lo que debería haber preguntado es "¿cómo responde esto a la pregunta de OP?" Originalmente estaba asumiendo que lo hizo de alguna manera, y que simplemente no estaba haciendo la conexión. Pero ahora dudo mucho que tenga alguna conexión.
iconoclasta

@iconoclast Creo que sería irresponsable no mencionarle a un desarrollador que realmente no deberían deshabilitar SIP solo para desarrollar una aplicación.
user260467

6

Si todo lo que necesita es acceder / usr / local, eche un vistazo a esta página: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md

La idea es deshabilitar temporalmente SIP usando csrutil disable, agregar /usr/local, usar chflags para establecer ese directorio en no restringido

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

y luego vuelva a habilitar SIP usando csrutil enable.

Si /usr/localya existe en el momento de su actualización, incluso lo anterior no es necesario. Simplemente puedes correr

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

Sigo recibiendo un error:Read-only file system
IgorGanapolsky

Este enlace está muerto: error 404.
iconoclasta

2

Si no puede acceder a la Partición de recuperación para ejecutar csrutil disable(para deshabilitar SIP ), intente configurar los argumentos de arranque con el nvramcomando, por ejemplo

sudo nvram boot-args="rootless=0"

Sin embargo, si tiene el siguiente error:

nvram: Error al configurar la variable - 'boot-args': (iokit / common) no permitido

entonces no funcionará. Aún necesita iniciarlo en modo de recuperación / seguridad.

Ver:


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

1
@mghicks En ese caso, no funcionará. He actualizado la respuesta.
kenorb

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.