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.