Операція не дозволена, коли в корі - El Capitan (без коренів)


236

Я намагаюся щось перенести в / usr / bin на OS X El Capitan. Я відключив безрезонне використання таких команд:, sudo nvram boot-args="rootless=0"; sudo rebootале я все одно отримую ту ж помилку:

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
Чому ви намагаєтесь поставити клас-дамп у / usr / bin? Місцеві доповнення належать до / usr / local / bin, і без корінь ви можете помістити туди речі ...
— Gordon Davisson,

1
Просто зробіть псевдонім у ~ / .bash_profile і не обробляйте з / usr / bin
— Warren P

5
class-dump безпосередньо використовується для програмування (інструмент зворотного проектування - безпосередньо для програмування), тому причина закриття не здається дійсною. Крім того, 28 зірок, майже 40 оновлених запитань та 90 відповідей означає, що питання корисне.
— Vive

зворотна інженерія, оскільки вона використовується для отримання списку класів?
— marciokoko

Відповіді:


355

Нвм. Для всіх, хто має цю проблему, потрібно перезавантажити комп'ютер і натиснути ⌘ + R під час завантаження. Потім перейдіть до Утиліти> Термінал і введіть такі команди:

csrutil disable
reboot 

Це результат захисту цілісності системи. Більше інформації тут .

EDIT

Якщо ви знаєте, що ви робите, і звикли працювати з Linux, вам слід скористатися вищевказаним рішенням, оскільки багато SIP- обмежень - це повна біль у дупі.

Однак якщо ви володар / noob / "poweruser" і не знаєте, що ви робите, це може бути дуже небезпечно, і вам краще скористатися відповіддю нижче .


2
@Chris, Вам потрібно буде знову перезавантажити CMD + R, відкрити термінал і запустити csrutil enable; reboot. На жаль, команда не працює в звичайному режимі, на жаль.
— Олександр Качкаєв

7
@AlexanderKachkaev Так, саме це я і зробив. Я просто хотів зазначити, що колись хтось повинен це ввімкнути знову після виконання змін! Інакше захист цілісності системи постійно відключений, що може призвести до серйозних проблем.
— Кріс

9
Це призведе до серйозних проблем, якщо ви видалите / модифікуєте щось, чого не слід видаляти / змінювати. Іншими словами, якщо ви знаєте, що ви робите, цілком безпечно залишити це відключеним.
— Клінтм

16
Будь-який користувач, який працює на Linux, швидше за все, захоче залишити цю функцію відключеною. Це повний біль у попі.
— mschuett

3
@Chris не має сенсу прив’язати руки до свого офісного крісла, щоб не потрапити в машину ... іншими словами ... якщо ти знаєш шукати обидві сторони, перш ніж переходити вулицю ... це абсолютно безпечно не
— прив’язати

254

Правильне рішення - скопіювати або встановити, щоб /usr/local/binне /usr/bin. Це пов’язано із захистом цілісності системи (SIP) . SIP робить /usr/binлише читання, але залишається /usr/localяк читання-запис.

SIP не слід відключати, як зазначено у відповіді вище, оскільки він додає ще один рівень захисту від зловмисного програмного забезпечення, що отримує кореневий доступ. Ось повне пояснення того, що робить SIP і чому це корисно.

Як запропоновано у цій відповіді, не слід вимикати SIP (без режиму без режиму) "Не рекомендується відключати режим без корінь! Найкраща практика - встановити власні речі лише для" / usr / local "."


8
Це вирішило мою проблему. Дякуємо за посилання! Перехід без корінь або відключення речей у режимі відновлення видався надзвичайно небезпечним! Радий, що я це знайшов.
— caokey

1
Це не дуже зробило для мене хитрість - я мав певну удачу (наприклад, у моєму випадку) javaна /usr/local/bin/javaпсевдоніми bashrc, після того як я зробив відповідне посилання в цій папці, як підказує ця відповідь.
— Елі Альберт

Ця відповідь прекрасно вирішила мою проблему. Це має бути прийнятою відповіддю, оскільки вона не потребує змін у системі та не потребує перезавантаження.
— Стефан

Таким чином, не робить це залишає ніякої можливості rmщо - або в /usr/bin/? Я розумію, що SIP має своє призначення, але хочу видалити один конкретний виконуваний файл.
— Бред Соломон

1
Я маю /usr/local/binна своєму шляху і openssl 1.0.2n правильно позначений, /usr/local/bin/opensslале кожен раз, коли я which opensslце роблю, все ще показує, /usr/bin/opensslяка є старіша OpenSSL 0.9.8zh 14 Jan 2016версія. Як змусити мою систему віддати перевагу /usr/local/bin/opensslтій, ніж іншу?
— Франциск0

15

Якщо ви хочете взяти під контроль /usr/bin/

Вам потрібно буде перезавантажити систему:

Відразу після звуку завантаження, утримуйте Command-R для завантаження в систему відновлення

Клацніть меню Утиліти та виберіть Термінал

Введіть csrutil disabled і натисніть клавішу return

Клацніть меню and та виберіть Перезапустити

Після внесення змін обов’язково ввімкніть SIP! Це робить багато для захисту вашої системи. (Ті ж кроки, що й вище, крім типу: csrutil enable)


0

Якщо після виклику "csrutil disabled" все ж ваша команда не працює, спробуйте зі "sudo" в терміналі, наприклад:

sudo mv geckodriver /usr/local/bin

І це має працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.