Kökteyken İşleme İzin Verilmez - El Capitan (köksüz devre dışı)


236

OS X El Capitan'da / usr / bin dizinine bir şey taşımaya çalışıyorum . Aşağıdaki komutları kullanarak rootless'ı devre dışı bıraktım: sudo nvram boot-args="rootless=0"; sudo rebootancak aynı hatayı almaya devam ediyorum:

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
Neden sınıf dökümünü / usr / bin dizinine koymaya çalışıyorsunuz? Yerel eklemeler / usr / local / bin'e aittir ve rootless bir şeyler koymanıza izin verir ...
Gordon Davisson

1
~ / .Bash_profile dizininde bir takma ad yapın ve / usr / bin ile dolanma
Warren P

5
class-dump doğrudan programlama için kullanılır (tersine mühendislik aracı - doğrudan programlama için), bu nedenle kapanma nedeni geçerli görünmüyor. Ayrıca, 28 yıldız, yaklaşık 40 soru upvote ve 90 cevap upvotes, sorunun faydalı olduğu anlamına gelir.
Vive

ters mühendislik çünkü sınıfların bir listesini almak için kullanılır?
marciokoko

Yanıtlar:


355

Nvm. Bu sorunu yaşayan herkes için mac'unuzu yeniden başlatmanız ve önyükleme sırasında ⌘ + R tuşlarına basmanız gerekir . Ardından Yardımcı Programlar> Terminal'e gidin ve aşağıdaki komutları yazın:

csrutil disable
reboot 

Bu, Sistem Bütünlüğü Korumasının bir sonucudur. Daha fazla bilgi burada .

DÜZENLE

Ne yaptığınızı biliyorsanız ve Linux çalıştırmaya alışkınsanız, yukarıdaki çözümü kullanmalısınız çünkü SIP kısıtlamalarının çoğu kıçta tam bir acıdır.

Ancak, bir tamircilik / noob / "güç kullanıcısı "ysanız ve ne yaptığınızı bilmiyorsanız, bu çok tehlikeli olabilir ve aşağıdaki cevabı kullanarak daha iyi olursunuz .


2
@Chris, CMD + R ile yeniden başlatmanız, terminali açmanız ve çalıştırmanız gerekir csrutil enable; reboot. Komut maalesef normal modda çalışmıyor.
Alexander Kachkaev

7
@AlexanderKachkaev Evet, ben de öyle yaptım. Sadece değişiklikleri yaptıktan sonra herkesin tekrar etkinleştirmesi gerektiğini belirtmek istedim ! Aksi takdirde, sistem bütünlüğü koruması kalıcı olarak devre dışı bırakılır ve bu da ciddi sorunlara yol açabilir.
Chris

9
Yalnızca kaldırmamanız / değiştirmemeniz gereken bir şeyi kaldırır / değiştirirseniz ciddi sorunlara yol açar. Başka bir deyişle, ne yaptığınızı biliyorsanız, devre dışı bırakmak tamamen güvenlidir.
Clintm

16
Linux üzerinde çalışan herkes bunu devre dışı bırakmak isteyecektir. Bu eşek tam bir acıdır.
mschuett

3
@Chris, bir arabanın çarpmasını önlemek için kendinizi ofis koltuğunuza kelepçelemek mantıklı değil ... başka bir deyişle ... caddeyi geçmeden önce her iki yöne de bakmayı biliyorsanız ... tamamen güvenli değil bir sandalyeye kelepçelemek
Clintm

254

Doğru çözüm kopyalamak veya yüklemek /usr/local/bindeğil /usr/bin. Bunun nedeni Sistem Bütünlüğü Koruması (SIP) . SIP /usr/binsalt okunur yapar ancak /usr/localokuma-yazma olarak ayrılır .

SIP , yukarıdaki yanıtta belirtildiği gibi devre dışı bırakılmamalıdır, çünkü root erişimi sağlayan kötü amaçlı yazılımlara karşı başka bir koruma katmanı ekler. İşte SIP'in ne yaptığı ve neden yararlı olduğu hakkında tam bir açıklama.

Bu cevapta önerildiği gibi SIP (köksüz mod) devre dışı bırakılmamalıdır "Köksüz modu devre dışı bırakmanız önerilmez!


8
Bu benim sorunumu çözdü. Bağlantı için teşekkürler! Kurtarma modunda köksüz kalmak veya devre dışı bırakmak çok tehlikeli görünüyordu! Bunu bulduğuma sevindim.
caokey

1
Bu oldukça benim için hile yapmak vermedi - I (örneğin, benim durumumda için) bazı şanslar yumuşatma vardı javaiçin /usr/local/bin/javabu cevabı da anlaşılacağı gibi ben bu klasörde uygun bağlantıyı yaptıktan sonra, benim bashrc'de takma ad içinde.
Eli Albert

Bu cevap sorunumu mükemmel bir şekilde çözdü. Sistemde herhangi bir değişiklik ve yeniden başlatma gerektirmediği için kabul edilen cevap olmalıdır.
Stephan

Peki, bu hiçbir rmşeye yol bırakmıyor /usr/bin/mu? SIP'in amacına sahip olduğunu anlıyorum, ancak belirli bir yürütülebilir dosyayı kaldırmak istiyorum.
Brad Solomon

1
Ben var /usr/local/binbenim yolunda ve openssl 1.0.2n doğru sembolik olarak edilir /usr/local/bin/opensslama bunu her zaman which opensslbunu hala göstermektedir /usr/bin/openssldaha eski olan OpenSSL 0.9.8zh 14 Jan 2016versiyonu. Sistemimin /usr/local/bin/openssldiğerini tercih etmesini nasıl sağlayabilirim ?
Francisc0

15

Eğer kontrolünü ele geçirmek istiyorsanız /usr/bin/

Sisteminizi yeniden başlatmanız gerekir:

Önyükleme sesinden hemen sonra, Kurtarma Sistemine önyüklemek için Command-R tuşunu basılı tutun

Yardımcı Programlar menüsünü tıklayın ve Terminal'i seçin

Csrutil devre dışı bırak ve return tuşuna basın

 menüsünü tıklayın ve Yeniden başlat'ı seçin

Değişikliklerinizi yaptıktan sonra SIP'yi yeniden etkinleştirdiğinizden emin olun! Sisteminizi korumak için çok şey yapar. (Türü hariç yukarıdakiyle aynı adımlar: csrutil enable)


0

"Csrutil devre dışı" çağrıldıktan sonra da komutunuz hala çalışmıyorsa, terminalde "sudo" ile deneyin, örneğin:

sudo mv geckodriver /usr/local/bin

Ve işe yaramalı.

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.