2012-06-21 11 views
13

Entiendo que se conservan los permisos para rsync. Sin embargo, en mi caso, mi computadora local no tiene el usuario que los archivos necesitan debajo para el servidor web. Entonces, cuando rsync necesito que el propietario y el grupo sean apache en el servidor web, pero que sea mi nombre de usuario en mi computadora local. ¿Alguna sugerencia?Cómo cambiar el propietario de una rsync

Quería aclarar para explicar exactamente lo que necesito hacer.

Mi computadora personal: nombre 'casa' con la cuenta de usuario del servidor My Web 'Michael': llamado 'servidor' con la cuenta de usuario 'a distancia' y cuenta de usuario 'apache'

situación actual: Mi sitio web está en 'casa' con el propietario 'michael' y en 'servidor' con el propietario 'apache'. 'home' debe estar usando el usuario 'michael' y 'server' debe estar usando el usuario 'apache'

Tarea: rsync mi sitio web en 'home' a 'servidor' pero tiene todos los archivos por ' apache 'y el grupo' apache '

Problema: rsync preseve los permisos, el propietario y el grupo; sin embargo, necesito que todos los archivos sean propietarios de apache. Sé que sin pretender que el propietario colocará al propietario del usuario en 'servidor', pero como ese usuario es 'remoto', lo usa en lugar de 'apache'. No puedo sincronizar con el usuario 'apache' (lo que sería bueno), pero no estoy dispuesto a abrir un riesgo de seguridad.

Mi única idea sobre cómo resolver: después de cada rsync manualmente chown -R y chgrp -R, pero es un sistema enorme y esto lleva mucho tiempo, especialmente desde que esto va a producción.

¿Alguien sabe cómo hacer esto?

comando actual que utilizo para rsync: "-p22 ssh" rsync --progress -rltpDzC --force --delete -e ./ [email protected]:/sitio web

+0

Usted fueron un poco imprecisos sobre exactamente cómo está transfiriendo los archivos, ¿por ssh, supongo? ¿Estás mirando al servidor web y, en caso afirmativo, qué usuario? ¿Podría proporcionar el comando como lo está ejecutando ahora? – Adam

+0

Actualicé mi pregunta para una explicación más profunda. Sí, estoy usando ssh a rsync en un servidor web remoto. –

Respuesta

11

Hay cortes que podría armar en la máquina receptora para obtener la propiedad correcta - ejecutar 'chmod -R apache/sitio web' fuera de cron sería una opción efectiva pero bonita, pero en su lugar, recomendaría de manera segura permitiendo rsync-over- ssh-as-apache.

Se podría crear un par de claves SSH dedicado para esto:

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

y luego tomar ~/.ssh/apache-rsync.pub hacia el servidor web, donde se había puesto en ~ Apache/.ssh/authorized_keys y cuidadosamente especificar el comando permitido, algo así como así, todo en una línea:

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] 

y luego su comando rsync en la máquina "casa" sería algo así como

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

Hay otras maneras de despellejar a este gato, pero esta es la más clara e implica la menor cantidad de soluciones, en mi opinión. Impide obtener un shell como apache, que es la mayor preocupación de seguridad, natch. Si realmente no quieres que ssh sea apache, hay otras formas ... pero así es como lo hice.

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

+0

Gracias. No sabía que la seguridad de ssh puede ser específica de ciertos comandos. –

7

última versión (al menos 3.1.1) de rsync le permite especificar la "propiedad remota":

--usermap=tom:www-data 

Cambios tom propiedad a www-data (también conocido como PHP/Nginx). Si está utilizando Mac como cliente, use brew para actualizar a la última versión. ¡Y en su servidor, descargue las fuentes de los archivos y luego "hágalo"!

+0

Gracias! Lo comprobaré. –

28

Si usted tiene acceso a V.3.1.0 rsync o posterior, utilice la opción --chown:

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

Más información en una respuesta de una pregunta similar aquí: ServerFault: Rsync command issues, owner and group permissions doesn´t change

+0

No se puede fusionar entre sitios, David, gracias por el enlace cruzado. – Shog9

+1

parece que tanto el cliente ** como el servidor ** deberían ejecutar 3.1.0+ para poder usar '--chown'. – Jacket

+0

¡gracias! actualización rsync con homebrew en mi máquina local y esto funcionó como un encanto – OregonTrail

Cuestiones relacionadas