rsync – mkstemp失败:权限被拒绝(13)
我有以下设置来定期从服务器A到服务器B的rsync文件。服务器B有rsync守护程序以下列configuration运行:
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)
几小时的谷歌search后,我仍然无法解决什么似乎是一个非常简单的权限问题。 build议吗? 提前致谢。
附加信息
我刚刚注意到在进程开始时发生了以下情况:
rsync: failed to set permissions on "/." (in BACKUP): Permission denied (13)
它试图在“/”上设置权限吗?
编辑
我以用户身份login – someuser。 我的目标目录拥有完整的读/写/执行权限,包括它的内容。 另外,目的地目录由某个用户和某个用户的组所拥有。
跟进
我发现使用SSH解决这个问题
即使你有这个工作,我最近也遇到了类似的遭遇,没有SO或Google的search是有帮助的,因为他们都处理了基本的许可问题,下面的解决scheme是有点不对劲的,你甚至不会去检查在大多数情况下。
有一件事要检查与权限否认,我最近发现与rsync自己的问题,其中包括所有者和组的两个服务器上的权限是完全相同的,但rsync传输在一台服务器上的一种方式工作,而不是另一种方式。
事实certificate,服务器的问题,我得到了SELinux的权限被拒绝,这反过来覆盖了文件/文件夹的POSIX权限。 所以,尽pipe有问题的文件夹可能已经被root 777运行了,但是命令SELinux被启用了,并且会覆盖那些产生“rsdn权限被拒绝”的权限。
您可以运行命令getenforce
来查看机器上是否启用了SELinux。
在我的情况下,我最终只是完全禁用SELINUX,因为它不是必需的,已经被禁用在服务器上工作正常,只是导致问题被启用。 要禁用,请打开/etc/selinux/config
并设置SELINUX=disabled
。 要暂时禁用,您可以运行命令setenforce 0
,它将SELinux设置为permissive
状态,而不是enforcing
状态,导致它打印警告而不是强制执行。
确保你在远程机器上rsync进入的用户具有对文件夹内容和文件夹本身的写权限,因为rsync试图更新文件夹本身的修改时间。
如果Rsync守护程序在root用户下运行,则默认情况下,所有模块都使用nobody / nogroup。 所以你需要定义params uid
和gid
给你想要的用户,或者把它们设置为root / root。
我有一个类似的问题,但在我的情况,这是因为存储只有SFTP,没有ssh或rsync守护进程。 我什么都不能改变,这个服务器是我的客户提供的。
rsync无法更改该文件的date和时间,一些其他实用程序(如csync)向我显示了其他错误:“无法创build临时文件时钟歪斜检测”。 如果您有权访问存储服务器 – 只需在这里安装openssh-server或启动rsync作为守护进程。
就我而言 – 我无法做到这一点,解决scheme是: lftp 。 lftp的同步用法如下:
lftp -c "open -u login,password sftp://sft.domain.tld/; mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/ src /文件夹 – 是我的电脑上的文件夹,/ rem /文件夹 – 是sftp://sft.domain.tld/rem/folder。
你可能会find链接lftp.yar.ru/lftp-man.html的人
这可能不适合每个人,因为它不保留原来的文件权限,但在我的情况下,这并不重要,它解决了我的问题。 rsync有一个选项--chmod
:
–chmod此选项指示 rsync将一个或多个逗号分隔的lqchmodrqstring应用于传输中文件的权限。 将结果值视为发送方为文件提供的权限,这意味着如果未启用–perms,则此选项似乎对现有文件没有影响。
这强制所有文件/目录的权限是你想要的。 例如:
rsync -av --chmod=Du+rwx SRC DST
将为用户添加读取,写入和执行到所有传输的目录。
Windows:检查目标文件夹的权限。 如果您必须为运行rsync服务的帐户授予权限,请取得所有权。
我也遇到这个问题,并通过“chown”目标floder的用户来解决它。 我认为这是可以的chmod a + rwx。
我想当前没有提到的一个常见的错误是试图写入挂载空间(例如, /media/drivename
),当分区没有安装。 这也会产生这个错误。
如果它是一个设置为自动挂载而不挂载的encryption驱动器,则可能是在尝试写入应该挂载的空间之前自动解锁encryption分区的问题。
我在同步Docker容器中的文件时遇到了同样的错误,而且目标是已装入的卷(Docker for Mac),我通过su-exec <user>
运行rsync
。 我能够通过以root
-og
运行rsync
来解决这个问题,使用-og
标志(保留目标文件的所有者和组)。
我仍然不确定是什么导致了这个问题,目标权限是好的(我在rsync
之前为目标目录运行chown -R <user>
),也许某种程度上与Docker for Mac慢速文件系统有关。
在root权限下运行ssh就可以解决这个问题
或者chmod 0777 /dir/to/be/backedup/
或chown username:user /dir/to/be/backedup/