%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%20%D0%BD%D0%B5%D0%B3%D0%BE%3F.png)
На самом деле я хотел бы задать более общий вопрос: «Что именно позволяет делать разрешение на запись в каталог?» — но давайте рассмотрим его на конкретном примере.
Это длинный вопрос, если вы торопитесь.прочитайте жирный шрифт-- он должен охватывать основную часть.
Разные источники (хороший вопрос,еще,гримора) скажите что-то похожее на следующее о правах доступа к каталогу:
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.