Je comprends que préserver les autorisations pour rsync. Cependant, dans mon cas, mon ordinateur local ne possède pas l’utilisateur que les fichiers doivent sous pour le serveur Web. Ainsi, lorsque je synchronise, j'ai besoin que le propriétaire et le groupe soient Apache sur le serveur Web, mais mon nom d'utilisateur sur mon ordinateur local. Aucune suggestion?
Je voulais clarifier pour expliquer exactement ce que je devais faire.
Mon ordinateur personnel: nommé 'home' avec le compte d'utilisateur 'michael' Mon serveur Web: nommé 'serveur' avec le compte d'utilisateur 'remote' et le compte d'utilisateur 'Apache'
Situation actuelle: Mon site Web est sur "home" avec le propriétaire "michael" et sur "serveur" avec le propriétaire "Apache". 'home' doit utiliser l'utilisateur 'michael' et 'serveur' doit utiliser l'utilisateur 'Apache'
Tâche: rsync mon site web sur 'home' sur 'serveur' mais avoir tous les fichiers propriétaires par 'Apache' et le groupe 'Apache'
Problème: rsync affichera les autorisations, le propriétaire et le groupe. Cependant, j'ai besoin que tous les fichiers soient possédés par Apache. Je sais que le propriétaire ne placera pas le propriétaire de l'utilisateur sur "serveur", mais comme cet utilisateur est "distant", il l'utilise au lieu de "Apache". Je ne peux pas rsync avec l'utilisateur 'Apache' (ce qui serait bien Nice), mais un risque de sécurité que je ne suis pas disposé à ouvrir.
Ma seule idée sur la façon de résoudre: après chaque rsync, chown -R et chgrp -R manuellement, mais c’est un système énorme et cela prend beaucoup de temps, d’autant plus que cela passe en production.
Est-ce que quelqu'un sait comment faire ça?
Commande actuelle que j'utilise pour rsync: Rsync --progress -rltpDzC --force --delete -e "ssh -p22" ./ [email protected]:/website
Il y a des bidouilles que vous pourriez assembler sur la machine réceptrice pour obtenir le droit de propriété - lancer chmod -R Apache/website sur cron serait une option efficace mais jolie, mais plutôt à la place, je recommanderais en toute sécurité permettant à rsync-over-ssh-as-Apache.
Vous créeriez une paire de clés ssh dédiée pour cela:
ssh-keygen -f ~/.ssh/Apache-rsync
puis dirigez ~/.ssh/Apache-rsync.pub vers le serveur Web, où vous le placeriez dans ~ Apache/.ssh/registered_keys et précisez soigneusement la commande autorisée, comme cela, tout sur une ligne:
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]
puis votre commande rsync sur votre machine "maison" serait quelque chose comme
rsync -av --delete -e 'ssh -i ~/.ssh/Apache-rsync Apache@server' ./ /website
Il y a d'autres façons de peau ce chat, mais c'est la plus claire et implique le moins de solutions de contournement, à mon avis. Cela empêche d’obtenir un Shell comme Apache, qui est le plus gros problème de sécurité, natch. Si vous voulez vraiment autoriser SSH en tant qu'Apache, il existe d'autres moyens ... mais c'est comme cela que je l'ai fait.
Références ici: http://ramblings.narrabilis.com/using-rsync-with-ssh , http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync -over-ssh/
Si vous avez accès à la version 3.1.1.0 ou ultérieure de rsync, utilisez l'option --chown :
rsync -og --chown=Apache:apache [src] [dst]
Plus d'informations dans une réponse à une question similaire ici: ServerFault: les problèmes de commande Rsync, les autorisations de propriétaire et de groupe ne changent pas
La dernière version (au moins 3.1.1) de rsync vous permet de spécifier la "propriété distante":
--usermap=tom:www-data
Change la propriété de tom en www-data (aka PHP/Nginx). Si vous utilisez Mac comme client, utilisez brew pour effectuer la mise à niveau vers la dernière version. Et sur votre serveur, téléchargez les sources d'archives, puis "créez-les"!
J'utilise principalement windows en local, c'est donc la ligne de commande que j'utilise pour synchroniser les fichiers avec le serveur ( debian ):
user@user-PC /cygdrive/c/wamp64/www/projects
$ rsync -rptgoDvhnP --chown=www-data:www-data --exclude=.env --exclude=vendor --exclude=node_modules --exclude=.git --exclude=tests --exclude=.phpintel --exclude=storage ./website/ username@hostname:/var/www/html/website
-n: effectue un essai sans aucune modification, pour vraiment exécuter la commande, supprime l'option -n