Intereting Posts
Вставка строки в файл только в том случае, если эта строка еще не является частью файла Обновление curl, но «openSUSE-12.3-Update-Non-Oss», похоже, устарело Выполнение сценария оболочки из командной строки Есть ли способ получить журналы для процессов запуска в /etc/init.d? Не привязывайте окна к краю при перемещении между мониторами Как коррумпировать файл архива контролируемым образом? Нечетные символы, добавленные в строку в подстановке команд Запустить сценарий оболочки после перезагрузки в beaglebone black Есть ли способ сделать gnome-terminal похожим на чистую Arch? Как использовать stdin с тройником или другими типами труб или перенаправление выходов? Взаимодействие с приложениями X программно Приоритет перенаправления stdin и stdout в Bash Как отключить приостановление на закрытой крышке ноутбука на NixOS? слияние всех файлов в один файл? compgen и SELinux

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

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

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

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

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

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

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

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

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

Для этого вам нужны как x и w .

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

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

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

В нем объясняется, почему вы не можете удалить файл внутри каталога только с помощью w : при удалении файла вам нужно уменьшить количество ссылок на индексный дескриптор на 1 – вам нужно знать индексный дескриптор – таким образом вам понадобится x для каталога .

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

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

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

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

Да.

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

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

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

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