Интерпретация 1: каталог является подпространством файловой системы. Он может быть далее подразделен на подпространства путем создания в нем подкаталогов. Владелец директории foo
должен иметь контроль над всем внутри подпространства: foo/bar
, foo/bar/qux
и т.д.
Интерпретация 2: каталог является подпространством файловой системы. Каждый каталог связан с другим каталогом, который называется его родителем. Владелец каталога foo
имеет контроль над всем внутри подпространства; однако, для подкаталога foo/bar
владелец foo
имеет контроль над тем, bar
может ли быть присоединен к нему, foo
но не над тем, что входит внутрь bar
: только владелец bar
имеет контроль над этим.
Свидетельство в пользу интерпретации 2: как вы заметили, как работают разрешения. Кроме того, тот факт, что некоторые файловые системы Unix позволяют подключать каталог к нескольким родителям: это называется наличием нескольких жестких ссылок. (Наличие нескольких жестких ссылок является обычным для обычных файлов, но обычно это не рекомендуется или запрещено для каталогов, в основном из-за риска создания циклов, когда каталог является его собственным прародителем N раз удаляется - поэтому вы не можете получить к нему из корня Каталог, который является очень распространенным ожиданием. Существует также проблема того, что делать, если каталог имеет 0 жестких ссылок, но не является пустым: поскольку каталог не присоединен, вы хотите удалить его, но что вы делаете с его содержание?)
Свидетельство в пользу интерпретации 1: на практике каталоги имеют одного родителя и, таким образом, образуют древовидную структуру. И вы не можете получить доступ, foo/bar/qux
если у вас нет разрешения на выполнение, foo
а также bar
(ну, за исключением того, что есть несколько неясных способов получить доступ bar
без предоставления доступа foo
). Так что верхние уровни имеют значение.
С практической точки зрения, в вашей ситуации, пользователь А может сделать
макдир мусор
мв фу / бар мусор /
рмдир фу
mv
чтобы обойти проблему, не работает для меня на Raspbian (не пробовал ни на каких других системах). Кроме того, изучив эту проблему, я не видел использованияmv
в качестве решения, упомянутого где-либо еще. На самом деле, исходя из моего понимания того, как работают разрешения, становится понятным, что происходитmv
сбой, когда я пытался это сделать. Я что-то упускаю? Или эта функциональность, возможно, изменилась? @Gilles @PaulHoopermv
? Я могу использоватьmv
для переименования директории бара. Это означает, что этоmv
удается, пока я не пытаюсь переместить панель за пределы текущего каталога или в любой другой каталог. Но приведенный вами пример (который перемещает панель вверх по каталогу) не работает для меня (разрешение отклонено). Предполагается ли в приведенном вами примере конкретные условия, отличные от указанных в вопросе?bar
каталог вверх, он перемещает его в каталог, которым вы владеете.garbage
может быть где угодно в одной и той же файловой системе, необязательно роднойfoo
.Единственный способ обойти это - использовать setgid или setuid в родительском каталоге или использовать ACL.
Установите директорию setgid с помощью
Установите для него ACL по умолчанию с помощью
Это устанавливает его как ACL по умолчанию на этом пути. Вы должны смонтировать файловую систему, которая содержит этот путь, с опцией acl!
Теперь скажите мне, почему вы думаете, что хотите этого.
источник
make install
запуске от root начинает что-то строить.cd ~user && mkdir qqq && touch qqq/qqq
я не могу избавиться от qqq от пользователяchmod g+s .
иrm -Rf qqq
.