Разрешение только на запись для каталога не позволяет переименовывать (перемещать) файлы внутри него?

Разрешение только на запись для каталога не позволяет переименовывать (перемещать) файлы внутри него?

На самом деле я хотел бы задать более общий вопрос: «Что именно позволяет делать разрешение на запись в каталог?» — но давайте рассмотрим его на конкретном примере.

Это длинный вопрос, если вы торопитесь.прочитайте жирный шрифт-- он должен охватывать основную часть.

Разные источники (хороший вопрос,еще,гримора) скажите что-то похожее на следующее о правах доступа к каталогу:

r, read -- чтение содержимого каталога (имена файлов внутри)

w, write -- изменение атрибутов каталога (например, времени изменения) и создание/переименование/удаление записей внутри

x, поиск — при доступе к файлам внутри вы получаете доступ к индексному дескриптору файла, следовательно, можете получить доступ к его фактическому содержимому

У меня проблема с описанием w. К каким атрибутам каталога оно дает вам доступ?Я не могу создать/переименовать/удалить файл внутри каталога, имеющего только разрешение на запись: Я создаю каталог ( tdir/) и файл внутри ( afile), chmod -x-r tdir/, mv tdir/afile tdir/af, rm tdir/afile, touch tdir/newfile-- все попытки завершаются ошибкой с отказом в доступе, если только я не установлю xразрешение также и для каталога.

И xсамо по себе не дает вам разрешения создавать/переименовывать/удалять файлы внутри каталога.

Для этого вам понадобятся и то, xи другоеw.

Но touch tdirизменяет ли время модификации каталога wтолько с помощью.

Я бы перефразировал приведенные выше источники следующим образом для соответствия проблеме: каталог rпозволяет вам видеть имена файлов внутри, но не имеет доступа к самому файлу (к иноду); xдает вам доступ к инодам файлов (что означает, что вы можете видеть их разрешения и, согласно им, иметь доступ к содержимому), но вы по-прежнему не можете ничего изменить в каталоге; каталог на самом деле является неким файлом, и чтобы что-то в нем изменить, вам нужно разрешение w.

Таким образом, когда вы что-то меняете в каталоге, вам нужно wразрешение. Если для вашего изменения требуются иноды файлов в каталоге, вам xтоже нужно.

Это объясняет, почему нельзя удалить файл внутри каталога, используя wтолько:при удалении файла вам необходимо уменьшить количество ссылок inode на 1 -- вам необходимо знать inode -- таким образом, вам необходимо xдля каталога.

Но зачем вам нужно xсоздание (вы могли бы попросить систему создать файл, не раскрывая inode?) и переименование/перемещение файла (когда вы перемещаете файл, вы его никак не меняете, вы только меняете записи внутри каталогов и их количество inode?)?

Может быть, это просто особенность реализации? То есть, действительно, вам не нужен inode для переименования/создания файлов — вам нужны только имена файлов и wразрешение; но inode и filename составляют одну запись в каталоге; таким образом, изменение имен файлов = изменение записей = своего рода доступ к inode.

А также какие атрибуты есть у каталогов кроме времени модификации, разрешений и записей файлов? Что еще в каталоге можно изменить wтолько с помощью?

решение1

x дает вам доступ к inode файлов (что означает, что вы можете видеть их разрешения и, в соответствии с этим, иметь доступ к содержимому), но вы по-прежнему не можете ничего изменить в каталоге; каталог на самом деле является своего рода файлом, и чтобы что-то в нем изменить, вам необходимо разрешение w.

Да.

Но зачем вам x для создания (вы могли бы попросить систему создать файл, не раскрывая inode?) и переименования/перемещения файла (когда вы перемещаете файл, вы его никак не меняете, вы только меняете записи внутри каталогов и их количество inode?)?

Без xвы можете влиять только на сам каталог — вы видите каталог снаружи. Без xзаписи каталога находятся вне ваших границ. Если вы хотите добавить, удалить или изменить (например, переименовать) запись в каталоге, вам необходимо иметь доступ к этой записи.

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

Разрешение на запись в каталоге позволяет создавать и удалять записи. Переименование считается атомарным созданием записи и удалением другой. Помимо этого, каталоги имеют те же метаданные, что и обычные файлы. Разрешение на запись также позволяет изменять метки времени последнего изменения и последнего доступа к каталогу. Чтобы изменить разрешения, групповое владение или списки контроля доступа к каталогу (где поддерживается), вам необходимо стать его владельцем. Чтобы изменить его владельца, большинству вариантов unix требуется root.

Связанный контент