Не удается записать в ~/Library, несмотря на то, что разрешения выглядят нормально

Я совершенно запутался в этом — Macbook Air, 10.9.2. Насколько я могу судить, я должен иметь возможность писать в каталог моей библиотеки. Все, что я вижу, предполагает, что я должен уметь:

[njvack@zot Library]$ sw_vers | grep ProductVersion
ProductVersion: 10.9.2
[njvack@zot Library]$ id -a
uid=503(njvack) gid=20(staff) groups=20(staff),403(com.apple.sharepoint.group.3),12(everyone),61(localaccounts),402(com.apple.sharepoint.group.2),100(_lpoperator),401(com.apple.sharepoint.group.1)
[njvack@zot Library]$ pwd
/Users/njvack/Library
[njvack@zot Library]$ ls -ld@ .
drwx------@ 58 njvack  staff  1972 Apr 14 16:06 .
    com.apple.metadata:_kTimeMachineNewestSnapshot    50 
    com.apple.metadata:_kTimeMachineOldestSnapshot    50 
[njvack@zot Library]$ touch foo
touch: foo: Permission denied

И тогда по какой-то причине я могу работать в ~/Library/iMovie, хотя разрешения должны быть фактически идентичными:

njvack@zot Library]$ cd iMovie/
[njvack@zot iMovie]$ pwd
/Users/njvack/Library/iMovie
[njvack@zot iMovie]$ ls -ld@ .
drwx------+ 4 njvack  staff  136 Apr 16 08:41 .
[njvack@zot iMovie]$ touch foo

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

РЕДАКТИРОВАТЬ: Как было предложено, вот записи ACL:

[njvack@zot Library]$ ls -led .
drwx------@ 58 njvack  staff  1972 Apr 14 16:06 .
 0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown

... и поскольку ACL переопределяют разрешения UNIX , удаление ACL было трюком:

[njvack@zot Library]$ pwd
/Users/njvack/Library
[njvack@zot Library]$ chmod -RN .
[njvack@zot Library]$ touch foo

Как я получил такие странные ACL в моей ~/Library? Не имею представления.

Судо работает?
Что ls -ld@eOна нем показывает? (Значки -eи -Oотображают записи управления доступом и флаги файлов соответственно.)
@GordonDavisson Это были записи ACL, спасибо! Если вы добавите ответ (chmod -RN ~/Library рекурсивно удаляет их), я приму его :)

Ответы (1)

Чтобы увидеть остальные разрешения (ACL и файловые флаги), добавьте -eи -Oк lsкоманде. Я обычно использую ls -leO@версию ls.

В этом случае проблема заключалась в записи управления доступом «запретить», которая переопределяет обычные разрешения POSIX. Я понятия не имею, как это могло быть добавлено в вашу папку ~/Library, но вы можете удалить его с помощью chmod -N ~/Library.

Это немного поздно, но я бы не рекомендовал использовать -R(применять рекурсивно ко всему содержимому) в этой chmodкоманде, поскольку внутри ~/Library есть некоторые элементы, которые должны иметь ACL (в основном для предотвращения случайного переименования или удаления важных элементов) . Но я не думаю, что полное удаление приведет к какому-то реальному вреду, и если вы беспокоитесь о других ложных ACL, рекурсивный сброс имеет смысл.

К группе подкаталогов также применялись сумасшедшие списки ACL, так что это либо собиралось «отладить магические ошибки навсегда» (например, это заставило iTunes сообщить мне, что резервная копия моего iPhone повреждена, за исключением того, что резервных копий не было вообще). ) или «к черту ACL», и я выбрал последнее :)
В таком случае да, рекурсивный сброс - лучший вариант. Я немного огляделся и не вижу ни одного из «стандартных» ACL-списков, которые действительно выглядят важными.