如何更改 rsync 的所有者

问题描述 投票:0回答:5

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

我想澄清并准确解释我需要做什么。

  • 我的个人电脑:名为
    home
    ,用户帐户为
    michael
  • 我的网络服务器:名为
    server
    ,用户帐户为
    remote
    和用户帐户
    apache

目前情况: 我的网站在

home
上与所有者
michael
以及在
server
上与所有者
apache
home
需要使用用户
michael
并且
server
需要使用用户
apache

任务: 将我在

home
上的网站同步到
server
,但所有文件的所有者为
apache
和组
apache

问题: rsync 将保留权限、所有者和组;但是,我需要所有文件都属于 apache 的所有者。我知道不保留所有者会将用户的所有者置于

server
上,但由于该用户是
remote
,因此它使用它而不是
apache
。我无法与用户 rsync
apache
(这会很好),但我不愿意公开的安全风险。

我关于如何解决的唯一想法:在每次

rsync
手动
chown -R
chgrp -R
之后,但这是一个巨大的系统,这需要很长时间,特别是因为这是要投入生产的。

有人知道该怎么做吗?

我当前使用的命令

rsync

rsync --progress -rltpDzC --force --delete -e "ssh -p22" ./ [email protected]:/website
unix rsync
5个回答
94
投票

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

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

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


14
投票

你可以在接收机器上组合一些技巧来获得所有权——在 cron 中运行“chmod -R apache /website”将是一个有效但相当笨拙的选项——但相反,我建议安全地 允许 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== [email protected]

然后你的“家庭”机器上的 rsync 命令将类似于

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

还有其他方法可以给这只猫剥皮,但在我看来,这是最清晰且涉及最少的解决方法。它可以防止获得 apache 的 shell,这当然是最大的安全问题。如果你真的坚决反对允许 ssh 作为 apache,还有其他方法......但这就是我所做的。

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


13
投票

使用

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

这是另一个解决方案:

概述

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

假设您想要 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

在这里阅读更多内容:

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


11
投票

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

--usermap=tom:www-data

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


4
投票

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 选项

© www.soinside.com 2019 - 2024. All rights reserved.