Frage Linux-Dropfolder, in dem Benutzer keine Dateien löschen können


Ich arbeite an einem Dateiserver-Projekt für die Schule und ich benutze Samba, um die Ordner zu teilen. Ich habe mit den Ordnerberechtigungen herumgespielt, aber ich kann nicht herausfinden, wie man einen Tropfen nur wie einen Ordner macht. Das möchte ich erreichen:

  • Besitzer (Server-Account): Volle Kontrolle (chmod number 7xx)
  • Gruppe (Benutzer, die sich beim Samba-Server anmelden): Nur Dateien ablegen (löschen), das bedeutet, Dateien im Ordner nicht öffnen / bearbeiten / löschen (chmod number x?x) 
  • andere: kein Zugang (chmod number xx0)

Ich habe viele verschiedene chmod-Einstellungen ausprobiert, aber nie das gewünschte Ergebnis erreicht. Ist das überhaupt möglich? Ich habe viel gegoogelt, konnte aber keine abschließende Antwort finden.

Vielleicht eine Möglichkeit, Berechtigungen für Dateien festzulegen, wenn sie im Ordner abgelegt werden?

Wenn Sie mehr Informationen über die Samba-Konfiguration oder etwas anderes benötigen, fragen Sie bitte!

Danke für deine Hilfe!


1
2017-09-28 19:01


Ursprung


Denken Sie daran, es gibt Berechtigungen für Dateien und Ordner. Sie können einen Ordner nur lesen oder schreiben. Ein Ordner ist normalerweise auch ausführbar, aber wenn Sie ihn nicht ausführbar machen, kann er nicht aufgelistet oder eingegeben werden, aber Dateien können gelesen oder geschrieben werden, falls angegeben (und wenn die entsprechenden Berechtigungen gesetzt sind). - Marty Fried
@MartyFried Ich habe herausgefunden, dass es auch für Leute okay ist, die Elemente im Ordner aufzulisten, sie aber nicht zu öffnen. Welche Berechtigungen muss ich für die Dateien und den Ordner festlegen? Danke für Ihre Antwort! - Bram
Sie sollten Ihre Frage dann bearbeiten. Aber ich schätze, du willst, dass die Dateien sind rw--w----(620). Wenn es sich um ausführbare Dateien handelt, wäre es das rwx--wx---- (730). - Marty Fried
@MartyFried Du hast erklärt es ist meistens rückwärts. Eine ausführbare Berechtigung für einen Ordner gibt das Recht, auf den Inhalt des Namens zuzugreifen (sowie auf cd in den Ordner, wie du sagst). Die Leseberechtigung für einen Ordner ermöglicht es Ihnen, die Namen der Einträge aufzulisten (aber nicht einmal deren Metadaten anzuzeigen). Sehen Dieses Beispiel und Gilles 'Antwort zu Sind die Berechtigungen des übergeordneten Verzeichnisses wichtig, wenn auf ein Unterverzeichnis zugegriffen wird? - Eliah Kagan
@EliahKagan: Danke, dass du das gezeigt hast; Schade, ich kann einen Kommentar nicht bearbeiten. TBH, ich habe wenig Erfahrung mit Multi-User-Systemen, aber ich wollte hauptsächlich in die allgemeine Richtung zeigen, weshalb ich nicht versucht habe, eine tatsächliche Antwort einzugeben. Ich war zu dieser Zeit wahrscheinlich zu sehr in Eile und habe es nicht klar durchdacht. - Marty Fried


Antworten:


Probieren Sie dieses Verfahren aus.

Erstellen Sie einen freigegebenen Ordner und geben Sie die richtige Berechtigung:

  mkdir /pathYouWant/share
  chmod 770 /pathYouWant/share

Dies gibt keinen Zugriff auf andere.

  chmod +t /pathYouWant/share

Dieser Modus, nach chmod Handbuchseite:

   The  restricted  deletion  flag  or  sticky  bit is a single bit, whose
   interpretation depends on the file type.  For directories, it  prevents
   unprivileged  users  from  removing or renaming a file in the directory
   unless they  own  the  file  or  the  directory

Wie von Marty Fried erzählt, sollten Dateien, die im Share-Ordner erstellt wurden, die richtigen Berechtigungen haben, und dies kann mit erreicht werden Samba teilen Masken im smb.conf:

  create mask = 440
  directory mask = 550

Windows-Programme sollten nicht versuchen, schreibgeschützte Dateien zu entfernen, es sei denn delete readonly Option ist auf Ja eingestellt.

  delete readonly = no

Wenn Sie alle Dateien im Freigabeordner ausblenden möchten:

  veto files = /*/
  delete veto files = no

Laut Samba Handbuch diese Richtlinie:

Was passiert, wenn der Benutzer versucht, ein Verzeichnis zu löschen, das enthält?   Veto-Dateien? Hier kommt die Option "Veto-Dateien löschen" ins Spiel   Wenn diese boolesche Option auf yes gesetzt ist, kann der Benutzer sowohl die   reguläre Dateien und die Veto-Dateien im Verzeichnis und das Verzeichnis   selbst wird entfernt. Wenn die Option auf Nein gesetzt ist, kann der Benutzer nicht löschen   die Veto-Dateien und folglich das Verzeichnis wird nicht gelöscht   entweder. Aus der Sicht des Benutzers erscheint das Verzeichnis leer, aber   kann nicht entfernt werden.

Nach dieser Konfiguration bleibt als einziges Problem, dass der Benutzer seine eigenen Dateien löschen kann, selbst wenn er sie nicht sieht (Warum ist das unklar?).

Also beschließen wir, dem Vorschlag von "Seppi" zu folgen, um die Aufgabe abzuschließen, und Bram Driesen hat ein Skript erstellt, das den Dateibesitz auf den Host-PC ändert.

Er verwendete incron um das Skript zu starten, wenn eine Datei im folgenden Ordner abgelegt wird Dies als Leitfaden, um es einzurichten.


1
2017-09-30 11:35



Ich habe diese Methode heute versucht, aber es schien nicht zu funktionieren. - Bram
Kannst du erklären, was schief läuft? - Lety
Ich glaube, ich habe das Problem jetzt gefunden. Lass es mich schnell testen - Bram
Entschuldigung, ich wusste nicht, dass Sie möchten, dass der Benutzer seine eigenen Dateien nicht entfernen kann. Jetzt sehe ich, dass ich einen Fehler gemacht habe. Morgen werde ich einen anderen Weg gehen und ich gebe dir ein Feedback, wenn ich es finde. - Lety
Lass uns setze diese Diskussion im Chat fort. - Lety


Leider ist dein Problem nicht so einfach lösbar. Wenn ein Benutzer Schreibrechte in einem Verzeichnis hat, kann er auch Dateien löschen. Selbst wenn er sie nicht löschen konnte, konnte er dennoch eine Datei mit Nullen füllen, was ein Löschen von Daten, aber nicht des Dateisystemknotens wäre.


Eine Idee, die ich einmal benutzt habe:

Sie erstellen einen Cronjob, der die Schreibrechte jeder Datei in einer Verzeichnisstruktur (wie jede Datei in /home/guest).

Beachten Sie, dass Sie nicht einfach verwenden können chmod g-w -R /home/guest. Dies würde auch das Schreibbit von den Verzeichnissen nehmen, was es unmöglich macht, neue Dateien dort zu plazieren. Sie müssen also über jede Datei iterieren und das Gruppenschreibbit entfernen.

Das Intervall der Cronjob-Ausführung liegt bei Ihnen - damals habe ich es auf 10 Minuten eingestellt. Ich kenne Ihre Umgebung nicht, daher kann ich Ihnen keine Empfehlung geben.

Leider habe ich dieses Skript nicht mehr, also musst du etwas Bash-Skripting machen, um es zum Laufen zu bringen. Aber im Ernst, ich bezweifle, dass dies eine effiziente Methode ist.


1
2017-09-28 20:58



Hmm sieht wie eine Lösung aus, aber nicht die ideale Lösung. Aber hey, danke fürs Antworten! - Bram