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.