Firma Apple wprowadziła System Integrity Protection , znany również jako „rootless”, z systemem OS X 10.11, El Capitan. Rozumiem, że jest to krok do ogólnej ochrony przed złośliwym oprogramowaniem, ale jako programista potrzebuję dostępu do zapisu do niektórych blokowanych plików.
Jak wyłączyć tę ochronę?
Odpowiedzi:
Dokumentacja Apple obejmuje wyłączenie SIP, ochronę integralności systemu na komputerze Mac i konfigurację ochrony integralności systemu .
Artykuł na lifehacker.com wymienia następujące kroki:
Możesz sprawdzić, czy plik lub folder jest ograniczony, wydając to
ls
polecenie, używając dużej litery O (a nie zero 0) w celu zmodyfikowania flagi długiego wpisu:Poszukaj tekstu z ograniczeniami, aby wskazać, gdzie wymuszany jest SIP.
Domyślnie (= włączone SIP) następujące foldery są ograniczone (patrz strona pomocy technicznej Apple ):
... a następujące foldery są bezpłatne:
źródło
ls -lO /usr/local
nie jest oznaczone jako ograniczone. Też chownd/usr/local/
rekurencyjnie. Ale ciągle widzę, jak root przejmuje własność/usr/local/bin
i/usr/local/share
co wpływa na homebrew. Czy to także dzieło SIP?/usr/local
nie jest to ograniczone, możesz łatwo naprawić wszelkie uprawnienia „poniżej” tego katalogu. Homebrew faktycznie zaleca uruchamianiesudo chown -R $(whoami) /usr/local
(podczas logowania jako użytkownik admin), aby naprawić problemy z uprawnieniami./usr/local
teraz uprawnienia są ustawione poprawnie.Możliwe jest wyłączenie SIP poprzez uruchomienie do Recovery HD i uruchomienie następującego polecenia:
Możliwe jest również włączenie ochrony SIP i wybiórcze wyłączenie niektórych jego aspektów poprzez dodanie jednej lub więcej flag do
csrutil enable
polecenia. Wszystkie wymagają uruchomienia z Recovery, aby je ustawić:Włącz SIP i zezwól na instalację niepodpisanych rozszerzeń jądra
Włącz SIP i wyłącz zabezpieczenia systemu plików
Włącz SIP i wyłącz ograniczenia debugowania
Włącz SIP i wyłącz ograniczenia DTrace
Włącz SIP i wyłącz ograniczenia zapisu do NVRAM
Mam również dostępny post z dodatkowymi informacjami na temat SIP:
Ochrona integralności systemu - dodanie kolejnej warstwy do modelu bezpieczeństwa Apple
źródło
csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
Jeśli celem jest tak naprawdę wyłączenie ochrony integralności systemu, to uruchomienie systemu na partycji Recovery HD, jak wcześniej zalecono w innych odpowiedziach tutaj za pomocą Command+ rpodczas rozruchu, nie jest najszybszym sposobem na to.
Możesz połączyć rozruch w trybie pojedynczego użytkownika z uruchomieniem odzyskiwania HD w nieudokumentowanej kombinacji klucza uruchamiania:
To prowadzi Cię do absolutnie minimalnego środowiska, które jest potrzebne do tego bezpośrednio .
źródło
Bezpieczniej byłoby zmodyfikować,
/etc/paths
aby to/usr/local/bin
było dopiero wcześniejusr/bin
. W ten sposób możesz wykonywać prace programistyczne/usr/local/bin
bez wyłączania SIP.Czyste instalacje systemu operacyjnego zamówiły w
/etc/paths
ten sposób od El Capitan, ale jeśli aktualizujesz system operacyjny z Yosemite lub wcześniejszej wersji, musisz ręcznie zmienić kolejność ścieżek.źródło
usr/bin
. Ponieważ SIP zapobiega temu teraz, należy zainstalować programyusr/local/bin
, które nie są ograniczone przez SIP. Stawiając nausr/local/bin
pierwszym miejscu, użytkownicy mogą uruchamiać programy bez konieczności wpisywania bezwzględnej ścieżki do programu. Czy to ma sens? Czy jesteś zdezorientowany czymś innym?/usr/bin
... ale sądzę, że powinienem był zapytać: „w jaki sposób odpowiedź na pytanie OP?” Początkowo zakładałem, że tak się stało i że po prostu nie nawiązałem połączenia. Ale teraz bardzo wątpię, czy ma to jakikolwiek związek.Jeśli potrzebujesz tylko dostępu do / usr / local, spójrz na tę stronę: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md
Chodzi o to, aby tymczasowo wyłączyć SIP za pomocą
csrutil disable
, dodaj/usr/local
, użyj chflags, aby ustawić ten katalog na nieograniczonya następnie ponownie włącz SIP za pomocą
csrutil enable
.Jeśli
/usr/local
istnieje już w momencie aktualizacji, nawet powyższe nie jest konieczne. Możesz po prostu biegaćźródło
Read-only file system
Jeśli nie możesz dostać się do Partycji odzyskiwania, aby uruchomić
csrutil disable
(aby wyłączyć SIP ), spróbuj ustawić argumenty rozruchowe za pomocąnvram
polecenia, npJeśli jednak występuje następujący błąd:
to nie zadziała. Nadal musisz uruchomić go w trybie odzyskiwania / awaryjnym.
Widzieć:
źródło
nvram: Error setting variable - 'boot-args': (iokit/common) not permitted
Nie mam wystarczającej reputacji, aby dodać to jako komentarz do powyższego linku do github Homebrew 404. Wayback Machine wciąż go ma:
http://web.archive.org/web/20160117204214/https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md
źródło