rsync over SSH préserver la propriété uniquement pour www-data fichiers dont
J'utilise rsync pour reproduire un dossier web structure à partir d'un serveur local vers un serveur distant. Les deux serveurs sont ubuntu linux. J'utilise la commande suivante, et ça fonctionne bien:
rsync -az /var/www/[email protected]:/var/www/
Les noms d'utilisateur pour le système local et le système distant sont différents. De ce que j'ai lu, il peut ne pas être possible de conserver tous les fichiers et dossiers des propriétaires et des groupes. C'est OK, mais je tiens à préserver les propriétaires et les groupes juste pour le www-data de l'utilisateur, qui n'existe pas sur les deux serveurs.
Est-ce possible? Si oui, comment pourrais-je aller sur le faire?
** EDIT **
Il ya une mention de rsync être en mesure de préserver la propriété et les groupes de fichiers à distance synchronise ici: http://lists.samba.org/archive/rsync/2005-August/013203.html
** EDIT 2 **
J'ai fini par obtenir l'effet désiré grâce à de nombreux commentaires utiles et des réponses ici. En supposant que l'adresse IP de la machine source est 10.1.1.2 et l'IP de la machine de destination est 10.1.1.1. Je peux utiliser cette ligne de la machine de destination:
sudo rsync -az [email protected]:/var/www//var/www/
Cela préserve la propriété et les groupes de fichiers qui ont en commun un nom d'utilisateur, tels que www-data. Notez que l'utilisation de rsync
sans sudo
ne conserve pas ces autorisations.
- Vous ne devriez probablement pas faire de votre racine des noms d'utilisateur différents, à partir de "racine". C'est un défaut que beaucoup de choses supposer sera uniforme, parce que c'est TOUJOURS le même sur tous les système unix ou linux, et a été pendant des décennies. Si la racine de votre nom d'utilisateur n'est pas "root", alors même si les choses fonctionnent pour l'instant, attendre quelque chose de l'échec dans l'avenir.
- Désolé pour la confusion, mais les noms d'utilisateur, je fais référence ci-dessus sont les utilisateurs avec des privilèges sudo, pas la "racine" des utilisateurs. Bien sûr, il y a encore des comptes racine que je choisis de ne pas les utiliser en général. J'espère que je peux faire ce que je dois faire avec sudo.
- Pouvez-vous préciser si vous êtes à la préservation d'un propriétaire spécifique:groupe à travers le transfert, ou la conservation de tous les propriétaires:les paramètres de groupe? Non root, j'ai pu transférer des fichiers, mais ils finissaient toujours par être possédé par l'utilisateur non-root que rsync a été défini. En tant que root, tous les propriétaires:les groupes ont été conservés bien, je n'avais juste pas envie de courir rsync (vraiment lsyncd) en tant que root
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également le sudo rsync sur l'hôte cible à l'aide de la
--rsync-path
option:Cela vous permet de vous authentifier en tant qu'
user
sur targethost, mais toujours obtenir privilégié de l'autorisation d'écriture par le biais desudo
. Vous devrez modifier votre fichier sudoers sur l'hôte cible pour éviter sudo demande de votre mot de passe.man sudoers
ou exécutersudo visudo
pour les instructions et les exemples.Vous mentionnez que vous souhaitez conserver la propriété des fichiers détenus par www-data, mais pas les autres fichiers. Si c'est vraiment vrai, alors vous pouvez être hors de la chance, à moins que vous mettre en œuvre
chown
ou une deuxième exécution dersync
mettre à jour les autorisations. Il n'y a aucun moyen de dire rsync pour préserver la propriété pour juste un utilisateur.Cela dit, vous devriez lire à propos de rsync est
--files-from
option.Je n'ai pas testé, donc je ne sais pas exactement comment tuyauterie de trouver la sortie dans
--files-from=-
fonctionne. Vous aurez sans doute besoin d'expérimenter.--chown=user:group
option, et ça ne fonctionne pas. L'ajout de--super
doens aide pas. Je me demande si l'utilisation--rsync-path="sudo rsync"
est en quelque sorte incompatible avec--chown
. Je n'ai pas essayé d'utiliser l'utilisateur root directement pour le ssh, mais je préfère généralement sudo à partir d'un autre compte d'utilisateur.--chown
ne fonctionne pas sauf si vous avez aussi mis--owner --group
. C'est un peu contre-intuitif, puisque ces derniers options de parler de la conservation de propriétaire et de groupe à partir de la source. En plus de cela, la page de man pour--chown
ne mentionne pas que, ce n'est pas un avertissement. La section pour--usermap
ne le mentionner.Autant que je sache, vous ne pouvez pas
chown
des fichiers à quelqu'un d'autre que vous, si vous n'êtes pas root. Donc, vous auriez àrsync
à l'aide de lawww-data
compte, comme tous les fichiers seront créés avec l'utilisateur spécifié en tant que propriétaire. Si vous avez besoin dechown
les fichiers par la suite.sudo chown www-data file.html
au cours de la ssh. Vous avez encore entrer de nouveau le mot de passe sudo. Donc je vais devoir le script de s'exécuter à partir de la machine de destination, comme l'ont proposé certains autres réponses. Si je lance le script avec la commande sudo autorisations, il devrait fonctionner.--rsync-path
option. Vous pouvez sudo la cible rsync même si vous exécutez la commande à partir du serveur source. Vous aurez besoin de modifier votre fichier sudoers pour éviter sudo demande de mot de passe bien sûr.Qu'est-ce que cela signifie? Le racine utilisateur est l'uid 0. Comment sont-ils différents?
Tout utilisateur disposant de l'autorisation de lecture pour les répertoires que vous souhaitez copier peut déterminer quels identifiants propres fichiers. Seul root peut changer le propriétaire des fichiers écrit.
Que vous êtes en train d'exécuter la commande sur la machine source, ce qui limite votre écrit pour les autorisations associées à [email protected]. Au lieu de cela, vous pouvez essayer d'exécuter la commande en tant que root sur le cible de la machine. Votre lire d'accès sur la machine source n'est pas un problème.
Donc sur la machine cible (10.1.1.1), en supposant que la source est 10.1.1.2:
Assurez-vous que vos groupes de match sur les deux machines.
Aussi, la configuration de l'accès à [email protected] à l'aide d'un DSA ou RSA clé, de sorte que vous pouvez éviter d'avoir des mots de passe qui circulent. Par exemple, en tant que root sur votre machine cible, exécutez:
Puis prendre le contenu du fichier
/root/.ssh/id_dsa.pub
et l'ajouter à~user/.ssh/authorized_keys
sur la machine source. Vous pouvezssh [email protected]
en tant que root de la machine cible pour voir si elle fonctionne. Si vous obtenez une invite de mot de passe, vérifiez votre journal des erreurs pour voir pourquoi le clavier ne fonctionne pas.-o
option.root
. Comme vous pouvez le voir à partir de la page de man de rsync, la-o
option est pour les "super-utilisateur uniquement". C'est la racine.J'ai eu un problème similaire et trompé la commande rsync,
rsync -avz --delete [email protected]:/home//domains/site/public_html//home/domains2/public_html && chown -R wwwusr:wwwgrp /home/domains2/public_html/
le && exécute le chown contre la le dossier quand la rsync est terminée avec succès (1x "& " irait à l'chown quel que soit le rsync état d'achèvement)
Bien, vous pourriez ignorer les défis de rsync tout à fait, et viens de le faire par le biais d'un tar tunnel.
Vous aurez besoin de configurer vos clés SSH comme Graham décrit.
Noter que cette poignées répertoire complet des copies, pas de mises à jour incrémentielles comme rsync.
L'idée ici est que:
rsync version 3.1.2
J'ai surtout de l'utilisation de windows en local, c'est donc la ligne de commande que j'utilise pour synchroniser les fichiers avec le serveur (debian) :