68

我有以下设置来定期将文件从服务器 A rsync 到服务器 B。服务器 B 具有运行以下配置的 rsync 守护程序:

read only = false
use chroot = false
max connections = 4
syslog facility = local5
log file = /var/adm/rsyncd.log
munge symlinks = false
secrets file = /etc/rsyncd.secrets
numeric ids = false
transfer logging = true
log format = %h %o %f %l %b


[BACKUP]
        path = /path/to/archive
        auth users = someuser

从服务器 AI 发出以下命令:

rsync -adzPvO --delete --password-file=/path/to/pwd/file/pwd.dat /dir/to/be/backedup/ someuser@192.168.100.100::BACKUP

BACKUP 目录对每个人都是完全读/写/执行的。当我从服务器 A 运行 rsync 命令时,我看到:

afile.txt
         989 100%    2.60kB/s    0:00:00 (xfer#78, to-check=0/79)

对于我希望备份的目录中的每个文件。当我开始编写 tmp 文件时它失败了:

rsync: mkstemp "/.afile.txt.PZQvTe" (in BACKUP) failed: Permission denied (13)

经过数小时的谷歌搜索,我仍然无法解决看似非常简单的权限问题。建议?提前致谢。

附加信息

我刚刚注意到在过程开始时发生了以下情况:

rsync: failed to set permissions on "/." (in BACKUP): Permission denied (13)

它是否试图在“/”上设置权限?

编辑

我以用户身份登录 - someuser。我的目标目录对每个人都有完全的读/写/执行权限,包括它的内容。此外,目标目录归 someuser 和 someuser 组所有。

跟进

我发现使用 SSH 可以解决这个问题

4

18 回答 18

29

确保您在远程计算机上进行 rsync 的用户具有对文件夹内容和文件夹本身的写入权限,因为 rsync 试图更新文件夹本身的修改时间。

于 2012-06-14T20:52:53.317 回答
20

即使你得到了这个工作,我最近也遇到了类似的遭遇,没有 SO 或谷歌搜索有任何帮助,因为它们都处理基本的权限问题,而下面的解决方案有点偏离设置,你甚至不会想到检查在大多数情况下。

需要通过权限检查的一件事是,我最近发现自己的 rsync 存在问题,其中包括所有者和组在内的两台服务器上的权限完全相同,但 rsync 传输在一台服务器上以一种方式工作,但不是另一种方式。

事实证明,服务器存在问题,即我在启用 SELinux 的情况下被拒绝权限,这反过来又覆盖了文件/文件夹的 POSIX 权限。因此,即使有问题的文件夹在 root 运行时可能是 777,但 SELinux 命令已启用,并且反过来会覆盖那些从 rsync 产生“权限被拒绝”错误的权限。

您可以运行该命令getenforce来查看机器上是否启用了 SELinux。

在我的情况下,我最终只是完全禁用了 SELINUX,因为它不需要并且已经在运行良好的服务器上被禁用并且只是导致启用问题。要禁用,打开/etc/selinux/config并设置SELINUX=disabled. 要暂时禁用,您可以运行setenforce 0将 SELinux 设置为permissive状态而不是enforcing状态的命令,该状态会导致它打印警告而不是强制执行。

于 2012-10-18T13:55:30.767 回答
15

如果 Rsync 守护程序在 root 用户下运行,则默认情况下它对所有模块使用nobody/nogroup。所以你要么需要定义参数uidgid你想要的用户,要么将它们设置为 root/root。

于 2013-08-14T08:44:08.917 回答
14

我遇到了同样的问题并由chown目标文件夹的用户解决。当前用户没有读取、写入和执行目标文件夹文件的权限。尝试通过添加权限chmod a+rwx <folder/file name>

于 2017-06-30T04:06:05.243 回答
6

这可能不适合所有人,因为它不保留原始文件权限,但在我的情况下它并不重要,它为我解决了问题。rsync 有一个选项--chmod

--chmod此选项告诉 rsync 将一个或多个逗号分隔的 lqchmodrq 字符串应用于传输中文件的权限。结果值被视为发送方为文件提供的权限,这意味着如果未启用 --perms,此选项似乎对现有文件没有影响。

这会强制将所有文件/目录的权限设置为您想要的。例如:

rsync -av --chmod=Du+rwx SRC DST

将为用户添加读取、写入和执行到所有传输的目录。

于 2016-01-19T10:54:06.733 回答
3

I had a similar issue, but in my case it was because storage has only SFTP, without ssh or rsync daemons on it. I could not change anything, bcs this server was provided by my customer.

rsync could not change the date and time for the file, some other utilites (like csync) showed me other errors: "Unable to create temporary file Clock skew detected". If you have access to the storage-server - just install openssh-server or launch rsync as a daemon here.

In my case - I could not do this and solution was: lftp. lftp's usage for syncronization is below:

lftp -c "open -u login,password sftp://sft.domain.tld/; mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder - is the folder on my PC, /rem/folder - is sftp://sft.domain.tld/rem/folder.

you may find mans by the link lftp.yar.ru/lftp-man.html

于 2014-09-02T22:37:58.380 回答
2

Windows:检查目标文件夹的权限。如果您必须向运行 rsync 服务的帐户授予权限,请取得所有权。

于 2015-03-26T22:24:01.793 回答
2

在 CentOS 7 的情况下,我遇到了同样的问题。我浏览了很多文章、论坛,但找不到解决方案。问题出在 SElinux 上。在服务器端禁用 SElinux 有效。检查服务器端的 SELinux 状态(使用 rysnc 从那里提取数据) 检查 SELinux 状态并禁用它的命令

$getenforce

强制执行 ## 这意味着 SElinux 已启用

$setenforce 0

$getenforce

宽容的

现在尝试在客户端运行 rsync 命令,它对我有用。一切顺利!

于 2019-03-06T09:38:57.090 回答
1

我遇到了同样的问题,所以我首先通过 SSH 连接到服务器,以确认我能够使用以下命令登录到服务器:

ssh -i /Users/Desktop/mypemfile.pem user@ec2.compute-1.amazonaws.com

然后在新航站楼

我使用 SCP 将一个小文件复制到服务器,以确保能够建立连接:

scp -i /Users/Desktop/mypemfile.pem /Users/Desktop/test.file user@ec2.compute-1.amazonaws.com:/home/user/test/

然后在同一个新终端中,我尝试运行 rsync:

rsync -avz -e "ssh -i /Users/Desktop/mypemfile.pem" /Users/Desktop/backup/image.img.gz user@ec2.compute-1.amazonaws.com:
于 2020-09-07T19:37:06.610 回答
1

我有带有 rsyncd 的 Centos 7 服务器:/etc/rsyncd.conf

[files]
path = /files

默认情况下,selinux 阻止 rsyncd 访问 /files 文件夹

# this sets needed context to my /files folder
sudo semanage fcontext -a -t rsync_data_t '/files(/.*)?'
sudo restorecon -Rv '/files'
# sets needed booleans
sudo setsebool -P rsync_client 1

禁用 selinux 是一个简单但不是好的解决方案

于 2019-08-05T11:27:29.733 回答
1

如果您使用的是 Raspberry pi 或其他 Unix 系统,sudo则需要告诉远程机器rsyncsudo程序的位置。

为了安全起见,我输入了完整的路径。

这是我的例子:

rsync --stats -paogtrh --progress --omit-dir-times --delete --rsync-path='/usr/bin/sudo /usr/bin/rsync'  /mnt/drive0/ pi@192.168.10.238:/mnt/drive0/
于 2021-01-04T20:41:32.343 回答
0

/media/drivename我想上面目前没有提到的一个常见错误是在未安装分区时尝试写入安装空间(例如, )。这也会产生这个错误。

如果它是设置为自动挂载但没有自动挂载的加密驱动器,则可能是在尝试写入应该挂载的空间之前自动解锁加密分区的问题。

于 2016-10-17T08:44:24.263 回答
0

目标目录和子目录的组用户名应与每个用户相同。

如果用户是“abc”,那么目标目录应该是 lrwxrwxrwx 1 abc abc 34 Jul 18 14:05 Destination_directory

命令 chown abc:abc Destination_directory

于 2021-08-11T10:04:05.373 回答
0

还有另一种获得这种症状的方法:我正在通过 ssh 从远程机器同步到具有 NTFS-3G (FUSE) 文件系统的 Linux 机器。最初文件系统是在启动时挂载的,因此归根用户所有,当我从远程机器执行 rsync 推送时,我收到了这个错误消息。然后,作为推送 rsync 的用户,我做了:

$ sudo umount /shared
$ mount /shared

并且错误消息消失了。

于 2019-12-29T04:46:55.127 回答
0

我在 Docker 容器内同步文件时遇到了同样的错误,并且目标是已安装的卷(Docker for mac),我rsync通过su-exec <user>. 我能够通过使用标志运行rsync来解决它(保留目标文件的所有者和组)。root-og

我仍然不确定是什么导致了这个问题,目标权限还可以(我chown -R <user>之前为目标目录运行过rsync),可能与 Docker for Mac 慢速文件系统有关。

于 2017-04-19T06:02:40.747 回答
0

注意-e sshjenkins@localhost:在下一个示例中:

rsync -r  -e ssh --chown=jenkins:admin --exclude .git --exclude Jenkinsfile --delete ./ jenkins@localhost:/home/admin/web/xxx/public

这对我有帮助

PS今天,我意识到当您将 jenkins 用户更改(添加)到某个组时,从属(代理)重新启动后将应用权限。而我的解决方案(-e sshjenkins@localhost:)仅在您无法重新启动代理/服务器时才需要。

于 2019-04-01T16:26:48.677 回答
-1

令人惊讶的是,没有人提到所有强大的 SUDO。有同样的问题并 sudo 修复了它

于 2019-09-01T01:08:00.247 回答
-4

在 root 访问 ssh 中运行应该可以解决这个问题

或者chmod 0777 /dir/to/be/backedup/

或者chown username:user /dir/to/be/backedup/

于 2014-11-04T08:51:10.027 回答