从一台服务器到另一台服务器的 Rsync 权限-Mkdir 权限被拒绝(13)

从一台服务器到另一台服务器的 Rsync 权限-Mkdir 权限被拒绝(13)

我正在尝试使用 rsync 每天将本地计算机上的备份文件夹复制到另一台计算机(以防数据丢失或意外删除)。这以 cronjob 的形式运行。

我只是命令

rsync -av --rsh='ssh -p90' --delete /backup/ [email protected]:~/dabackup/

来自root服务器一上的帐户(tent)。

然而,在第一台服务器上,每个子目录的权限都设置为,除非您是 root 身份(对文件夹没有执行权限),否则您无法进入它们,这是我无法轻易改变的,因为这是备份软件的工作方式。

这意味着在第二台服务器(mydomain.com)上,该帐户tentbackup没有权限进入 rsync 创建的文件夹,从而导致以下错误

root@tent:~$ rsync -av --rsh='ssh -p92' --delete /backup/ [email protected]:~/dabackup/
building file list ... done
03-05-11/apache/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/apache" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
03-05-11/bind/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/bind" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
03-05-11/custom/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/custom" failed: Permission denied (13)
etc...

[email protected]我可以使用( )解决这个问题server two,但显然我不希望将 root 帐户的 ssh 密钥存储在server onetent)。

我如何安全地允许rsync创建这些子文件夹和文件的权限吗?


即使以 tentbackup 身份直接登录到服务器二,我也无法进入目录或在其中创建文件

tentbackup@brave:~/dabackup$ cd 03-20-11/
bash: cd: 03-20-11/: Permission denied
tentbackup@brave:~/dabackup$ mkdir 03-20-11/test -p
mkdir: cannot create directory `03-20-11': Permission denied
tentbackup@brave:~/dabackup$ touch 03-20-11/test
touch: cannot touch `03-20-11/test': Permission denied

答案1

正确的方法是将以下内容添加到 rsync 命令中(尽管它确实会更改权限,因此如果这些权限很重要,您不能仅从备份中恢复)

--no-p --no-g --chmod=ugo=rwX

在哪里

--no-p禁用权限复制

--no-g禁用群组复制和

--chmod=ugo=rwX确保所有非屏蔽位都得到启用

答案2

您正在尝试执行设置权限明确禁止的操作。您必须更改设置权限或授予程序特殊权限。一种解决方法可能是cron在服务器上创建一个修复目录权限的作业。或者,您可以让一个运行的程序等待root来自ssh脚本的命令并修复目录权限。

答案3

您应该能够通过从 rsync 中删除 -a 标志并使用您需要的任何标志来做到这一点。从配置逻辑上讲,您不想以 root 身份执行此操作,这意味着您需要忽略目标端的权限。确保您没有在 rsync 命令中包含 -p,并且您应该能够安全地将文件从 root@serverone 复制到 user@servertwo,并且它应该能够创建目录等。只需记住,如果您需要从备份中恢复,您的权限树将不会出现在 servertwo 上,我希望编写一个脚本来修复这个问题应该相当容易。

否则,您将需要获得特殊访问权限才能在 servertwo 上创建和管理文件,您可以通过设置 rsyncd.conf 并在守护进程模式下使用 rsync 来实现此目的,这样您就不需要允许两个主机之间使用 ssh(从问题中不清楚是否有其他用户有权访问该主机,因此可能不够安全)。

相关内容