sudo chown не работает, операция не разрешена

8

Я нашел подобные вопросы здесь, но ответы на эти вопросы не решают мою проблему.

Если я сделаю:

sudo chown <username> main.m

Я получаю операцию не допускается ошибка.

Общее решение предыдущих ошибок было:

sudo chflags nouchg main.m

снять флаг блокировки. Однако после этого я все еще не могу сжать файл. Я также попробовал:

chflags noschg main.m

в однопользовательском режиме без какой-либо удачи - я получаю операцию не допускается ошибка.

Если у кого-то есть мысли, мне было бы интересно.

ericg
источник
Что лежит в основе того, что вы пытаетесь сделать? Возможно, у этого файла есть причина блокировки.
Тамара Вийсман
Так что я могу использовать его в качестве тестовых данных, не помещая код в безопасный вспомогательный инструмент, который требует дополнительной работы для отладки - это не невозможно, но достаточно раздражает, что если я могу изменить атрибуты файла, так что безопасный вспомогательный инструмент не требуется, это сделало бы вещи немного легче. Учитывая, что это только тестовые данные, которые были созданы, больше нет веских причин для блокировки.
ericg
1
На каком типе файловой системы находится файл? Вы не пытаетесь использовать chownфайловую систему NTFS / FAT?
Zoredache
@ericgorr: большая часть этого находится на моей голове; Я не знаю, что такое безопасный помощник. Но, как вы говорите, это просто тестовые данные, которые были созданы; Вы правильно закрыли тестовый файл в своем коде?
Тамара Вийсман
@ Вспомогательный инструмент - это способ OS X дать приложению повышенные привилегии при сохранении привилегий - поэтому, если приложение хочет, например, изменить защищенный файл, оно говорит (авторизованному) вспомогательному инструменту изменить файл для него. Я предполагаю, что Эрикгорр хочет избежать повышения его / ее приложения или чего-то другого, чтобы избежать строгой отладки, которая идет с этим.
Явный

Ответы:

8

Файлы Mac могут быть защищены четырьмя тремя различными способами, которые я знаю:

  1. Стандартные права собственности и разрешения Unix, такие как r / w / x для пользователя / группы / других пользователей, которые вы видите ls -lи исправляете с помощью chown(1)и chmod(1).
  2. Файловые флаги, такие как uchgи schgкоторые вы видите, ls -lOи исправить с помощью chflags(1).
  3. Старые метаданные Finder «Бит блокировки», которые вы видите GetFileInfo filename. Вы также можете увидеть наличие метаданных Finder, но не их значение, с ls -l@. Вы можете это исправить с помощью SetFile(1). Не берите в голову, это uchgтеперь сопоставлено с флагом.
  4. Списки контроля доступа (ACL), которые вы видите ls -leи исправляете с помощью связанных с ACL аргументов chmod(1).

Итак, давайте посмотрим, что случилось с вашим файлом, объединив все эти флаги в ls:

ls -lO@e main.m

Похоже, вы уже знаете, как бороться с № 1 и № 2.

Если вы видите ACL (# 4), вы можете исправить это с помощью связанных с ACL аргументов chmod(1).

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

Spiff
источник
Проблема, похоже, связана с ACL. Мне действительно интересно, что у sudo нет таких замков. Кроме того, chmod -R -a # 0 * действительно удалил ACL из большинства файлов в иерархии, но не смог удалить их из некоторых - использование sudo с chmod не помогло.
ericg