Beim SCP auf meinem Fedora-Server wird immer wieder ein Fehler angezeigt, dass Dateizeitstempel nicht geändert werden können ("Zeit einstellen: Vorgang nicht zulässig"). Der Benutzer ist nicht der Eigentümer der Datei, aber wir können chown
aus Sicherheitsgründen keine Dateien an diesen Benutzer senden. Der Benutzer kann dies sudo
, aber da dies über einen SCP / FTP-Client geschieht, gibt es auch keine Möglichkeit, dies zu tun. Und schließlich möchten wir diesem Benutzer keinen Root-Zugriff gewähren müssen, nur um ihm die Verwendung einer Synchronisation wie rsync oder WinSCP zu ermöglichen, mit der Zeitstempel festgelegt werden müssen.
Der Benutzer ist Teil einer Gruppe mit vollständigen rw
Berechtigungen für alle relevanten Dateien und Verzeichnisse. Irgendwelche Gedanken darüber, wie man dem Benutzer die Erlaubnis für touch -t
diese spezifischen Dateien erteilt, ohne chown
sie ihm zu geben?
Weitere Informationen Dies alles hat mit der Aktivierung der PHP-Entwicklung in einem Szenario mit nur einem Entwickler zu tun (dh ohne SCM). Ich versuche, mit Eclipse oder NetBeans an einer lokalen Kopie der PHP-basierten (WordPress) Site zu arbeiten, während der Benutzer "sofort" eine Vorschau seiner Änderungen auf dem Entwicklungsserver anzeigen kann. Der Benutzer arbeitet remote. Bisher sind alle Versuche zur automatischen Synchronisierung fehlgeschlagen - selbst wenn WinSCP im Modus "Ordner überwachen" verwendet wird, in dem ein lokaler Ordner überwacht und versucht wird, Änderungen bis zum Remote-Verzeichnisfehler hochzuladen, da immer versucht wird, Datum und Zeitstempel festzulegen .
Der Benutzer hat zwar Sudo-Zugriff, aber mir wurde gesagt, dass es wirklich keine gute Idee ist, unter "root" zu arbeiten. Daher wollte ich mich nicht einfach als root anmelden, um diese Arbeit auszuführen. Außerdem sollte es nicht notwendig sein. Ich möchte, dass ein anderer Nicht-Superuser das Gleiche tun kann - mithilfe seiner Kontoinformationen eine FTP-Verbindung herstellen und per Synchronisierung remote arbeiten kann. Die Lösung muss also für jemanden ohne Root-Zugriff funktionieren.
Was mich erschüttert, ist, wie viel Schwierigkeit ich habe. Alle diese Softwareprogramme (NetBeans, Eclipse, WinSCP) ermöglichen die Synchronisierung und versuchen alle, den Zeitstempel zu schreiben. Also muss es möglich sein. WinSCP hat die Option, "Zeitstempel setzen" zu deaktivieren, aber diese Option ist nicht mehr verfügbar (immer "Ein"), wenn Sie Ordner überwachen / synchronisieren auswählen. So ist es bekommt etwas sein , das ist ziemlich Standard.
Angesichts der Tatsache, dass ich ein kompletter Idiot in Bezug auf Linux bin und der Entwickler "Serveradministrator" bin, kann ich nur annehmen, dass es etwas Idiotisches ist, das ich tue oder das ich (falsch) konfiguriert habe.
Zusammenfassung Kurz gesagt, ich möchte, dass alle Benutzer, die Gruppen-R / W-Zugriff auf ein Verzeichnis haben, den Zeitstempel für Dateien in diesem Verzeichnis über SCP ändern können.
quelle
root
Gruppe: Dieroot
Gruppe hat keine besonderen Berechtigungen, nur derroot
Benutzer.Antworten:
Warum es nicht funktioniert
Wenn Sie versuchen, die Änderungszeit einer Datei mit
touch
oder allgemeiner mit dem zugrunde liegenden Systemaufruf zu ändernutime
, gibt es zwei Fälle.Warum dies normalerweise keine Rolle spielt
--omit-dir-times
(-O
) übergeben.Lösungen
Ok, hör genau dort auf. Nur weil es einen einzigen Entwickler gibt, heißt das nicht, dass Sie SCM nicht verwenden sollten. Sie sollten SCM verwenden. Lassen Sie den Entwickler eine Datei einchecken und geben Sie ihm die Möglichkeit, auf die Schaltfläche "Bereitstellen" zu klicken, um die Dateien von SCM in das Live-Verzeichnis auszuchecken.
Es gibt absolut keinen technischen Grund, warum Sie SCM nicht verwenden sollten, aber es kann einen menschlichen Grund geben. Wenn die Person, die an diesen Dateien arbeitet, sich selbst als "Entwickler" bezeichnet, sollte sie SCM verwenden. Wenn es sich jedoch um eine nicht technische Person handelt, die Dokumente einschiebt, ist SCM möglicherweise zu kompliziert. Schieben Sie die Dateien also weiter über FTP oder SSH. Es gibt drei Möglichkeiten, wie dies funktionieren kann.
rsync
besteht die Möglichkeit, die Zeiten nicht zu synchronisieren. Scp tut es nicht, wenn Sie es nicht sagen. Ich kenne WinSCP nicht, aber es kann wahrscheinlich auch.apache
Benutzer ist, besteht der übliche Ansatz darin, dem Benutzer SSH-Zugriff als zu gewährenapache
. Der einfache Ansatz besteht darin, dass der Benutzer einen privaten SSH-Schlüssel erstellt und den entsprechenden öffentlichen Schlüssel hinzufügt~apache/.ssh/authorized_keys
. Dies bedeutet, dass der Benutzer beliebige Befehle alsapache
Benutzer ausführen kann . Da Sie dem Benutzer ohnehin Sudo-Rechte gewähren können, spielt dies in Ihrem Fall keine Rolle. Es ist möglich, aber nicht so einfach, weitere Einschränkungen festzulegen (Sie benötigen einen separaten Benutzerdatenbankeintrag mit einem anderen Namen, derselben Benutzer-ID, einer eingeschränkten Shell und einem Chroot-Gefängnis; Details in einer separaten Frage, obwohl dies möglicherweise bereits behandelt wird auf dieser Site oder bei einem Serverfehler ).¹ Oder schreiben Sie für eine leere Datei ein Byte und schneiden Sie es dann ab.
² Abgesehen von zusätzlichen Komplikationen, aber keine, die mir bekannt sind, gelten hier.
quelle
apache
- dann könnten sie Zeiten festlegen. In meiner überarbeiteten Antwort finden Sie die richtige Lösung und einige suboptimale.Sie können rsync so einrichten, dass sudo auf der Remote-Seite wie folgt verwendet wird:
quelle
sudo rsync
ist sehr schwer einzuschränken. Ich habe es nur vorgeschlagen, weil das OP sagte, der Benutzer habe bereits Sudo-Zugriff.