如何更改rsync的所有者

时间:2012-06-21 04:25:51

标签: unix rsync

我理解保留rsync的权限。 但是在我的情况下,我的本地计算机没有文件所需的用户用于网络服务器。因此,当我rsync时,我需要所有者和组在网络服务器上是apache,但在我的本地计算机上是我的用户名。有什么建议吗?

我想澄清一下我究竟需要做些什么。

我的个人电脑:使用用户帐号'michael'命名为'home' 我的网络服务器:使用用户帐户“remote”和用户帐户“apache”命名为“server”

现状:我的网站与主人'michael'在'home',在'server'与主人'apache'在'home'。 'home'需要使用用户'michael'和'server'需要使用用户'apache'

任务:rsync我的网站'home'到'server'但所有文件都由'apache'和'apache'组成

问题:rsync将预先设置权限,所有者和组;但是,我需要所有文件都是apache的所有者。我知道没有预先主人会将用户的所有者放在'服务器'上,但由于该用户是'远程',所以它使用它而不是'apache'。我不能与用户'apache'rsync(这会很好),但是我不愿意打开安全风险。

关于如何解决的唯一想法:在每个rsync手动chown -R和chgrp -R之后,但它是一个庞大的系统,这需要很长时间,特别是因为这将是生产。

有谁知道怎么做?

我用于rsync的当前命令: rsync --progress -rltpDzC --force --delete -e“ssh -p22”./ remote@server.com:/ website

5 个答案:

答案 0 :(得分:40)

如果您有权访问rsync v.3.1.0或更高版本,请使用 - chown 选项:

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

此处类似问题的答案中有更多信息:ServerFault: Rsync command issues, owner and group permissions doesn´t change

答案 1 :(得分:15)

你可以将黑客放在接收机器上以获得所有权 - 运行' chmod -R apache / website' out of cron将是一个有效但非常好的选择 - 但我推荐安全允许rsync-over-ssh-as-apache。

您可以为此创建专用的ssh密钥对:

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

然后将〜/ .ssh / apache-rsync.pub转到网络服务器,在那里你将它放入~apache / .ssh / authorized_keys 并仔细指定允许的命令所有这一切都在一条线上:

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== comment@email.address

然后你的" home"上的你的rsync命令机器就像

rsync -av --delete -e 'ssh -i ~/.ssh/apache-rsync apache@server' ./ /website

还有其他方法可以为这只猫提供皮肤,但这是最清晰的,涉及最少的解决方法,在我看来。它阻止了一个shell作为apache,这是最大的安全问题,natch。如果你真的不喜欢ssh作为apache,还有其他方法......但这就是我做到的。

此处的参考文献:http://ramblings.narrabilis.com/using-rsync-with-sshhttp://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/

答案 2 :(得分:8)

rsync的最新版本(至少3.1.1)允许您指定“远程所有权”:

--usermap=tom:www-data

将tom所有权更改为www-data(又名PHP / Nginx)。如果您使用Mac作为客户端,请使用brew升级到上一版本。在您的服务器上,下载档案源,然后“制作”它!

答案 3 :(得分:1)

rsync版本3.1.2

我通常在本地使用 windows ,所以这是我用来与服务器( 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:不做任何更改即可进行试运行,要真正执行命令,请删除-n选项

答案 4 :(得分:1)

使用rsync --chown USER:GROUP [src] [dst]的解决方案仅在远程用户对目标目录具有写访问权限的情况下才有效,在大多数情况下不是这样。

这是另一种解决方案:

概述

(srcmachine)  (rsync)   (destmachine)
  srcuser    -- SSH -->   destuser
                             |
                             | sudo su jenkins
                             |
                             v
                          jenkins

假设您要进行同步:

  • 发件人:
    • 机器:srcmachine
    • 用户:srcuser
    • 目录:/var/lib/jenkins
  • 收件人:
    • 机器:destmachine
    • 用户:destuser建立SSH连接
    • 目录:/tmp
    • 最终文件所有者:jenkins

解决方案

rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp

在此处了解更多信息

https://unix.stackexchange.com/a/546296/116861