Operacja niedozwolona podczas rootowania - El Capitan (bez rootowania wyłączony)


236

Próbuję przenieść coś do / usr / bin na OS X El Capitan. Wyłączyłem rootless za pomocą następujących poleceń:, sudo nvram boot-args="rootless=0"; sudo rebootale ciągle pojawia się ten sam błąd:

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

14
Dlaczego próbujesz umieścić zrzut klasy w / usr / bin? Lokalne dodatki należą do / usr / local / bin, a rootless pozwala na umieszczenie tam rzeczy ...
Gordon Davisson

1
Po prostu utwórz alias w ~ / .bash_profile i nie frackuj z / usr / bin
Warren P

5
zrzut klasy służy bezpośrednio do programowania (narzędzie inżynierii odwrotnej - bezpośrednio do programowania), więc przyczyna zamknięcia nie brzmi poprawnie. Poza tym 28 gwiazdek, prawie 40 głosów pozytywnych i 90 głosów pozytywnych oznacza, że ​​pytanie jest przydatne.
Vive

inżynieria wsteczna, ponieważ jest używana do uzyskania listy klas?
marciokoko

Odpowiedzi:


355

Nvm. Dla każdego, kto ma ten problem, musisz ponownie uruchomić komputer Mac i naciśnij klawisze ⌘ + R podczas uruchamiania. Następnie przejdź do Narzędzia> Terminal i wpisz następujące polecenia:

csrutil disable
reboot 

Jest to wynik ochrony integralności systemu. Więcej informacji tutaj .

EDYTOWAĆ

Jeśli wiesz, co robisz i jesteś przyzwyczajony do pracy z Linuksem, powinieneś użyć powyższego rozwiązania, ponieważ wiele ograniczeń SIP jest kompletnym problemem.

Jednak jeśli jesteś majstrującym / noob / „poweruser” i nie wiesz, co robisz, może to być bardzo niebezpieczne i lepiej jest skorzystać z poniższej odpowiedzi .


2
@Chris, musisz ponownie uruchomić komputer z CMD + R, otworzyć terminal i uruchomić csrutil enable; reboot. Polecenie nie działa niestety w trybie normalnym.
Alexander Kachkaev

7
@AlexanderKachkaev Tak, właśnie to zrobiłem. Chciałem tylko zaznaczyć, że po wprowadzeniu zmian wszyscy powinni to umożliwić ! W przeciwnym razie ochrona integralności systemu jest trwale wyłączona, co może prowadzić do poważnych problemów.
Chris

9
Doprowadzi to do poważnych problemów tylko wtedy, gdy usuniesz / zmodyfikujesz coś, czego nie powinieneś usuwać / modyfikować. Innymi słowy, jeśli wiesz, co robisz, możesz całkowicie wyłączyć tę funkcję.
Clintm

16
Każdy, kto użyje Linuksa, prawdopodobnie zechce to wyłączyć. To kompletny ból w tyłek.
mschuett

3
@Chris nie ma sensu kajdać się na krześle biurowym, aby uniknąć potrącenia przez samochód ... innymi słowy ... jeśli wiesz, że patrzysz w obie strony przed przejściem przez ulicę ... to całkowicie bezpieczne, nie przykleić się do krzesła
Clintm

254

Poprawnym rozwiązaniem jest skopiowanie lub zainstalować /usr/local/binnie /usr/bin.To jest spowodowane integralności systemu ochrony (SIP) . SIP sprawia, że /usr/bintylko do odczytu, ale pozostawia /usr/localjako do odczytu i zapisu.

SIP nie powinien być wyłączany, jak stwierdzono w powyższej odpowiedzi, ponieważ dodaje kolejną warstwę ochrony przed złośliwym oprogramowaniem uzyskującym dostęp do roota. Oto pełne wyjaśnienie tego, co robi SIP i dlaczego jest przydatne.

Jak sugerowano w tej odpowiedzi, nie należy wyłączać SIP (tryb bez rootowania) „Nie zaleca się wyłączania trybu bez rootowania! Najlepszą praktyką jest instalowanie niestandardowych plików tylko w„ / usr / local ”.”


8
To naprawiło mój problem. Dzięki za link! Bezrootowe lub wyłączanie rzeczy w trybie odzyskiwania wydawało się bardzo niebezpieczne! Cieszę się, że to znalazłem.
caokey

1
To nie do końca załatwiło sprawę - miałem trochę szczęścia aliasingu (na przykład w moim przypadku) javado /usr/local/bin/javamoich aliasów bashrc, po tym, jak utworzyłem odpowiedni link w tym folderze, jak sugeruje ta odpowiedź.
Eli Albert

Ta odpowiedź doskonale rozwiązała mój problem. Powinna to być akceptowana odpowiedź, ponieważ nie wymaga modyfikacji systemu ani restartu.
Stephan

Czy to nie pozostawia do rmniczego drogi /usr/bin/? Rozumiem, że SIP ma swój cel, ale chcę usunąć jeden konkretny plik wykonywalny.
Brad Solomon

1
Mam /usr/local/binna swojej ścieżce i openssl 1.0.2n jest poprawnie dowiązany symbolicznie, /usr/local/bin/opensslale za każdym razem, gdy which opensslto robię , nadal pokazuje, /usr/bin/opensslktóra OpenSSL 0.9.8zh 14 Jan 2016wersja jest starsza . Jak sprawić, aby mój system wolał ten /usr/local/bin/opensslod drugiego?
Francisc0

15

Jeśli chcesz przejąć kontrolę /usr/bin/

Musisz ponownie uruchomić system:

Zaraz po dźwięku rozruchu naciśnij i przytrzymaj klawisz Command-R, aby uruchomić system odzyskiwania

Kliknij menu Narzędzia i wybierz Terminal

Wpisz csrutil wyłącz i naciśnij klawisz Return

Kliknij menu  i wybierz Uruchom ponownie

Po zatwierdzeniu zmian ponownie włącz SIP! Robi dużo, aby chronić swój system. (Te same kroki, co powyżej, z wyjątkiem typu: csrutil enable)


0

Jeśli po wywołaniu „csrutil wyłączony” nadal twoje polecenie nie działa, spróbuj z „sudo” w terminalu, na przykład:

sudo mv geckodriver /usr/local/bin

I powinno działać.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.