2011-05-04 20:42:49 +0000 2011-05-04 20:42:49 +0000
69
69

Почему в чокаун-отчете "Операция запрещена" на OS X?

На моём Mac (10.6.7) я пытаюсь сделать следующее:

sudo chown myusername:wheel ./entries

, но Unix/Mac возвращает “Операция запрещена”. Когда я возвращаю файл “Виновен” ls -lash, он выглядит следующим образом:

8 -rwxrwxrwx 1 myusername staff 394B Apr 26 23:26 entries

Я попробовал sudo и sudo su; ничего не работает. Есть идеи, в чем дело?

Я пытаюсь chmod файлы, которые я скопировал из моей старой коробки Ubuntu. Большинство файлов успешно chmod‘ed рекурсивно; только этот застрял и я не понимаю почему.

Ответы (7)

91
91
91
2012-12-12 21:58:23 +0000

Да, Mac имеет много улучшений Unix в области файлов. Игнорируя всю resource fork вещь, которая больше не используется, есть:

  • стандартные разрешения Unix ugo rwx и так далее. Применяются обычные инструменты Unix.
  • ACL, просматривается с ls -le и изменяется с chmod [-a | +a | =a].
  • Флаги файлов, просматриваемые с ls -lO (заглавные о, а не нулевые) и изменяемые с chflags.
  • расширенные атрибуты, просматриваемые с ls -l@ (только ключи атрибутов) и просматриваемые и изменяемые с xattr. (Используйте xattr -h для справки, если man xattr ничего не дает.)
  • Начиная с OS X 10.11 “El Capitan”, * System Integrity Protection ** (SIP) дополнительно защищает некоторые файлы от изменений из обычных процессов, даже при использовании sudo для запуска от root. Файлы, защищенные SIP, будут перечислены в списке ls -lO как имеющие флаг restricted и/или будут перечислены в списке ls -l@ как имеющие атрибут com.apple.rootless.

Вам может быть отказано в операциях с файлом из-за прав Unix, ACL, файловых флагов или SIP. Чтобы полностью разблокировать файл:

sudo chmod -N file # Remove ACLs from file
sudo chmod ugo+rw file # Give everyone read-write permission to file
sudo chflags nouchg file # Clear the user immutable flag from file
sudo chflags norestricted file # Remove the SIP protection from file
sudo xattr -d com.apple.rootless file # Remove SIP protection from file

Если включена защита целостности системы (SIP), то sudo chflags norestricted и sudo xattr -d com.apple.rootless также вернут ошибку “Операция запрещена”. Чтобы очистить флаг и/или атрибут, необходимо загрузиться в macOS Recovery и либо выполнить команды с терминала (возможно, сначала вам придется использовать Disk Utility для разблокировки и монтирования вашего загрузочного диска, затем помните, что ваши файлы будут находиться под /Volumes/Macintosh HD или любым другим именем вашего загрузочного диска) или отключить SIP вообще , а затем перезагрузиться, и команды должны затем работать. Помните, однако, что будущие обновления ОС, скорее всего, восстановят флаг restricted и атрибут com.apple.rootless для любых файлов, с которых вы его удалили.

_ Отключение SIP не рекомендуется _ так как оно удаляет много защиты от вредоносных программ и случайных повреждений, плюс это не обязательно, когда вы можете просто удалить защиту на основе каждого файла. Если вы отключите SIP, повторно включите его, когда вы закончите вносить изменения.

Обратите внимание, что если ls -lO показывает, что флаг schg установлен, вы должны перейти в однопользовательский режим, чтобы снять его. Я не собираюсь вдаваться в это, т.к. есть большие вопросы о том, почему в файле установлен этот флаг, почему вы пытаетесь его испортить и каковы будут последствия.

18
18
18
2011-06-08 17:47:37 +0000

У меня была та же проблема. Оказалось, что файлы-нарушители были помечены операционной системой как “Заблокированные”. Я нашел это решение, и оно решило проблемы за считанные секунды: http://explanatorygap.net/2005/07/10/unlocking-files-recursively-from-the-command-line/

Похоже, что команда rm изменилась в Tiger так, что если вы используете rm -Rf с повышенными привилегиями, она автоматически разблокирует файлы.

В OS X до Tiger: find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

В OS X после Tiger: sudo rm -Rf foldername/

Также, даже после OS X 10.4, могут существовать флаги файловых метаданных, такие как uchg и uappnd, которые не позволяют изменять разрешения на файлы или права собственности. chflags может удалять флаги. Некоторые атрибуты/метаданные файла и то, как они обрабатываются разными инструментами копирования, являются здесь .

12
12
12
2015-09-30 23:09:40 +0000

В OS X 10.11 (El Capitan), это также может быть вызвано новой функцией Rootless. См. объяснение в этот ответ .

Одним словом, для некоторых важных каталогов невозможно их изменить - используете ли вы sudo, chown или chmod. Это влияет на каталог /usr (хотя вам разрешено изменять /usr/local).

Чтобы изменить каталог, защищенный Rootless, вам нужно отключить Rootless . И, конечно же, повторно включить его после внесения изменений, потому что это важное улучшение безопасности.

12
12
12
2014-08-21 17:30:15 +0000

У меня была та же проблема с Crashplan.app.

Все решения, перечисленные здесь, не помогли бы мне, но это помогло мне http://forums.macrumors.com/showthread.php?t=1546163

Вы должны изменить систему и пользовательские неизменяемые флаги:

Сделайте это, чтобы увидеть, какие флаги активны в вашем файле/папке:

ls -lhdO MyFile

Ответ может выглядеть так:

drwxrwxr-x 3 root admin schg,uchg 102B Apr 8 2013 MyFile

schg , uchg - это неизменяемые флаги. Один для системы и один для пользователя. Чтобы удалить их, сделайте следующее:

chflags noschg CrashPlan.app # this removes system immutable flag
chflags nouchg CrashPlan.app # this removes the user immutable flags

Тогда, по крайней мере, для меня, файл разблокирован, и вы можете удалить его!

5
5
5
2011-05-04 21:02:23 +0000

После долгой борьбы, вот что мне пришлось сделать, чтобы исправить проблему:

  • Переместили файл в ~/Desktop
  • sudo chown myusername:staff ./entries
  • Перемещение файла обратно в исходное местоположение не сработало (Операция не разрешена, опять же), так что…
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries
4
4
4
2013-09-19 22:49:53 +0000

У меня была та же проблема, с моей домашней папкой. В конце концов, я просто использовал поисковик вот так:

Go -> Компьютер -> ваш диск -> Пользователи -> ваше имя пользователя -> щелкните правой кнопкой мыши -> Получить информацию

Я обнаружил, что он был заблокирован, наверное, я сделал это в прошлом и забыл. Снял флажок с блокировки, проблема устранена.

Я могу порекомендовать использовать ‘Получить информацию’ от finder для решения такого рода проблем.

(OS X 10.8.3)

1
1
1
2015-03-23 15:28:32 +0000

Убедитесь, что и файл, и его родительская папка разблокированы 0x2 и 0x2 и я столкнулся с аналогичной проблемой при попытке удалить файл сигнатуры электронной почты Mac Mail. Я не мог удалить его, пока не разблокировал файл и его родительскую папку.

Похожие вопросы

12
5
13
8
9