MacO'larda Sistem Bütünlüğü Koruması (SIP) AKA'yı “rootless” olarak nasıl devre dışı bırakırım [OS X]


157

Apple, OS X 10.11, El Capitan ile "rootless" olarak da bilinen System Integrity Protection'ı tanıttı . Bunun kötü amaçlı yazılımlara karşı genel koruma için bir adım olduğunu biliyorum, ancak bir geliştirici olarak kilitlediği bazı dosyalara yazma erişimine ihtiyacım var.

Bu korumayı nasıl devre dışı bırakabilirim?


2
Tüm SIP özelliklerini düzeltebilseniz bile, bunun için çok sayıda giriş vardır - sistemi tehlikeye atarak, müşterinizin makinesinde çalışmayan, SIP'nin açık olduğu ve kullanıcıların kapatmayı kabul etmeyecekleri şeyler oluşturduğunuzu unutmayın.
— Motti Shneor

5
@Motti Shneor - Bununla birlikte, bazı durumlarda, geliştirme amacıyla bazı SDK'ları yüklemek için sadece yazma erişimine sahip olmak için bunun döndürülmesi gerekir. Bu, müşterinin aynı şeyi yapmasını gerektirmez.
— defaultNINJA 25:16

Rootless mantığını anlamaya çalışarak, unix arkaplanından geldim: bilgisayar çoğunlukla tek kullanıcılı bir makine olması muhtemel olduğundan, her şey kullanıcının ev dizinine yüklenecektir, böylece sistem diziniyle uğraşmaya gerek kalmaz. / usr / share / vim / gibi.
— Kemin Zhou

Yanıtlar:


148

Apple'ın belgeleri , Mac'inizde SIP'yi devre dışı bırakma, Mac'inizde Sistem Bütünlüğü Koruması Hakkında ve Sistem Bütünlüğü Korumasını Yapılandırma'yı içerir .

Lifehacker.com'daki bir makale şu adımları listeler:

  1. Bilgisayarınızı yeniden başlatıp ekranınızdaki Apple logosu görünene kadar Command+ tuşunu basılı tutarak Mac'inizi Kurtarma Modunda yeniden başlatın R.
  2. Yardımcı Programlar> Terminal'i tıklayın.
  3. Terminal penceresinde, yazıp csrutil disabletuşuna basın Enter.
  4. Mac'inizi yeniden başlatın.

lsUzun liste bayrağını değiştirmek için bu komutu büyük O harfini kullanarak (ve sıfır değil 0) vererek bir dosyanın veya klasörün kısıtlanıp kısıtlanmadığını doğrulayabilirsiniz :

ls -lO /System /usr 

SIP'nin nerede uygulandığını belirtmek için sınırlı metni arayın .

Varsayılan olarak (= SIP etkin), aşağıdaki klasörler sınırlandırılmıştır ( Apple Destek sayfasına bakın ):

/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X

... ve aşağıdaki klasörler ücretsiz:

/Applications
/Library
/usr/local

1
Çalıştırıldığını görüyorum ls -lO /usr/localsınırlı işaretli değil. Ayrıca /usr/local/yinelemeli olarak boğuldum . Ancak köklerin mülkiyeti aldığını /usr/local/binve /usr/local/sharehangi homebrew'i etkilediğini görüyorum . Bu da SIP'in işi mi?
— SaxDaddy 9:15

1
@SaxDaddy Sınırlandırılmadığı sürece /usr/local, bu dizinin altındaki "aşağıdaki" izinleri kolayca düzeltebilirsiniz. Homebrew, aslında sudo chown -R $(whoami) /usr/localizin sorunlarını gidermek için çalıştırılmasını (yönetici kullanıcısı olarak giriş yaparken) önerir.
— nohillside

4
@SaxDaddy Sophos Anti-Virus kullanıyor musunuz? Sophos'un bu dizinlerdeki izinleri değiştirdiği bilinen bir sorun var. Topluluk forumlarındaki bir başlığa göre, "yakında" nedeniyle bir güncelleme ile çözülmesi gerekiyor.
— ND Geek

1
@NDGeek: +1: Mükemmel, teşekkür ederim! Doğru aradın. Ve SAV 9.4.1'in (18nov15 yayınlandı) sorunu çözdüğünü görüyorum. Bu sürümü yükledim ve /usr/localşimdi izinleri doğru olarak ayarlanmış olduğunu onayladım .
— SaxDaddy 19:15

1
-O bayrağı @andro yok hala 10.11.6 çalışır. Sizin için işe yaramazsa, bu ayrı bir konudur ve yeni bir soru sormalısınız.
— Mike Scott

105

Recovery HD'ye geçerek ve aşağıdaki komutu çalıştırarak SIP'yi devre dışı bırakmak mümkündür :

csrutil disable

görüntü tanımını buraya girin

csrutil enableKomuta bir veya daha fazla bayrak ekleyerek SIP korumasını etkinleştirmek ve yönlerini seçici olarak devre dışı bırakmak da mümkündür . Tüm bunları ayarlamak için Kurtarma'dan başlatılması gerekir:

SIP'yi etkinleştirin ve imzasız çekirdek uzantılarının yüklenmesine izin verin

csrutil enable --without kext

görüntü tanımını buraya girin

SIP'yi etkinleştirin ve dosya sistemi korumalarını devre dışı bırakın

csrutil enable --without fs

görüntü tanımını buraya girin

SIP'yi etkinleştirin ve hata ayıklama kısıtlamalarını devre dışı bırakın

csrutil enable --without debug

görüntü tanımını buraya girin

SIP'yi etkinleştirin ve DTrace kısıtlamalarını devre dışı bırakın

csrutil enable --without dtrace

görüntü tanımını buraya girin

SIP'yi etkinleştirin ve NVRAM'a yazma ile ilgili kısıtlamaları devre dışı bırakın

csrutil enable --without nvram

görüntü tanımını buraya girin

Ayrıca, SIP ile ilgili daha fazla bilgi içeren bir yazı var:

Sistem Bütünlüğü Koruması - Apple'ın güvenlik modeline başka bir katman ekleme


5
Ne kadar hoş bir bilgi hazinesi. Bu ödül için ikiye katlamak zorunda
— kalabilirim

Bir hata alıyorum:csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
— IgorGanapolsky

5
@IgorGanapolsky Cevabı oku. ' Recovery HD'ye önyükleyerek SIP'yi devre dışı bırak ' .
— Brick

13

Amaç, Sistem Bütünlüğü Korumasını gerçekten devre dışı bırakmaksa, daha önce buradaki yanıtlarda Command+ rönyüklemesinde önerildiği gibi Recovery HD bölümüne önyükleme yapmak, bunu yapmanın en hızlı yolu değildir .

Tekli kullanıcı modu önyüklemesini belgelenmemiş başlangıç ​​tuşu birleşiminde kurtarma HD önyüklemesiyle birleştirebilirsiniz:

Bu sizi doğrudan bunun için gerekli olan minimum asgari ortama sokar .


7

Değiştirmek daha güvenli olacaktır /etc/paths, böylece /usr/local/binsadece öncedir usr/bin. Bu şekilde geliştirme çalışmalarınızı /usr/local/binSIP'yi devre dışı bırakmak zorunda kalmadan yapabilirsiniz.

İşletim sisteminin temiz yüklemeleri /etc/pathsEl Capitan'dan bu yana sipariş vermiştir , ancak işletim sistemini Yosemite veya daha önceki bir sürümden yükseltiyorsanız, yol sırasını manuel olarak değiştirmeniz gerekecektir.


@conconlast El Capitan'dan önce, programların yükleneceği ortak bir kongre yapıldı usr/bin. SIP bunu şimdi önlediğinden, usr/local/binSIP tarafından kısıtlanmayan programlar kurulmalıdır . usr/local/binİlk koyarak , kullanıcılar programın mutlak yolunu yazmak zorunda kalmadan programları çalıştırabilir. Bu mantıklı mı? Başka bir şey hakkında kafanız mı karıştı?
— user260467

Her zaman bir şey koymak için çok kötü bir uygulama olduğunu anladım /usr/bin... ama sanırım sormam gereken "Bu OP'nin sorusuna nasıl cevap veriyor ?" Başlangıçta bir şekilde yaptığını ve sadece bağlantı kurmadığımı varsayıyordum . Ama şimdi bunun herhangi bir bağlantısı olduğuna çok şüpheliyim.
— iconoclast

@iconoclast Bir geliştiriciye, yalnızca bir uygulama geliştirmek için SIP'yi devre dışı bırakmamaları gerektiğinden bahsetmemenin sorumsuzca olacağını düşünüyorum.
— user260467

6

İhtiyacınız olan tek şey / usr / local dizinine erişmekse, bu sayfaya bir göz atın: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md

Fikir, dizini sınırlandırılmayacak şekilde ayarlamak için chflags kullanarak , ekleyerek , kullanarak SIP'yi geçici olarak devre dışı bırakmaktır.csrutil disable/usr/local

 sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local

ve ardından SIP'yi kullanarak yeniden etkinleştirin csrutil enable.

Eğer /usr/localzaten yükseltme sırasında geçerli olan, daha sonra da yukarıdaki gerekli değildir. Sadece koşabilirsin

sudo chown -R $(whoami):admin /usr/local

Hata almaya devam ediyorum:Read-only file system
— IgorGanapolsky

Bu bağlantı öldü: 404 hatası.
— iconoclast

2

İçine alamıyorsanız Kurtarma Bölümü çalıştırmak için csrutil disable(devre dışı bırakmak için SIP ) ile önyükleme args ayarlamayı deneyin nvramkomutu, örneğin

sudo nvram boot-args="rootless=0"

Ancak, aşağıdaki hatayı aldıysanız:

nvram: Hata ayarı değişkeni - 'boot-args': (iokit / common) izin verilmiyor

o zaman işe yaramaz. Yine de kurtarma / güvenli modunu başlatmanız gerekir.

Görmek:


nvram: Error setting variable - 'boot-args': (iokit/common) not permitted
— mghicks

1
@mghicks Bu durumda, işe yaramaz. Cevabı güncelledim.
— kenorb

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.