Попробуйте этот код

root /home/user $ touch hehehe

тогда как обычный пользователь

user ~ $ rm -f hehehe

Наш пользователь может удалить корневой файл внутри своего домашнего каталога. Это работает не только в их домашнем каталоге, но и внутри любого каталога, доступного для записи.

Сейчас попробуй

root /home/user $ mkdir -p testdir

а также

user ~ $ rm -rf testdir

Тоже работает Тем не мение:

root /home/user $ mkdir -p testdir/childdir
user ~ $ rm -rf testdir/childdir

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

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

Каковы точные правила относительно того, какие из примитивных операций файловой системы (create , delete и т.д.)`Могут быть выполнены в отношении разрешений файловой системы, которые имеет пользователь?

1 ответ1

3

Ответы становятся очень ясными, как только вы поймете, что во всех UNIX-совместимых файловых системах файл - это не нечто, что находится внутри каталога, а нечто совершенно независимое. Каталог - это не что иное, как набор ссылок на файлы (поэтому системный вызов для удаления файла из каталога является unlink()). Когда нет ссылок на файл (refcount равен нулю), сам файл умирает.

Это имеет несколько последствий:

  • Один и тот же файл может прекрасно существовать в нескольких каталогах файловой системы.
  • Ваш вопрос: удаление файла (или подкаталога) из каталога (удаление ссылки на него) или создание ссылки на него - это не операция над файлом, а над каталогом. Это подразумевает, что права доступа к файлу не имеют значения, это разрешения каталога, которые учитываются.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .