Operation im Root-Modus nicht zulässig - El Capitan (Rootless deaktiviert)

236

Ich versuche, unter OS X El Capitan etwas nach / usr / bin zu verschieben. Ich habe rootless mit den folgenden Befehlen deaktiviert: sudo nvram boot-args="rootless=0"; sudo rebootaber es wird immer wieder der gleiche Fehler angezeigt:

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
quelle
14
Warum versuchen Sie, class-dump in / usr / bin abzulegen? Lokale Ergänzungen gehören in / usr / local / bin, und rootless ermöglicht es Ihnen, Dinge dort zu platzieren ...
Gordon Davisson
1
Machen Sie einfach einen Alias ​​in ~ / .bash_profile und fracken Sie nicht mit / usr / bin
Warren P
5
class-dump wird direkt für die Programmierung verwendet (Reverse Engineering Tool - direkt für die Programmierung), sodass der Grund für das Schließen nicht gültig klingt. Außerdem bedeutet 28 Sterne, fast 40 Fragen-Upvotes und 90 Antwort-Upvotes, dass die Frage nützlich ist.
Vive
Reverse Engineering, weil es zum Abrufen einer Liste von Klassen verwendet wird?
Marciokoko
Siehe auch
Melebius

Antworten:

355

Nvm. Für alle anderen, die dieses Problem haben, müssen Sie Ihren Mac neu starten und beim Booten ⌘ + R drücken . Gehen Sie dann zu Dienstprogramme> Terminal und geben Sie die folgenden Befehle ein:

csrutil disable
reboot 

Dies ist ein Ergebnis des Systemintegritätsschutzes. Mehr Infos hier .

BEARBEITEN

Wenn Sie wissen, was Sie tun und es gewohnt sind, Linux auszuführen, sollten Sie die oben genannte Lösung verwenden, da viele der SIP- Einschränkungen eine völlige Belastung darstellen.

Wenn Sie jedoch ein Bastler / Noob / "Poweruser" sind und nicht wissen, was Sie tun, kann dies sehr gefährlich sein und Sie sollten die folgende Antwort besser verwenden .

Mark Bourke
quelle
2
@ Chris, Sie müssen erneut mit CMD + R neu starten, das Terminal öffnen und ausführen csrutil enable; reboot. Der Befehl funktioniert im normalen Modus leider nicht.
Alexander Kachkaev
7
@ AlexanderKachkaev Ja, das habe ich getan. Ich wollte nur , dass zu everbody möchte darauf hinweisen , ermöglichen es erneut , nachdem Sie die Änderungen durchführen! Andernfalls ist der Schutz der Systemintegrität dauerhaft deaktiviert, was zu schwerwiegenden Problemen führen kann.
Chris
9
Dies führt nur dann zu ernsthaften Problemen, wenn Sie etwas entfernen / ändern, das Sie nicht entfernen / ändern sollten. Mit anderen Worten, wenn Sie wissen, was Sie tun, ist es absolut sicher, es deaktiviert zu lassen.
Clintm
16
Jeder, der es gewohnt ist, unter Linux zu laufen, wird dies wahrscheinlich deaktiviert lassen wollen. Es ist ein völliger Schmerz im Arsch.
Mschuett
3
@Chris Es macht keinen Sinn, sich an Ihren Bürostuhl zu fesseln, um nicht von einem Auto angefahren zu werden ... mit anderen Worten ... wenn Sie wissen, dass Sie in beide Richtungen schauen müssen, bevor Sie die Straße überqueren ... ist es absolut sicher, nicht sich an einen Stuhl
fesseln
254

Die richtige Lösung besteht darin, zu kopieren oder zu installieren, um dies /usr/local/binnicht zu /usr/bintun. Dies liegt am System Integrity Protection (SIP) . SIP ist /usr/binschreibgeschützt, bleibt jedoch /usr/localschreibgeschützt.

SIP sollte nicht deaktiviert werden, wie in der obigen Antwort angegeben, da es eine weitere Schutzschicht gegen Malware bietet, die Root-Zugriff erhält. Hier finden Sie eine vollständige Erklärung, was SIP tut und warum es nützlich ist.

Wie in dieser Antwort vorgeschlagen, sollte SIP (Rootless-Modus) nicht deaktiviert werden. "Es wird nicht empfohlen, den Rootless-Modus zu deaktivieren. Die beste Vorgehensweise besteht darin, benutzerdefinierte Inhalte nur unter" / usr / local "zu installieren."

Hariszaman
quelle
8
Dies hat mein Problem behoben. Danke für den Link! Rootless zu machen oder Dinge im Wiederherstellungsmodus zu deaktivieren schien super gefährlich! Ich bin froh, dass ich das gefunden habe.
Caokey
1
Das hat nicht ganz für mich den Trick - ich hatte etwas Glück Aliasing (zum Beispiel in meinem Fall) javazu /usr/local/bin/javameiner bashrc Aliase, nachdem ich auf den entsprechenden Link in diesem Ordner aus , wie diese Antwort vermuten läßt.
Eli Albert
Diese Antwort hat mein Problem perfekt gelöst. Dies sollte die akzeptierte Antwort sein, da keine Änderungen am System und kein Neustart erforderlich sind.
Stephan
Lässt dies also rmnichts zu /usr/bin/? Ich verstehe, dass SIP seinen Zweck hat, möchte aber eine bestimmte ausführbare Datei entfernen.
Brad Solomon
1
Ich habe zwar /usr/local/binin meinem Pfad und openssl 1.0.2n ist korrekt mit verknüpft, /usr/local/bin/opensslaber jedes Mal, wenn ich es tue which openssl, wird immer noch /usr/bin/openssldie ältere OpenSSL 0.9.8zh 14 Jan 2016Version angezeigt . Wie kann ich mein System dazu bringen, das /usr/local/bin/openssleine dem anderen vorzuziehen ?
Francisc0
15

Wenn Sie die Kontrolle übernehmen möchten /usr/bin/

Sie müssen Ihr System neu starten:

Halten Sie direkt nach dem Startton Befehlstaste-R gedrückt, um das Wiederherstellungssystem zu starten

Klicken Sie auf das Menü Dienstprogramme und wählen Sie Terminal

Geben Sie csrutil disable ein und drücken Sie die Eingabetaste

Klicken Sie auf das Menü  und wählen Sie Neu starten

Wenn Sie Ihre Änderungen festgeschrieben haben, müssen Sie SIP wieder aktivieren! Es trägt viel zum Schutz Ihres Systems bei. (Gleiche Schritte wie oben, außer Typ: csrutil enable)

Elliot Yap
quelle
0

Wenn Ihr Befehl nach dem Aufruf von "csrutil disabled" immer noch nicht funktioniert, versuchen Sie es mit "sudo" im Terminal, zum Beispiel:

sudo mv geckodriver /usr/local/bin

Und es sollte funktionieren.

Nicolas
quelle