Rsync-mktemp 失败: 权限被拒绝(13)

我有以下设置,可以定期将 rsync 文件从服务器 A 同步到服务器 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

我从服务器 A 发出以下命令:

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

BACKUP 目录对每个人都是完全读/写/执行的:

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)

它是否试图将权限设置为“/”?

剪辑

我是以用户-某用户的身份登录的。我的目标目录对每个人都有完整的读/写/执行权限,包括它的内容。此外,目标目录由一些用户和一些用户的组所拥有。

跟进

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

167612 次浏览

当 rsync 尝试更新文件夹本身的修改时间时,请确保在远程计算机上与之同步的用户对文件夹的内容和文件夹本身具有写权限。

尽管你已经做到了这一点,我最近也遇到过类似的情况,没有任何 SO 或谷歌搜索的帮助,因为它们都处理基本的许可问题,下面的解决方案有点偏离设置,你甚至不会想到在大多数情况下检查。

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

结果发现,服务器启用了 SELinux,导致我获得的权限被拒绝,从而覆盖了文件/文件夹上的 POSIX 权限。因此,即使在 root 运行的情况下文件夹可能是777,SELinux 命令也是启用的,并且会覆盖那些导致“权限拒绝”的权限—— rsync 的错误。

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

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

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

我也遇到过类似的问题,但在我的情况下,这是因为存储只有 SFTP,没有 ssh 或 rsync 守护进程。我不能改变任何事情,因为这个服务器是由我的客户提供的。

Rsync 无法更改文件的日期和时间,其他一些实用程序(如 csync)显示了其他错误: “无法创建临时文件时钟偏移检测”。 如果您有访问 Storage-server 的权限,只需在这里安装 openssh-server 或启动 rsync 作为守护进程。

在我的情况下-我不能这样做,解决方案是: Lftp。 Lftp 用于同步的用法如下:

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

/src/file-是我电脑上的文件夹,/rem/file-是 sftp://sft.domain.tld/rem/file。

你可以在 lftp.yar.ru/lftp-man.html 找到男人

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

chmod 0777 /dir/to/be/backedup/

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

Windows: 检查目标文件夹的权限。如果必须为运行 rsync 服务的帐户赋予权限,则获得所有权。

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

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

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

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

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

我想,当前没有提到的一个常见错误是,当分区没有挂载时,尝试写入挂载空间(例如,/media/drivename)。这也会产生这个错误。

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

我有同样的错误,而同步文件内的一个多克容器和目的地是一个挂载卷(多克为 Mac) ,我运行 rsync通过 su-exec <user>。我能够通过使用 -og标志(为目标文件保留所有者和组)将 rsync作为 root运行来解决这个问题。

我仍然不确定是什么导致了这个问题,目标权限是正常的(我在 rsync之前对目标目录运行 chown -R <user>) ,也许在某种程度上与 Docker for Mac 缓慢文件系统有关。

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

我在 CentOS7的情况下也有同样的问题。我看了很多文章,论坛,但找不到解决办法。 问题出在 SElinux 上,在服务器端禁用 SElinux 是有效的。 检查服务器端的 SELinux 状态(从使用 rysnc 提取数据的位置) 检查 SELinux 状态并禁用它的命令

$getforce

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

$十字架0

$getforce

放任自流

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

在下一个例子中,请注意 Jenkins@localhost::

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

这对我有帮助

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

我有 Centos 7服务器,上面有 rsyncd: /etc/rsyncd.conf

[files]
path = /files

默认情况下,selinux 阻止对 rsyncd to/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 是一个简单但不是一个好的解决方案

令人惊讶的是,没有人提到所有强大的 SUDO。 我也有同样的问题 Sudo 解决了

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

$ sudo umount /shared
$ mount /shared

然后错误消息就消失了。

我遇到了同样的问题,所以我首先进入服务器进行 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:

如果你在覆盆子 π 或其他 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/

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

如果用户是“ abc”,那么目标目录应该是 目的地 _ 目录

命令 chown