Операция не разрешена в режиме root - El Capitan (отключен без root)

236

Я пытаюсь переместить что-то в / usr / bin на OS X El Capitan. Я отключил rootless с помощью следующих команд:, 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
Почему вы пытаетесь поместить class-dump в / usr / bin? Локальные дополнения находятся в / usr / local / bin, а rootless позволяет вам что-то там размещать ...
Гордон Дэвиссон
1
Просто создайте псевдоним в ~ / .bash_profile и не вставайте с / usr / bin
Уоррен П
5
class-dump используется непосредственно для программирования (инструмент обратного инжиниринга - непосредственно для программирования), поэтому причина закрытия не звучит обоснованно. Кроме того, 28 звезд, почти 40 ответов на вопрос и 90 ответов на вопрос означает, что вопрос полезен.
Вив
обратный инжиниринг, потому что он используется для получения списка классов?
Марсиококо
Связанный: apple.stackexchange.com/questions/339862/…
Melebius

Ответы:

355

Nvm. Если у вас есть другие проблемы, вам нужно перезагрузить Mac и нажать ⌘ + R при загрузке. Затем перейдите в Утилиты> Терминал и введите следующие команды:

csrutil disable
reboot 

Это результат защиты целостности системы. Больше информации здесь .

РЕДАКТИРОВАТЬ

Если вы знаете, что делаете, и привыкли к запуску Linux, вам следует использовать вышеупомянутое решение, так как многие ограничения SIP являются полной болью в заднице.

Однако, если вы являетесь носильщиком / noob / "poweruser" и не знаете, что делаете, это может быть очень опасно, и вам лучше воспользоваться ответом ниже .

Марк Бурк
источник
2
@Chris, тебе нужно будет снова перезагрузиться с помощью CMD + R, открыть терминал и запустить csrutil enable; reboot. Команда не работает в обычном режиме, к сожалению.
Александр Качкаев
7
@AlexanderKachkaev Да, это то, что я сделал. Я просто хотел отметить, что все должны включить его снова после внесения изменений! В противном случае защита целостности системы будет постоянно отключена, что может привести к серьезным проблемам.
Крис
9
Это приведет только к серьезным проблемам, если вы удалите / измените то, что не следует удалять / изменять. Другими словами, если вы знаете, что делаете, совершенно безопасно оставить его отключенным.
Клинт
16
Любой, кто будет использовать Linux, вероятно, захочет оставить этот параметр отключенным. Это полная боль в заднице.
MSCHUETT
3
@ Крис, нет смысла приковывать себя наручниками к вашему офисному стулу, чтобы избежать удара машины ... другими словами ... если вы знаете, что нужно смотреть в обе стороны, прежде чем переходить улицу ...
приковать
254

Правильное решение - скопировать или установить на /usr/local/bin нет. /usr/binЭто связано с защитой целостности системы (SIP) . SIP делает /usr/binдоступным только для чтения, но оставляет /usr/localкак чтение-запись.

SIP не следует отключать, как указано в ответе выше, поскольку он добавляет еще один уровень защиты от вредоносных программ, получающих root-доступ. Вот полное объяснение того, что делает SIP и почему это полезно.

Как предложено в этом ответе, не следует отключать SIP (режим без root): «Не рекомендуется отключать режим без root! Лучше всего устанавливать пользовательские компоненты только в« / usr / local »».

hariszaman
источник
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одной над другой?
Francisc0
15

Если вы хотите взять под контроль /usr/bin/

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

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

Нажмите меню Утилиты и выберите Терминал

Наберите csrutil disable и нажмите возврат

Нажмите меню  и выберите «Перезагрузить»

После внесения изменений обязательно включите SIP! Это многое делает для защиты вашей системы. (Те же шаги, что и выше, за исключением типа: csrutil enable)

Эллиот Яп
источник
0

Если после вызова «csrutil disabled» ваша команда по-прежнему не работает, попробуйте в терминале «sudo», например:

sudo mv geckodriver /usr/local/bin

И это должно работать.

никола
источник