我正在尝试使用rsync将本地计算机上的备份文件夹每天复制到另一台计算机(在数据丢失或意外删除的情况下)。 这作为一个cronjob运行。
我只是命令
rsync -av --rsh='ssh -p90' --delete /backup/ [email protected]:~/dabackup/
从服务器1( tent
)上的root
帐户。
但是,在第一台服务器上,每个子目录的权限都是设置好的,除非你是root用户(对文件夹没有执行权限),否则你不能进入它们,这是我不能轻易改变的,因为它是备份软件作品。
这意味着在第二台服务器( mydomain.com
)帐户tentbackup
没有权限进入rsync正在创build的文件夹导致以下错误
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
)解决这个问题,但显然我不想为server one
( tent
)上存储的根帐户的ssh密钥。
我如何安全地允许rsync
权限来创build这些子文件夹和文件?
即使直接login到服务器2作为tentbackup,我不能移动到目录或在其中创build文件
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
这样做的正确方式(虽然它确实改变了权限,所以如果这些权限很重要的话,不能从备份中恢复)是将以下内容添加到你的rsync命令
--no-p --no-g --chmod=ugo=rwX
哪里
--no-p
禁用权限复制
--no-g
禁用组复制和
--chmod=ugo=rwX
确保所有非屏蔽位被启用
您正在尝试执行某些被设置权限禁止的操作。 您必须更改设置的权限或给您的程序特殊权限。 一个修复可能是在修复目录权限的服务器上创build一个cron
作业。 或者,你可以有一个以root
身份运行的程序,等待来自ssh
脚本的命令并修复目录权限。
你应该可以通过从rsync中删除-a标志并使用你需要的任何标志来代替。 从configuration逻辑上来说,您不希望以root身份执行此操作,这意味着您需要忽略目标端的权限。 确保你在rsync命令中不包含-p,你应该能够安全地将文件从root @ serverone复制到user @ servertwo,它应该能够创builddirs等。只要记住你的权限树不会是那么在servertwo如果你需要从备份恢复,这应该是很容易编写一个脚本来解决我希望。
否则,你将需要特殊的访问来创build和pipe理servertwo上的文件,你可以通过设置rsyncd.conf和在守护进程模式下使用rsync来实现这一点,所以你不需要在两个主机之间允许ssh这个问题可能是其他用户访问主机,所以可能不够安全)。