Wie kann man mehreren Personen erlauben, den Zeitstempel einer Datei über SFTP zu ändern?

7

Ich habe ein Verzeichnis, auf das mehrere Benutzer Zugriff haben. Sie ändern, laden und löschen Dateien im Verzeichnis. Sie gehören alle zur selben Benutzergruppe. Die Dateien im Verzeichnis haben Zugriffsrechte von 660.

Das Problem ist, dass die Benutzer die Änderungszeit von Dateien nicht festlegen können, wenn sie nicht der Eigentümer dieser Datei sind.

Beispielsweise lädt Benutzer AAA eine Datei 'EXAMPLE.jpg' hoch, Benutzer BBB lädt sie herunter, ändert sie und lädt sie erneut hoch. Der Zeitstempel der zuletzt geänderten Datei der Datei entspricht dem Zeitpunkt, zu dem BBB sie hochgeladen hat, und nicht zu dem Zeitpunkt, an dem sie tatsächlich zuletzt geändert wurde. Ich habe versucht, die Berechtigungen der Datei auf 777 zu setzen, aber es hat nicht geholfen.

Das Problem zeigt sich in SFTP-Protokollen als:

Dec  5 16:37:08 servername sftp-server[695]: open "/shared_directory/EXAMPLE.jpg" flags WRITE,CREATE,TRUNCATE mode 0666
Dec  5 16:37:08 servername sftp-server[695]: close "/shared_directory/EXAMPLE.jpg" bytes read 0 written 42765
Dec  5 16:37:08 servername sftp-server[695]: set "/shared_directory/EXAMPLE.jpg" modtime 20111205-15:53:31
Dec  5 16:37:08 servername sftp-server[695]: sent status Permission denied

Winscp wird sich über die Situation als beschweren Upload of file 'example.jpg' was successful, but error occurred while setting the permissions and/or timestamp. If the problem persists, turn on 'ignore permission errors'. Die Warnung kann leicht ignoriert werden, aber was ist, wenn ich meinen Benutzern erlauben möchte, die Zeitstempel zu "bewahren", indem ich sie nach dem Hochladen der Datei bearbeite?

Es gibt bereits eine ähnliche Frage als diese, die jedoch unbeantwortet geblieben ist :(.

jous
quelle

Antworten:

8

Aus irgendeinem mysteriösen Grund schützen Unix / Linux-Systeme die mtime so stark wie möglich. Nur der Eigentümer [*] kann das tun, was Sie benötigen. Sie können es selbst mit den ACLs (man setfacl) nicht steuern.

Eine Problemumgehung, die ich mir vorstellen kann, ist die Verwendung von Samba, das eine dos filemodeOption hat. Es macht genau das, was Sie benötigen (obwohl der Name nicht sehr offensichtlich ist). Natürlich bin ich weit davon entfernt, Samba über SFTP zu empfehlen. Samba ist ein administrativer Albtraum.

In der Tat, wenn ich du wäre, würde ich einen sehr, sehr hässlichen Hack machen. Schreiben Sie ein Skript, das die SFTP-Protokolldatei nach der set ... modtimeZeile durchsucht und für jede dieser Zeilen sofort versucht, sie auszuführen touch --mtime. Offensichtlich muss das Skript als root ausgeführt werden. Stellen Sie daher sicher, dass es vor Code-Injection geschützt ist (z. B. Dateinamen und Datumsangaben mit 'oder "oder; oder $ Zeichen).


[*] Eigentlich auch Benutzer mit CAP_FOWNER (z. B. root), aber dies ist eine systemweite Funktion, die für Ihren Fall nicht anwendbar ist.

kubanczyk
quelle
2

Die Benutzer können die geänderten Dateien löschen und dann hochladen. Auf diese Weise ändern sie den Besitz und können den Zeitstempel der Datei aktualisieren.

Die Ordnerberechtigung sollte ungefähr so ​​sein wie drwxrwsr-xdie Dateiberechtigung -rw-rw-r--. Der Benutzer sollte sich in derselben Gruppe wie der Ordner und die Dateien befinden.

Siehe auch: Wie lege ich die Berechtigungsstruktur für mehrere Benutzer fest, die mehrere Websites in / var / www unter Ubuntu 9.10 bearbeiten?

Mircea Vutcovici
quelle