Wie kommt es, dass ein Benutzer die 755-Dateien eines anderen Benutzers löschen kann?

35

Ich habe ein Backup-Upload-Skript, das die Dateien von scp mithilfe des Benutzers auf einen anderen Server überträgt upload. Ein anderes Skript auf dem Zielserver zeigt diese dann einem anderen Benutzer an und setzt den Dateimodus auf 755.

Wenn ich dann SSH in den Zielserver mit dem uploadBenutzer, kann ich die chowned-Dateien löschen. Sollten sie nicht nur gelesen werden?

So sieht eine Datei auf dem Zielserver aus und der Benutzer uploadkann sie löschen.

-rwxr-xr-x 1 maciekish maciekish 650M Nov  1 01:07 2014-11-01-data.tar.bz2

Der Benutzer uploadwurde gerade mit hinzugefügt useraddund ist kein Teil der maciekishGruppe.

Wenn uploadich versuche, die Datei per ssh zu löschen, erhalte ich die Frage, ob ich "schreibgeschützte reguläre Datei" löschen möchte und ich kann sie sagen Yund löschen.

Maciej Swic
quelle
4
Im Wesentlichen ein Duplikat von Warum können rmschreibgeschützte Dateien entfernt werden?
G-Man sagt, dass Monica

Antworten:

64

Die Dateien sind schreibgeschützt. Wenn Sie eine Datei löschen, wird sie jedoch nicht geändert, sondern nur das übergeordnete Verzeichnis (dh, die Datei wird im Grunde genommen aus der Verzeichnisliste entfernt) - und es scheint, als hätten Sie vollständige Schreibberechtigungen für das Verzeichnis.

Sie können das stickyBit setzen, auch bekannt als "Eingeschränktes Löschen", das verhindert, dass andere Personen außer dem Eigentümer Dateien in diesem Verzeichnis umbenennen oder löschen (wie in /tmp). Führen Sie dazu chmod o+t *directory*als den Besitzer des Verzeichnisses aus.

Grawity
quelle
12

In einem typischen Unix-Dateisystem kann jede Datei durch eine beliebige Anzahl von Verzeichniseinträgen identifiziert werden, von denen jeder einen "Hardlink" enthält.

Aus Sicht der Implementierung besteht ein Unterschied zwischen dem Löschen des letzten Verzeichniseintrags (fester Link) für eine Datei und dem einfachen Löschen einer Referenz aus vielen. Aus semantischer Sicht gibt es jedoch keinen Unterschied.

Wenn mehrere feste Verknüpfungen zu einer Datei vorhanden sind, ändert das Schreiben in die Datei unter Verwendung einer dieser Verknüpfungen die Datei, die von allen von ihnen gesehen wird. Die Verwendung rmeines Links bewirkt jedoch lediglich, dass auf die Datei über diesen Link nicht zugegriffen werden kann. Andere Links zur Datei zeigen weiterhin genau dieselbe Datei an.

Superkatze
quelle
3
Allgemein bekannt als harte Links.
Bob
1
@Bob: Ich weiß, dass der Begriff "fester Link" verwendet wird, um Verweise zu beschreiben, die auf eine bereits vorhandene Datei erstellt wurden. Wenn in einer Datei noch nie mehr als ein Verweis vorhanden war, wird dieser einzelne Verweis immer noch als "harter Link" bezeichnet?
Supercat
3
Es gibt keinen Unterschied zwischen den Links. Datei A erstellen, Hardlink B erstellen, Datei A löschen. Ist B jetzt eine Datei oder ein Hardlink? Um zu verstehen, wie es funktioniert, ist es besser, es als N feste Links und nicht als 1 Datei und (N-1) feste Links zu sehen. Es gibt auch die Links, die beim Öffnen einer Datei vorhanden sind.
gnasher729
@ gnasher729: Ich stimme zu, dass es in Fällen, in denen mehrere Links zu einer Datei existieren oder existieren, Sinn macht, sie alle als "harte Links" zu bezeichnen, wenn zwischen ihnen kein semantischer Unterschied besteht. Andererseits würde ich denken, dass die Unterscheidung zwischen einem Verzeichniseintrag, der immer der einzige Verweis auf eine Datei war, semantisch und leistungsmäßig von Vorteil sein könnte, und einem, zu dem möglicherweise andere feste Links erstellt wurden. Auf jeden Fall wusste ich nicht, ob es richtig wäre, auf Verzeichniseinträge zu verweisen, von denen jeder als "harter Link" bezeichnet wird.
Supercat
2
@supercat es ist nicht unglaublich häufig, aber es ist richtig. Betrachten Sie das st_nlinkFeld ("Anzahl der festen Links") in struct stat. Einfach ausgedrückt, enthalten Verzeichnisse feste Links zu Dateien.
Hobbs