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

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

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

我发现了类似的问题:在远程机器上使用 root 权限运行 rsync。这并没有回答我的问题。

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

$ rsync -avz [email protected]:/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 将其备份到我的本地机器?

答案1

您无法备份无法读取的文件,因此权限将要必须是已更改或者由 root 覆盖

您的选择更详细:

  • 直接通过 rsync 覆盖权限[email protected]。(

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

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

    rsync --rsh="ssh [email protected] sudo" -avz /var/www/ /backups/...
    
  • 在服务器上创建一个专用的“网站备份”帐户。更改文件的权限,使它们可供“网站备份”帐户读取;您可以使用 ACL 来setfacl实现这一点。不要将此帐户用于其他任何用途。

    rsync -avz [email protected]:/var/www/ /backups/sites/mysite/
    
  • 在服务器上编写一个脚本,将 /var/www/ 转储到加密的 tarball 中。同样,这可以以 root 身份(通过 crontab)或通过配置来完成须藤不需要该脚本的密码。例如:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r [email protected]
    

    每次都要提取整个 tarball 来进行备份,这对于大型网站来说可能效率低下:

    ssh [email protected] "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

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

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

答案2

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

uid root

/etc/rsyncd.conf文件中。

这将允许守护进程使用该CAP_DAC_OVERRIDE功能并读取本地文件系统而不改变权限/所有权。

如果您只需要进行备份,最好将 rsync 设置为只读模式:

只读 = true

答案3

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

除了 和类似的备份(复制分区而不是文件)之外dumpdd备份程序会从文件系统读取文件。备份实用程序将无法读取和备份文件,因为运行这些文件时所用的用户 ID 的权限阻止访问这些文件。这就是您遇到的情况。

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

编辑:当您存档数据(复制所有权限)时,您将需要两台服务器上的 root 访问权限。如果您将此作为备份,您可能需要查看类似以下解决方案备份电脑它使用 rsync 读取文件,但将文件存储在其自己的目录树中。

相关内容