@ERROR:chdir 失败但目录存在

@ERROR:chdir 失败但目录存在

我有一个 D-Link DNS-320,并且我已经已安装FFP我正在努力继续rsync它。

到目前为止,我已经启动并运行了守护进程,并且我已经定义了一个模块,如下所示rsyncd.conf

max connections = 10
secrets file = /ffp/etc/rsyncd.secret

use chroot = false
read only = no
list = true
strict modes = false
#hosts deny = *
timeout = 600
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.mkv *.avi *.mpg *.jpg *.rar
pid file = /var/run/rsyncd.pid
reverse lookup = no

[root]
hosts allow = *
read only = false
gid = allaccount
uid = nobody
auth users = greg
path = /mnt/HD/HD_a2/rsync
comment = Fish
list = yes

/mnt/HD/HD_a2是内部磁盘并且/mnt/HD/HD_a2/rsync存在:

root@nas:/mnt/HD/HD_a2/rsync# pwd  
/mnt/HD/HD_a2/rsync

具有以下权限:

root@nas:/mnt/HD/HD_a2# ls -la
total 154589
drwxrwxrwx 23 root   root            4096 Oct  2 19:44 .
drwxr-xr-x  3 root   root            1024 Oct  2 17:20 ..
drwxrwxrwx  4 root   root            4096 Dec 29  2013 Ajaxpf
drwxrwxrwx 21 nobody allaccount      4096 Oct  2 15:45 NAS
dr-xr-xr-x  4 root   root            4096 Sep 24 17:45 Public
drwxr-xr-x  3 root   root            4096 Sep 24 17:45 Users
drwxr-xr-x 17 root   root            4096 Aug 27 14:11 ffp
-rw-r--r--  1 root   root            1117 Oct  2 17:20 ffp.log
-rwxr-xr-x  1 root   root            1942 Sep 23 17:29 fun_plug
drwxr-xr-x  2 root   root            4096 Jul 15  2012 logs
drwxrwxrwx  2 nobody allaccount      4096 Oct  2 21:09 rsync

greg我在我的文件中定义了用户rsync.secret,我可以从我的 (Windows) 客户端成功连接并列出模块:

C:\Batch\rsync> rsync greg@nas::  
root            Fish

然而;当我尝试发送文件时,我得到@ERROR: chdir failed

C:\Batch\rsync> rsync -vvvv SRC test.txt greg@nas::root/test.txt  
opening tcp connection to nas port 873  
Connected to nas (192.168.10.5)  
note: iconv_open("UTF-8", "UTF-8") succeeded.  
sending daemon args: --server -vvvve.Lsf . root/test.txt  
@ERROR: chdir failed  
[sender] _exit_cleanup(code=5, file=/usr/src/ports/rsync/rsync-3.0.9-1/src/rsync-3.0.9/main.c, line=1516): entered  
rsync error: error starting client-server protocol (code 5) at /usr/src/ports/rsync/rsync-3.0.9-1/src/rsync-3.0.9/main.c  
(1516) [sender=3.0.9]  
[sender] _exit_cleanup(code=5, file=/usr/src/ports/rsync/rsync-3.0.9-1/src/rsync-3.0.9/main.c, line=1516): about to call
 exit(5)

rsync在客户端上使用 Cygwin 版本 3.0.9,rsync在服务器上使用版本 3.1.0。

在服务器上,rsync以 root 身份运行:

root@nas:/mnt/HD/HD_a2# ps aux | grep rsync  
root     10074  0.0  0.3   1996   376 ?        Ss   21:57   0:00 /ffp/bin/rsync --daemon --config=/ffp/etc/rsyncd.conf --log-file=/var/log/rsync.log --ipv4 -vvvv

为什么会chdir失败?

root可以写信至/mnt/HD/HD_a2/rsync

root@nas:/mnt/HD/HD_a2/rsync# touch /mnt/HD/HD_a2/rsync/touch  
root@nas:/mnt/HD/HD_a2/rsync# ls -la  
total 8  
drwxrwxrwx  2 nobody allaccount 4096 Oct  2 22:21 .  
drwxrwxrwx 23 root   root       4096 Oct  2 19:44 ..    
-rw-r--r--  1 root   root          0 Oct  2 22:21 touch  

rsync运行为root.

服务器上的日志中没有任何有用的内容:

2014/10/02 22:19:35 [10391] rsyncd version 3.1.0 starting, listening on port 873  
2014/10/02 22:19:41 [10394] connect from UNDETERMINED (192.168.10.37)  

那么为什么会chdir失败呢?或者我如何进一步诊断问题?

更新#1

关于这是重复的配置匿名 rsync 守护进程但解决方案与 SELinux 相关。 DNS-320运行嵌入式、精简版的Linux,其中不包括SELinux的getenforcesetenforce命令,所以如果是这样的话,就像评论中建议,我该如何纠正?

既然这些工具都不可用,那么还有什么工具呢?

答案1

我刚刚在 QNAP 设备上遇到了这个问题,并出现此错误;

ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(2547) [Receiver=3.0.7]

我以一种奇怪的方式解决了这个问题,将 rsync.conf 文件编辑为

use chroot = true

初始同步完成后,我将其设置回

use chroot = false

现在它起作用了。

答案2

这可能是 SELinux 问题,它需要知道该文件夹可以被 rsync 守护进程使用。让我们考虑一个示例,rsync 以下文件夹:/home/myuser/ftp

需要运行以下命令来设置正确的 SELinux 上下文:

semanage fcontext -a -t rsync_data_t '/home/myuser(/.*)?'
restorecon -Rv '/home/myuser'
setsebool -P rsync_client on

奇怪的是,我注意到父文件夹必须被标记,因此为什么标记是/home/myuser/home/myuser/ftp.限制ftp子文件夹只需在 rsync 守护进程配置中完成。

您可以通过运行以下命令来检查 SELinux 标签:

ls -Z /home/myuser

一篇有趣的文章介绍了为什么结合 chroot 和 SELinux 是一个好主意:http://blog.siphos.be/2012/04/why-both-chroot-and-selinux/

相关内容