Wie kann man in GNU / Linux das Löschen von Dateien und Verzeichnissen, die einem Benutzer gehören, auf einen Superuser beschränken?

2

Wie kann man in GNU / Linux Verzeichnisse so einstellen, dass der Besitzer nur Dateien / Verzeichnisse hinzufügen / lesen kann, aber nur ein Superuser das Löschen in dieser Struktur durchführen kann?

Stellen Sie sich das folgende Szenario vor: Sie rsyncspeichern einige Dateien und Verzeichnisse, deren Eigentümer Sie sind, in einem Verzeichnis. Sie möchten in dieses Verzeichnis schreiben können (und später, wenn Sie die Sicherung aktualisieren - dh rsyncerneut - auch in alle Unterverzeichnisse schreiben), möchten jedoch nichts in löschen können diese Struktur, es sei denn, Sie sind ein Superuser.

Das eingeschränkte Löschen-Flag tin chmodhilft in dieser Situation nicht, da es das Löschen durch Nicht-Besitzer einschränkt.

Das Einstellen des Modus u=rX,go=für die Dateien und Verzeichnisse (während der Übertragung mit rsync) hilft auch nicht, da eine spätere Übertragung rsyncnur möglich ist, wenn wdas Modusbit vor dem Starten zu allen Verzeichnissen auf dem Empfänger hinzugefügt rsyncwird. Dies ist sehr zeitaufwändig .

Ist ACL der richtige Weg hierher?

Update: Auch mit ACL sehe ich keine Möglichkeit, dies zu tun.

Omid
quelle

Antworten:

1

Dies ist in einer Standard-Linux-Umgebung nicht möglich. Sie können möglicherweise eine Regel für SELinux, Tomoyo oder was auch immer schreiben, um das Löschen von Dateien zu verbieten. Dies hindert den Benutzer jedoch nicht daran, die Datei absichtlich mit Datenmüll zu überschreiben oder vollständig zu kürzen.

Grawity
quelle
1

Sie können dies irgendwie mit klebrigen Bits tun .

$ mkdir drop_box
$ chmod 777 drop_box
$ chmod u+s,g+s drop_box
$ ls -l
total 4
drwsrwsrwx    2 tclark   authors      4096 Sep 14 10:55 drop_box

Jetzt kann jeder Dateien in dieses Verzeichnis verschieben, aber beim Erstellen in drop_box werden sie Eigentum von tclark und den Gruppenautoren. Dieses Beispiel zeigt auch, wie Sie mehrere Berechtigungsstufen mit einem einzigen Befehl ändern können, indem Sie sie durch ein Komma trennen. Genau wie bei den anderen Berechtigungen hätte dies mit den numerischen Werten SUID und SGID (4 bzw. 2) zu einem Befehl vereinfacht werden können. Da wir in diesem Fall beide ändern, verwenden wir 6 als ersten Wert für den Befehl chmod.

$ chmod 6777 drop_box/
$ ls -l
total 4
drwsrwsrwx    2 oracle   users        4096 Sep 14 10:55 drop_box

Völlig nicht sicher, ob dies Ihnen helfen wird, Ihr Ziel zu erreichen, da ich mir die richtigen Berechtigungen nicht vorstellen kann, um die Dateien und Verzeichnisse für Ihr Beispiel zum Arbeiten zu geben. Ich habe das gerade gepostet, falls Sie nichts anderes zu tun haben.

Viel Glück.

Stefgosselin
quelle
Der Punkt in meiner Frage ist, nicht den Inhaber geändert zu haben.
Omid
1

Schauen Sie sich unseren guten Freund chattr an . Wenn Sie einen ext2 / 3/4-basierten FS verwenden, können Sie das unveränderliche oder nicht löschbare Bit setzen, und nicht einmal root kann die Datei löschen, bis Sie das entsprechende Bit deaktivieren.

cwawak
quelle
Die Frage scheint zu erfordern, dass die Dateien veränderbar bleiben (um die Sicherung zu aktualisieren).
Grawity
Guter Fang. chattr ist möglicherweise nicht die beste Wahl, um alle Anforderungen zu erfüllen.
Cwawak