2012-06-21 6 views
13

Ich verstehe, die Bewahrung der Berechtigungen für rsync. In meinem Fall hat mein lokaler Computer jedoch nicht den Benutzer, den die Dateien für den Webserver benötigen. Also wenn ich rsync brauche, brauche ich den Besitzer und die Gruppe als Apache auf dem Webserver, aber sei mein Benutzername auf meinem lokalen Computer. Irgendwelche Vorschläge?Wie ändere ich den Besitzer für ein rsync

Ich wollte klarstellen, genau zu erklären, was ich getan habe.

Mein PC: namens ‚Heimat‘ mit dem Benutzerkonto ‚michael‘ Mein Web-Server: Namen ‚Server‘ mit dem Benutzerkonto ‚Remote‘ und das Benutzerkonto ‚Apache‘

aktuelle Situation: Meine Website ist auf 'home' mit dem Besitzer 'michael' und auf 'server' mit dem Besitzer 'Apache'. 'home' muss den Benutzer 'michael' verwenden und 'server' muss den Benutzer 'apache' verwenden

Aufgabe: rsync meine Website auf 'home' zu 'server', aber haben alle Dateien Besitzer von ' Apache 'und die Gruppe' Apache '

Problem: Rsync wird die Berechtigungen, Besitzer und Gruppe beibehalten; Ich brauche jedoch alle Dateien als Besitzer von Apache. Ich weiß, dass der Eigentümer den Besitzer des Benutzers auf "Server" setzen wird, aber da dieser Benutzer "remote" ist, verwendet er das anstelle von "Apache". Ich kann nicht rsync mit dem Benutzer 'Apache' (was nett wäre), aber ein Sicherheitsrisiko, das ich nicht bereit bin zu öffnen.

Meine einzige Idee, wie zu lösen: nach jedem rsync manuell chown -R und chgrp -R, aber es ist ein riesiges System und das dauert eine lange Zeit, vor allem, da dies in die Produktion geht.

Weiß jemand, wie man das macht?

Aktueller Befehl, den ich zu rsync verwenden: rsync --progress -rltpDzC --force --delete -e "ssh -p22" ./ [email protected]:/Webseite

+0

Sie war etwas vage darüber, wie du die Dateien übertrugst - über ssh, nehme ich an? Bist du auf dem Webserver ssh-ing, und wenn ja, als welcher Benutzer? Können Sie den Befehl jetzt ausführen, während Sie ihn ausführen? – Adam

+0

Ich habe meine Frage für eine tiefere Erklärung aktualisiert. Ja, ich benutze ssh um rsync zu einem entfernten Webserver. –

Antwort

11

Es Hacks sind Sie könnten zusammengebaut auf dem empfangenden Maschine, um das Eigentumsrecht zu erhalten - 'chmod -R apache/website' aus cron heraus zu führen, wäre eine effektive aber hübsche Klugdy-Wahl - aber stattdessen würde ich sicher erlauben rsync-over- ssh-als-Apache.

Sie würden erstellen ein eigenes ssh-Schlüsselpaar für diesen:

ssh-keygen -f ~/.ssh/apache-rsync 

und dann nehmen Sie ~/.ssh/apache-rsync.pub über auf den Webserver, wo Sie es in ~ Apache setzen würden/.ssh/authorized_keys und sorgfältig geben Sie den Befehl erlaubt, so etwas wie so, alles auf einer Linie:

command="rsync --server -vlogDtprCz --delete . /website",from="IP.ADDR.OF.SENDER",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAABKEYPUBTEXTsVX9NjIK59wJ+fjDgTQtGwhATsfidQbO6u77dbAjTUmWCZjKAQ/fEFWZGSlqcO2yXXXXXXXXXXVd9DSS1tjE6vAQaRdnMXBggtn4M9rnePD2qlR5QOAUUwhyFPhm6U4VFhRoa3wLvoqCVtCV0cuirB6I45On96OPijOwvAuz3KIE3+W9offomzHsljUMXXXXXXXXXXMoYLywMG/GPrZ8supIDYk57waTQWymUyRohoQqFGMzuDNbq+U0JSRlvLFoVUZ5Piz+gKJwwiFwwAW2iNag/c4Mrb/BVDQAyEQ== [email protected] 

und dann würde Ihr rsync Befehl auf Ihrer „Zuhause“ Maschine wie etwas seine

rsync -av --delete -e 'ssh -i ~/.ssh/apache-rsync [email protected]' ./ /website 

Es gibt andere Möglichkeiten, diese Katze zu häuten, aber dies ist die klarste und beinhaltet die wenigsten Umgehungslösungen, um meine Meinung. Es verhindert, dass eine Shell als Apache, was das größte Sicherheitsrisiko ist, bekommen. Wenn du wirklich satt bist, ssh als Apache zuzulassen, gibt es andere Wege ... aber so habe ich es gemacht. hier

Referenzen: http://ramblings.narrabilis.com/using-rsync-with-ssh, http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/

+0

Danke. Ich wusste nicht, dass die SSH-Sicherheit für bestimmte Befehle spezifisch sein kann. –

7

Letzte Version (mindestens 3,1.1) von rsync können Sie die "Remote-Eigentum" spezifizieren:

--usermap=tom:www-data 

Änderungen tom Eigentum an www-data (auch bekannt als PHP/Nginx). Wenn Sie Mac als Client verwenden, verwenden Sie brew, um auf die letzte Version zu aktualisieren. Und auf deinem Server, lade Archivquellen herunter, dann "mach" es!

+0

Danke! Ich werde das überprüfen. –

28

Wenn Sie Zugriff auf rsync v.3.1.0 oder höher haben, verwenden Sie die --chown Option:

rsync -og --chown=apache:apache [src] [dst] 

Mehr Informationen in einer Antwort von einer ähnlichen Frage hier: ServerFault: Rsync command issues, owner and group permissions doesn´t change

+0

Cross-Site kann nicht zusammengeführt werden, David - danke für die Querverbindung. – Shog9

+1

scheint es so, als ob sowohl Client ** als auch Server ** 3.1.0+ ausführen sollten, um '--chown' zu verwenden. – Jacket

+0

danke! aktualisiert Rsync mit Homebrew auf meiner lokalen Maschine und das funktionierte wie ein Charme – OregonTrail

Verwandte Themen