Operasi Tidak Diizinkan saat di root - El Capitan (rootless dinonaktifkan)

236

Saya mencoba memindahkan sesuatu ke / usr / bin pada OS X El Capitan. Saya telah menonaktifkan rootless menggunakan perintah berikut:, sudo nvram boot-args="rootless=0"; sudo reboottapi saya tetap mendapatkan kesalahan yang sama:

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
Mark Bourke
sumber
14
Mengapa Anda mencoba untuk menempatkan class-dump di / usr / bin? Penambahan lokal termasuk dalam / usr / local / bin, dan tanpa akar memungkinkan Anda untuk meletakkan barang-barang di sana ...
Gordon Davisson
1
Buat saja alias di ~ / .bash_profile dan jangan khawatir dengan / usr / bin
Warren P
5
class-dump secara langsung digunakan untuk pemrograman (alat teknik terbalik - langsung untuk pemrograman), sehingga alasan penutupan tidak terdengar valid. Selain itu, 28 bintang, hampir 40 suara naik dan 90 jawaban naik berarti pertanyaan itu berguna.
Vive
reverse engineering karena digunakan untuk mendapatkan daftar kelas?
marciokoko

Jawaban:

355

Nvm. Untuk orang lain yang mengalami masalah ini, Anda perlu me-reboot mac Anda dan tekan ⌘ + R saat booting. Kemudian masuk ke Utilities> Terminal dan ketik perintah berikut:

csrutil disable
reboot 

Ini adalah hasil dari Perlindungan Integritas Sistem. Info lebih lanjut di sini .

EDIT

Jika Anda tahu apa yang Anda lakukan dan terbiasa menjalankan Linux, Anda harus menggunakan solusi di atas karena banyak dari pembatasan SIP sangat menyebalkan.

Namun, jika Anda adalah orang yang suka mengotak - atik / noob / "poweruser" dan tidak tahu apa yang Anda lakukan, ini bisa sangat berbahaya dan Anda lebih baik menggunakan jawaban di bawah ini .

Mark Bourke
sumber
2
@ Chris, Anda harus reboot dengan CMD + R lagi, buka terminal dan jalankan csrutil enable; reboot. Sayangnya, perintah ini tidak berfungsi dalam mode normal.
Alexander Kachkaev
7
@AlexanderKachkaev Yap, itulah yang saya lakukan. Saya hanya ingin menunjukkan bahwa semua orang harus mengaktifkannya lagi setelah melakukan perubahan! Kalau tidak, perlindungan integritas sistem dinonaktifkan secara permanen yang dapat menyebabkan masalah serius.
Chris
9
Ini hanya akan menyebabkan masalah serius jika Anda menghapus / memodifikasi sesuatu yang tidak seharusnya Anda hapus / modifikasi. Dengan kata lain, jika Anda tahu apa yang Anda lakukan, sangat aman untuk menonaktifkannya.
Clintm
16
Siapa pun yang menggunakannya untuk menjalankan di linux akan cenderung ingin menonaktifkan ini. Ini adalah rasa sakit total di pantat.
mschuett
3
@ Chris, tidak masuk akal untuk memborgol diri ke kursi kantor Anda untuk menghindari ditabrak mobil ... dengan kata lain ... jika Anda tahu untuk melihat ke dua arah sebelum Anda menyeberang jalan ... itu benar-benar aman bukan untuk memborgol diri Anda ke kursi
Clintm
254

Solusi yang benar adalah menyalin atau menginstal untuk /usr/local/bintidak /usr/bin. Ini karena Sistem Perlindungan Integritas (SIP) . SIP membuat /usr/binread-only tetapi tetap /usr/localsebagai read-write.

SIP tidak boleh dinonaktifkan seperti yang dinyatakan dalam jawaban di atas karena ia menambahkan lapisan perlindungan lain terhadap malware yang mendapatkan akses root. Berikut ini adalah penjelasan lengkap tentang apa yang SIP lakukan dan mengapa ini berguna.

Seperti yang disarankan dalam jawaban ini, seseorang seharusnya tidak menonaktifkan SIP (mode tanpa akar) "Tidak disarankan untuk menonaktifkan mode tanpa akar! Praktik terbaik adalah menginstal barang-barang khusus ke" / usr / local "saja."

hariszaman
sumber
8
Ini memperbaiki masalah saya. Terima kasih untuk tautannya! Melakukan hal-hal tak menentu atau melumpuhkan dalam mode pemulihan tampak sangat berbahaya! Senang saya menemukan ini.
caokey
1
Ini tidak cukup membantu saya - saya beruntung alias (misalnya, dalam kasus saya) javauntuk /usr/local/bin/javadi alias bashrc saya, setelah saya membuat tautan yang sesuai di folder itu seperti yang dijawab oleh jawaban ini.
Eli Albert
Jawaban ini memecahkan masalah saya dengan sempurna. Ini harus menjadi jawaban yang diterima karena tidak memerlukan modifikasi pada sistem dan tidak ada reboot.
Stephan
Jadi, apakah ini tidak meninggalkan jalan rmapa pun /usr/bin/? Saya mengerti SIP memiliki tujuannya, tetapi ingin menghapus satu executable tertentu.
Brad Solomon
1
Saya ada /usr/local/bindi jalur saya dan openssl 1.0.2n disinkronkan dengan benar /usr/local/bin/openssltetapi setiap kali saya melakukannya which opensslmasih menunjukkan versi /usr/bin/opensslmana yang lebih lama OpenSSL 0.9.8zh 14 Jan 2016. Bagaimana saya membuat sistem saya lebih suka yang /usr/local/bin/opensslsatu daripada yang lain?
Francisc0
15

Jika Anda ingin mengambil kendali /usr/bin/

Anda perlu me-reboot sistem Anda:

Tepat setelah suara boot, tahan Command-R untuk boot ke dalam Sistem Pemulihan

Klik menu Utilities dan pilih Terminal

Ketik csrutil nonaktifkan dan tekan kembali

Klik menu  dan pilih Restart

Setelah Anda melakukan perubahan, pastikan untuk mengaktifkan kembali SIP! Itu banyak melindungi sistem Anda. (Langkah yang sama seperti di atas kecuali ketik: csrutil aktifkan)

Elliot Yap
sumber
0

Jika setelah memanggil "csrutil dinonaktifkan" masih perintah Anda tidak berfungsi, coba dengan "sudo" di terminal, misalnya:

sudo mv geckodriver /usr/local/bin

Dan itu seharusnya berhasil.

Nicolas
sumber