rsync - mkstemp失败:权限被拒绝(13)

46 linux permissions rsync

我有以下设置来定期从服务器A到服务器B的rsync文件.服务器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
Run Code Online (Sandbox Code Playgroud)

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

rsync -adzPvO --delete --password-file=/path/to/pwd/file/pwd.dat /dir/to/be/backedup/ someuser@192.168.100.100::BACKUP
Run Code Online (Sandbox Code Playgroud)

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

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

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

rsync: mkstemp "/.afile.txt.PZQvTe" (in BACKUP) failed: Permission denied (13)
Run Code Online (Sandbox Code Playgroud)

几小时的谷歌搜索后,我仍然无法解决似乎是一个非常简单的许可问题.建议吗?提前致谢.

附加信息

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

rsync: failed to set permissions on "/." (in BACKUP): Permission denied (13)
Run Code Online (Sandbox Code Playgroud)

它是否试图设置"/"的权限?

编辑

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

跟进

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

Mau*_*ord 14

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

  • 谢谢。我在 Synology DiskStation 上遇到了这个问题,它解决了问题。所有者是否是管理员无关紧要,该文件夹必须由 rsync 作业用户拥有。 (2认同)

Jef*_*ert 14

即使你有这个工作,我最近有一个类似的遭遇,没有SO或谷歌搜索任何帮助,因为他们都处理基本的权限问题,因为下面的解决方案是一些你甚至不认为检查的关闭设置在大多数情况下.

有权限检查的一件事是否认我最近发现自己有rsync问题,其中两个服务器(包括所有者和组)的权限完全相同,但rsync传输在一台服务器上以一种方式工作,但不是另一种方式.

事实证明,如果启用了SELinux,我将获得权限拒绝的服务器,这反过来会覆盖文件/文件夹上的POSIX权限.因此,即使有问题的文件夹在root运行时可能是777,也启用了SELinux命令,并反过来覆盖了从rsync产生"权限被拒绝"错误的权限.

您可以运行该命令getenforce以查看计算机上是否启用了SELinux.

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


Mar*_*555 9

如果所有模块在root用户下运行,则默认情况下Rsync守护程序使用nobody/nogroup.因此,您需要定义params uidgid您想要的用户,或者将它们设置为root/root.

  • 这个答案真的帮助了我。我不得不设置 rsync 守护进程,因为 ssh 上的 rsync 太慢了(另外我必须允许 root 上的 ssh,这不好)。但是我一直在“无法在“/”上设置时间。(在 linuxbackup 中):即使远程守护程序已经以 root 身份运行,也不允许操作 (1)`。在 `rsyncd.conf` 中将 `uid` 和 `gid` 更改为 `root` 修复了该问题 (2认同)

小智 8

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


Zit*_*rax 6

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

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

这会强制所有文件/目录的权限都是您想要的。例如:

rsync -av --chmod=Du+rwx SRC DST
Run Code Online (Sandbox Code Playgroud)

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