Почему chown сообщает «Операция не разрешена» в OS X?


65

Я пытаюсь сделать следующее на моем 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отредактировано; только этот застрял, и я не понимаю, почему.


1
Ты пробовал sudo chgrp wheel ./entries?
Белка

1
Сделайте проверку файловой системы. Откройте Дисковую утилиту, выберите свой том и нажмите « Проверить диск» , а затем, при необходимости, восстановить диск .
Даниэль Бек

Убедитесь, что файл не заблокирован в Finder (на значке нет значка блокировки). Чтобы изменить его, откройте диалоговое окно « Получение информации » и снимите флажок « Заблокировано» .
Даниэль Бек

Если это «внешний» том (т. Е. Не системный том), возможно, вам придется удалить опцию «Игнорировать владение этим томом». (См. В нижней части окна Get Info для самого тома).
MIVK

Ответы:


86

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

  • на стандартные разрешения 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», защита целостности системы (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 и запустить команды из Терминала (вам, возможно, придется сначала использовать Дисковую утилиту, чтобы разблокировать и смонтировать загрузочный диск, затем помните, что ваши файлы будут находиться под /Volumes/Macintosh HDвашей загрузкой или вне зависимости от того, что вы загрузили имя диска) или вообще отключите SIP и затем перезагрузите компьютер, после чего команды должны работать. Имейте в виду, однако, что будущие обновления ОС, скорее всего, восстановят restrictedфлаг и com.apple.rootlessатрибут всех файлов, из которых вы его удалили.

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

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


7
Помимо этого, другие флаги могут помешать вам изменить ваши файлы. В моем сценарии я положилsudo chflags -R nouchg,noschg,nouappnd,nosappnd,noopaque,dump .
djjeck

1
Примечание: если что-то имеет флаг «неизменяемый», флажок «Заблокировано» в «Получении информации» будет отмечен серым цветом. "sudo chflags nouchg" исправляет это.
Foo Bar

1
Я не мог сделать и то -Nи ugo+rwдругое одновременно (у меня получилось Failed to clear ACL on file ugo+rw: No such file or directory), но запуск их по отдельности работал нормально. Если рекурсив желателен, -Rдолжен быть первый аргумент.
owenfi

3
Обратите внимание, что защита целостности системы (без прав root) также может вызвать это в El Capitan и более поздних версиях. Чтобы решить эту проблему, загрузитесь в Recovery Mode ( Cmd-R), откройте Terminal и запустите csrutil disable, затем перезапустите (чтобы включить, используйте csrutil enable).
Эрвин Вессельс

Спасибо ... Я понятия не имел о флагах файлов. Теперь я понимаю, почему так сказаноoverride rwxrwxrwx huttarl/staff uchg for green.html?
LarsH

18

У меня такая же проблема. Оказывается, оскорбительные файлы были помечены ОС как «Заблокированные». Я нашел это решение, и оно решило проблемы в считанные секунды:

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можно убрать флаги. Некоторые из атрибутов / метаданных файла и как они обрабатываются различными инструментами копирования, здесь .


sudo rm -Rf foldername/отлично работает на OSX Mountain Lion
Aryo

5
@Aryo: rmудаляет каталог. Есть ли способ просто разблокировать все, не удаляя его? Когда я смотрю uchg, не настроен, и я могу включать и выключать его, как и ожидалось (с помощью chflags [no]uchg), но это не влияет на значок замка в Finder или на мои способности chown.
2013 года

12

У меня была такая же проблема с 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

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


Удивительно, пришлось chflagsиспользовать sudoхотя, но это имеет смысл
Фелипе

У меня была та же проблема с CrashPlan.app (у меня была drwxrwxr-x@ 3 _BGMXPCHelper admin schg 96B 9 Jan 2018 CrashPlan.app), и это единственное решение, которое позволило мне удалить его, спасибо!
webeno

12

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

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

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


1
Ух ты. Это сводило меня с ума. Каким-то образом мне нужно было скопировать что-то в / usr / lib, чего в противном случае не было в / usr / local / lib (не спрашивайте меня, почему). И это помогло.
qwerty_so

4
На самом деле, вам не нужно вообще отключать Rootless, вы можете просто загрузиться в режиме восстановления (что нужно было бы сделать в любом случае, чтобы отключить Rootless) и внести необходимые изменения в Терминале.
Старый Про

6

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

  • Переместил файл в ~/Desktop
  • sudo chown myusername:staff ./entries
  • Перемещение файла обратно в исходное местоположение не сработало (операция снова не разрешена), поэтому ...
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries

4

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

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

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

Я могу рекомендовать использовать «Get Info» из поиска, чтобы решить такие проблемы.

(OS X 10.8.3)


Это помогло мне разблокировать .isoот глючного Virtual Box.
Накилон

1

Убедитесь, что файл и его родительская папка разблокированы

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.