rsync权限被拒绝将远程目录备份到我的本地计算机


11

我收到标题中提到的错误。

我发现了类似的问题:在远程计算机上以root权限运行rsync。那没有回答我的问题。

我是远程服务器上的管理员,我想用来将rsync文件备份到本地盒中。这是我的rsync命令:

$ rsync -avz me@myserver.com:/var/www/ /backups/Sites/MySite/

它主要工作。通过密钥对登录。我不可以也不可以使用密码(编辑:通过SSH登录)。由于权限的限制,只有少数文件无法传输。我不想更改那些权限。

这是错误:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

不是想改变这个文件的权限。它(以及其他类似的东西)应该不可读(除非是root用户)。

这必须在cron作业中运行,我更喜欢仅使用rsync命令的简单单行解决方案。下一个选择是可以从cron作业中调用的shell脚本。在任何情况下,我都不能手动登录到远程计算机并成为root用户(因为运行该命令时我会处于睡眠状态)。

如何使用rsync将其备份到本地盒中?


您能给我们显示一些类似ssh me@myserver.com“ cat /var/www/webapp/securestuff/install.php”> localfile吗?
Florenz Kley 2012年

@Florenz Kley:我不明白您的评论
MountainX

告诉我您可以读取该文件,并且给您显示一个有效的rsync命令:-)。自选方案的第二种选择可能是您最好的选择。
Florenz Kley 2012年

@Florenz Kley:ssh me@myserver.com“ echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php”> localfile
MountainX

我知道了rsync: send_files failed to open "/cygdrive/...": Permission denied (13)。所以我的源计算机是Windows cygwin。情况略有不同,但为了后代,我的解决方案是右键单击cmd.exe,然后以管理员身份运行
鲍勃·斯坦

Answers:


8

你可以不备份,你不能以其他方式读取文件,因此权限不得不要么改变由根重写

您的选择更详细:

  • root@myserver.com直接通过rsync'ing覆盖权限。(

  • ...或通过在服务器上配置sudo以允许无密码运行rsync服务器端组件。

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    rsync --rsh="ssh me@myserver.com sudo" -avz /var/www/ /backups/...
    
  • 在服务器上创建一个专用的“网站备份”帐户。更改文件的权限,以使它们对“网站备份”帐户可读;您可以使用ACL setfacl。请勿将此帐户用于其他任何用途。

    rsync -avz website-backup@myserver.com:/var/www/ /backups/sites/mysite/
    
  • 在服务器上编写一个脚本,该脚本会将/ var / www /转储到加密的tarball中。同样,可以通过root用户(通过crontab)或通过将sudo配置为不需要该脚本的密码来完成此操作。例如:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r mountainx@example.com
    

    备份可以通过每次拉整个tarball来完成,这对于大型站点可能效率不高:

    ssh me@myserver.com "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    密码要求将通过编辑sudoers来删除:

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    

谢谢。好建议。任一种都可能对我有用。我也正在考虑在superuser.com/questions/270911/…上使用该解决方案,如果我能找出它的潜在副作用。
MountainX

顺便说一句,我的意思是最后两个选择之一。不允许在服务器上通过SSH以root身份登录。
MountainX

@MountainX:我将“通过sudo进行rsync”分离出来作为单独的选择。它也可能工作。
user1686 2012年

谢谢!“通过sudo进行rsync”将是我的首选。我会尝试你的建议。看来我需要在服务器上的Ubuntu上使用visudo实现此功能。我对visudo的了解不多,但是您给了我足够的知识,可以让我入门。再次感谢。
MountainX

5

在远程主机中,您可以使用以下命令运行rsync守护程序

uid根

/etc/rsyncd.conf文件中。

这将允许守护程序使用该CAP_DAC_OVERRIDE功能并读取本地文件系统,而无需更改权限/所有权。

如果只需要进行备份,则将rsync设置为只读模式是一种好习惯:

只读= true


0

如果只能读取文件,则root需要具有root通过从文件系统读取文件来备份文件的权限。 rsync正在从文件系统而不是从原始设备读取文件。

除了dumpdd和复制分区而不是文件的类似备份外,备份程序从文件系统读取文件。备份实用程序将无法读取和备份用于运行它们的用户标识的权限而无法访问的文件。您正在遇到这种情况。

在大多数情况下,您需要充分信任备份软件,以使其能够读取所有数据。这也意味着您需要信任所有数据的备份介质。在某些情况下,您可能希望从备份中排除某些文件,并使用另一种方法来备份其内容。

编辑:在存档数据(复制所有权限)时,您将需要在两台服务器上都具有root访问权限。如果您将其作为备份,则可能需要查看像BackupPC这样的解决方案,该解决方案使用rsync读取文件,但将文件存储在其自己的目录树中。


有一些方法可以赋予rsync根访问权限。我只是不认识他们。我要问的是如何赋予rsync根访问权限来备份这些文件。也许我需要重新审视“在远程计算机上以root权限运行rsync”的答案,看看是否可以解决……
MountainX
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.