如何更改rsync的所有者

Mic*_*sky 18 unix rsync

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

我想澄清一下,准确解释我需要做什么.

我的个人计算机:使用用户帐户'michael'命名为'home'我的网络服务器:使用用户帐户'remote'命名为'server',用户帐户'apache'

现状:我的网站与主人'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

Dav*_*son 46

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

rsync -og --chown=apache:apache [src] [dst]
Run Code Online (Sandbox Code Playgroud)

来自类似问题的答案中的更多信息:ServerFault:Rsync命令问题,所有者和组权限不会更改

  • 看起来客户端**和服务器**应该运行3.1.0+才能使用`--chown`. (2认同)

小智 15

你可以把黑客放在接收机器上以获得所有权 - 从cron运行'chmod -R apache/website'将是一个有效但非常好的选择 - 但我建议安全地允许rsync -over-SSH,为的Apache.

您将为此创建一个专用的ssh密钥对:

ssh-keygen -f ~/.ssh/apache-rsync
Run Code Online (Sandbox Code Playgroud)

然后将〜/ .ssh/apache-rsync.pub转到web服务器,在那里你将它放入~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
Run Code Online (Sandbox Code Playgroud)

然后你的"家庭"机器上的rsync命令会是这样的

rsync -av --delete -e 'ssh -i ~/.ssh/apache-rsync apache@server' ./ /website
Run Code Online (Sandbox Code Playgroud)

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

这里参考文献:http://ramblings.narrabilis.com/using-rsync-with-ssh,http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/


Tho*_*aux 8

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

--usermap=tom:www-data
Run Code Online (Sandbox Code Playgroud)

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


Sam*_*han 7

使用的解决方案rsync --chown USER:GROUP [src] [dst]仅适用于远程用户对目标目录具有写访问权限的情况,但在大多数情况下并非如此。

这是另一个解决方案:

概述

(srcmachine)  (rsync)   (destmachine)
  srcuser    -- SSH -->   destuser
                             |
                             | sudo su jenkins
                             |
                             v
                          jenkins
Run Code Online (Sandbox Code Playgroud)

假设您要 rsync:

  • 从:
    • 机器: 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
Run Code Online (Sandbox Code Playgroud)

在此处阅读更多信息:

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