Interpretation 1: Ein Verzeichnis ist ein Unterraum des Dateisystems. Es kann weiter in Unterbereiche unterteilt werden, indem darin Unterverzeichnisse erstellt werden. Der Besitzer des Verzeichnisses foo
soll innerhalb der Subraum Kontrolle über alles hat: foo/bar
, foo/bar/qux
usw.
Interpretation 2: Ein Verzeichnis ist ein Unterraum des Dateisystems. Jedes Verzeichnis ist an ein anderes Verzeichnis angehängt, das als übergeordnetes Verzeichnis bezeichnet wird. Der Eigentümer des Verzeichnisses foo
hat die Kontrolle über alles im Unterraum. Bei einem Unterverzeichnis foo/bar
hat der Eigentümer von foo
jedoch die Kontrolle darüber, ob bar
er an das foo
, was sich darin befindet, angehängt werden kann, aber nicht darüber. bar
Nur der Eigentümer von bar
hat die Kontrolle darüber.
Beweise für Interpretation 2: Wie Sie bemerkt haben, die Art und Weise, wie Berechtigungen funktionieren. Auch die Tatsache, dass einige Unix-Dateisysteme das Anhängen eines Verzeichnisses an mehr als ein übergeordnetes Verzeichnis ermöglichen: Dies wird als mehrere feste Links bezeichnet. (Bei normalen Dateien ist es üblich, mehrere feste Links zu haben, bei Verzeichnissen wird dies jedoch normalerweise nicht empfohlen oder verboten, hauptsächlich wegen des Risikos, Schleifen zu erstellen, bei denen ein Verzeichnis von seinen Großeltern N-mal entfernt wird. Sie können also nicht vom Stammverzeichnis darauf zugreifen Verzeichnis, was eine sehr häufige Erwartung ist. Es gibt auch das Problem, was zu tun ist, wenn ein Verzeichnis 0 feste Links hat, aber nicht leer ist: Da das Verzeichnis nicht angehängt ist, möchten Sie es löschen, aber was tun Sie damit? Inhalt?)
Beweis für Interpretation 1: In der Praxis haben Verzeichnisse einen einzigen Elternteil und bilden so eine Baumstruktur. Und Sie können nicht darauf zugreifen, es foo/bar/qux
sei denn, Sie haben die Ausführungsberechtigung foo
für bar
(naja, außer dass es etwas undurchsichtige Möglichkeiten gibt, Zugriff zu erhalten, bar
ohne Zugriff zu erhalten foo
). Die oberen Ebenen spielen also eine Rolle.
Praktischer gesagt, in Ihrer Situation kann Benutzer A dies tun
mkdir Müll
mv foo / bar müll /
rmdir foo
mv
dem das Problem umgangen wird, funktioniert bei Raspbian nicht (habe es auf keinem anderen System versucht). Nachdem ich dieses Problem untersucht habe, habe ich die Verwendungmv
als eine Lösung gesehen, die nirgendwo anders erwähnt wurde. Aufgrund meines Verständnisses der Funktionsweise der Berechtigungen ist es in der Tat sinnvoll, dass dasmv
fehlschlägt, wenn ich es versucht habe. Vermisse ich etwas Oder hat sich diese Funktionalität vielleicht geändert? @ Gilles @ PaulHoopermv
? Ich kannmv
das Balkenverzeichnis umbenennen. Das bedeutet, dass diesmv
erfolgreich ist, solange ich nicht versuche, die Leiste außerhalb des aktuellen Verzeichnisses oder in ein anderes Verzeichnis zu verschieben. Aber das Beispiel, das Sie gegeben haben (das ein Verzeichnis nach oben verschiebt), funktioniert bei mir nicht (Berechtigung verweigert). Nimmt das von Ihnen angegebene Beispiel andere als die in der Frage angegebenen Bedingungen an?bar
ein Verzeichnis nicht nach oben verschoben , sondern in ein Verzeichnis, das Sie besitzen.garbage
kann überall auf dem gleichen Dateisystem sein, nicht unbedingt ein Geschwister vonfoo
.Die einzige Möglichkeit, dies zu umgehen, besteht darin, entweder eine setgid oder eine setuid im übergeordneten Verzeichnis oder eine ACL zu verwenden.
Stellen Sie das Verzeichnis setgid mit ein
Legen Sie eine Standard-ACL mit fest
Dadurch wird es als Standard-ACL für diesen Pfad festgelegt. Sie müssen das Dateisystem, das diesen Pfad enthält, mit der Option acl mounten!
Jetzt sag mir, warum du denkst, dass du das willst.
quelle
make install
von root aus anfange, etwas aufzubauen.cd ~user && mkdir qqq && touch qqq/qqq
ich als root fertig bin, kann ich qqq vom Benutzer nicht durchchmod g+s .
und loswerdenrm -Rf qqq
.