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

时间:2012-06-14 18:54:27

标签: 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

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

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。我的目标目录对每个人都有完整的读/写/执行权限,包括它的内容。此外,目标目录由某个用户和某个用户组拥有。

跟进

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

18 个答案:

答案 0 :(得分:14)

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

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

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

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

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

答案 1 :(得分:14)

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

答案 2 :(得分:9)

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

答案 3 :(得分:6)

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

答案 4 :(得分:3)

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

  

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

这会强制您在所有文件/目录上拥有所需的权限。例如:

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

会为用户添加对所有已传输目录的读取,写入和执行。

答案 5 :(得分:3)

我有一个类似的问题,但在我的情况下,这是因为存储只有SFTP,没有ssh或rsync守护进程。我无法改变任何东西,bcs这台服务器是由我的客户提供的。

rsync无法更改文件的日期和时间,其他一些实用程序(如csync)向我显示其他错误:&#34;无法创建临时文件检测到时钟偏差&#34;。 如果您有权访问存储服务器 - 只需安装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 / folder - 是我电脑上的文件夹,/ rem /文件夹 - 是sftp://sft.domain.tld/rem/folder。

您可以通过链接lftp.yar.ru/lftp-man.html

找到勒芒

答案 6 :(得分:2)

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

答案 7 :(得分:1)

如果您使用的是带有 sudo 的 Raspberry pi 或其他 Unix 系统,您需要告诉远程机器 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/

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

在同步Docker容器中的文件时,我遇到了同样的错误,目标是已安装的卷(Docker for mac),我通过rsync运行su-exec <user>。我能够通过rsync作为root运行-og标记(保留目标文件的所有者和组)来解决此问题。

我仍然不确定导致该问题的原因,目标权限正常(我在chown -R <user>之前为目标目录运行rsync),或许与Docker for Mac慢速文件系统有关。

答案 10 :(得分:0)

在CentOS 7的情况下,我遇到了同样的问题。我浏览了很多文章,但都找不到解决方案。 问题出在SElinux。在服务器端禁用SElinux起作用。 在服务器端检查SELinux状态(使用rysnc从中提取数据) 检查和禁用SELinux状态的命令

$ getenforce

强制执行##,表示已启用SElinux

$ setenforce 0

$ getenforce

宽容

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

答案 11 :(得分:0)

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

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

那帮助了我

P.S。今天,我意识到,当您将jenkins用户更改(添加)到某个组时,从属(代理)重新启动后将获得许可。我的解决方案( -e ssh jenkins @ localhost:)仅在无法重新启动代理/服务器时需要。

答案 12 :(得分:0)

我在船上装有带有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是一个简单但不是一个好的解决方案

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

$ sudo umount /shared
$ mount /shared

错误消息消失了。

答案 15 :(得分:0)

我遇到了同样的问题,因此我首先通过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:

答案 16 :(得分:0)

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

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

命令 chown abc:abc Destination_directory

答案 17 :(得分:-4)

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

chmod 0777 /dir/to/be/backedup/

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