Operación no permitida cuando está en la raíz - El Capitan (sin raíz deshabilitado)

236

Estoy tratando de mover algo a / usr / bin en OS X El Capitan. He deshabilitado rootless usando los siguientes comandos: sudo nvram boot-args="rootless=0"; sudo rebootpero sigo recibiendo el mismo error:

MacBook-Air:~ Mark$ sudo cp class-dump /usr/bin
Password:
cp: /usr/bin/class-dump: Operation not permitted
MacBook-Air:~ Mark$ sudo mv class-dump /usr/bin
mv: rename class-dump to /usr/bin/class-dump: Operation not permitted
Mark Bourke
fuente
14
¿Por qué estás tratando de poner class-dump en / usr / bin? Las adiciones locales pertenecen a / usr / local / bin, y sin raíz le permite poner cosas allí ...
Gordon Davisson
1
Simplemente haga un alias en ~ / .bash_profile y no juegue con / usr / bin
Warren P
55
class-dump se usa directamente para la programación (herramienta de ingeniería inversa, directamente para la programación), por lo que la razón del cierre no parece válida. Además, 28 estrellas, casi 40 votos a favor y 90 votos a favor significa que la pregunta es útil.
Vive el
ingeniería inversa porque se usa para obtener una lista de clases?
marciokoko

Respuestas:

355

Nvm. Para cualquier otra persona que tenga este problema, debe reiniciar su Mac y presionar ⌘ + R al arrancar. Luego vaya a Utilidades> Terminal y escriba los siguientes comandos:

csrutil disable
reboot 

Este es el resultado de la Protección de integridad del sistema. Más información aquí .

EDITAR

Si sabe lo que está haciendo y está acostumbrado a ejecutar Linux, debe usar la solución anterior, ya que muchas de las restricciones SIP son un completo problema.

Sin embargo, si eres un manipulador / novato / "usuario avanzado" y no sabes lo que estás haciendo, esto puede ser muy peligroso y es mejor que uses la respuesta a continuación .

Mark Bourke
fuente
2
@ Chris, deberá reiniciar con CMD + R nuevamente, abrir el terminal y ejecutar csrutil enable; reboot. El comando no funciona en el modo normal, lamentablemente.
Alexander Kachkaev
77
@AlexanderKachkaev Sí, eso es lo que hice. ¡Solo quería señalar que todos deberían habilitarlo nuevamente después de realizar los cambios! De lo contrario, la protección de la integridad del sistema se desactiva de forma permanente, lo que puede ocasionar problemas graves.
Chris
99
Solo provocará problemas graves si elimina / modifica algo que no debería eliminar / modificar. En otras palabras, si sabes lo que estás haciendo, es perfectamente seguro dejarlo deshabilitado.
Clintm
16
Cualquiera que esté acostumbrado a correr en Linux probablemente querrá dejar esto deshabilitado. Es un completo dolor en el culo.
mschuett
3
@ Chris no tiene sentido esposarse a la silla de su oficina para evitar ser atropellado por un automóvil ... en otras palabras ... si sabe mirar a ambos lados antes de cruzar la calle ... es perfectamente seguro no
esposarse
254

La solución correcta es copiar o instalar para /usr/local/binno /usr/bin. Esto se debe a la Protección de integridad del sistema (SIP) . SIP hace /usr/binsolo lectura pero deja /usr/localcomo lectura-escritura.

SIP no debe deshabilitarse como se indica en la respuesta anterior porque agrega otra capa de protección contra el malware que obtiene acceso a la raíz. Aquí hay una explicación completa de lo que hace SIP y por qué es útil.

Como se sugiere en esta respuesta, uno no debe deshabilitar SIP (modo sin raíz) "¡No se recomienda deshabilitar el modo sin raíz! La mejor práctica es instalar cosas personalizadas en" / usr / local "solamente".

hariszaman
fuente
8
Esto solucionó mi problema. Gracias por el enlace! ¡Ir sin raíces o deshabilitar cosas en modo de recuperación parecía súper peligroso! Me alegro de haber encontrado esto.
caokey
1
Esto no acababa de hacer el truco para mí - que tenía un poco de suerte aliasing (por ejemplo, en mi caso) javaque /usr/local/bin/javaen mis alias bashrc, después de que hice el enlace correspondiente en esa carpeta como sugiere esta respuesta.
Eli Albert
Esta respuesta resolvió mi problema perfectamente. Debe ser la respuesta aceptada, ya que no requiere modificación del sistema ni reinicio.
Stephan
Entonces, ¿esto no deja camino a rmnada /usr/bin/? Entiendo que SIP tiene su propósito, pero quiero eliminar un ejecutable específico.
Brad Solomon
1
Sí tengo /usr/local/binen mi camino y openssl 1.0.2n está correctamente enlazado, /usr/local/bin/opensslpero cada vez que lo hago which openssl, todavía muestra /usr/bin/opensslcuál es la OpenSSL 0.9.8zh 14 Jan 2016versión anterior . ¿Cómo hago para que mi sistema prefiera el /usr/local/bin/openssluno sobre el otro?
Francisc0
15

Si quieres tomar el control de /usr/bin/

Deberá reiniciar su sistema:

Justo después del sonido de arranque, mantenga presionada la tecla Comando-R para arrancar en el Sistema de recuperación

Haga clic en el menú Utilidades y seleccione Terminal

Escriba csrutil disable y presione Intro

Haz clic en el menú  y selecciona Reiniciar

Una vez que haya confirmado sus cambios, asegúrese de volver a habilitar SIP. Hace mucho para proteger su sistema. (Los mismos pasos que el anterior, excepto el tipo: csrutil enable)

Elliot Yap
fuente
0

Si después de llamar a "csrutil disabled" aún su comando no funciona, intente con "sudo" en la terminal, por ejemplo:

sudo mv geckodriver /usr/local/bin

Y debería funcionar.

Nicolas
fuente