Linux 박스와 NAS 간의 rsyncd 권한 문제

Linux 박스와 NAS 간의 rsyncd 권한 문제

Timeshift모든 스냅샷이 포함된 Devuan Linux 상자 내부의 작은 500Gb 드라이브에 파일을 백업하기 위해 현재 OpenWRT에서 실행되는 작은 1TB NAS 장치를 설정했습니다 BackInTime.

NAS의 사양(800MHz APM82181/256MB RAM)은 ssh양쪽 끝에 1000M에서 협상하는 GbE 포트가 있지만 최대 7.50MiB/s에서 작업이 완료될 때까지 기다리거나 사용을 피해야 합니다.

주로 암호화로 인해 거의 일정한 100% CPU 로드로 이 하드웨어를 능가하는 경우가 있으므로 ssh실행 가능한 옵션이 아닙니다.

이 모든 작업은 외부에서 접근할 수 없는 로컬 네트워크 내에서 이루어지며, 사용자는 나뿐이므로 암호화 부족은 문제가 되지 않습니다.

이를 염두에 두고 NAS 측에서 데몬으로 사용하는 것 외에는 선택의 여지가 없습니다 rsync. 그러면 처리량이 최소 3.5/4.0x 증가합니다 ssh.

문제는 해결책을 찾을 수 없다는 오류가 발생한다는 것입니다.

:~$ rsync -av --progress /media/stuff/firefox.oldfile  rsync://[email protected]:/stuff
sending incremental file list
firefox.oldfile
     85,812,416 100%   28.23MB/s    0:00:02 (xfr#1, to-chk=0/1)
rsync: [receiver] mkstemp "/.firefox.oldfile.hiOlHH" (in stuff) failed: Permission denied (13)

sent 85,833,480 bytes  received 142 bytes  24,523,892.00 bytes/sec
total size is 85,812,416  speedup is 1.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1207) [sender=3.1.3]
:~$ 

좋은 소식은 (분명히) 28.23MB/s를 얻을 수 있다는 것입니다. =^)

나는 이것이 대상 폴더 rsync에 임시 파일을 쓸 수 없기 때문에 발생하는 권한 문제라고 읽었습니다 ./.firefox.oldfile.dMAADG/mnt/sda3/stuff

로그 파일은 터미널 출력에 아무 것도 추가하지 않습니다.

root@OpenWrt:~# cat /var/log/rsyncd.log
[2726] connect from UNDETERMINED (192.168.1.2)
[2726] rsync allowed access on module stuff from UNDETERMINED (192.168.1.2)
[2726] rsync to stuff/ from UNDETERMINED (192.168.1.2)
[2726] receiving file list
[2726] rsync: [receiver] mkstemp "/.firefox.oldfile.dMAADG" (in stuff) failed: Permission denied (13)
root@OpenWrt:~#

rsyncd.conf내 파일이 올바른 것 같습니다 .

:/etc$ cat /etc/rsyncd.conf
# /etc/rsyncd.conf
# minimal configuration for rsync daemon
# -----------------------
# begin global parameters 

uid = %RSYNC_USER_NAME%
gid = *
use chroot = true
max connections = 1
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
read only = false
reverse lookup = no
exclude = lost+found
timeout = 180

hosts allow = 192.168.1.2  # use after everything is working properly
# port =                   # set other than default 873
# socket options =
# ignore nonreadable = 
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 

# end global parameters 
# ---------------------------
# begin module parameters

# shared folder for testing
[testdir]
path = /mnt/sda3
read only = false
# comment =

# shared folder for stuff
[stuff]
path = /mnt/sda3
read only = false
# comment =

# shared folder for bkups
[bkups]
path = /mnt/sda3
read only = false
# comment =

내가 아는 한, 대상 디렉터리의 소유권은 정확합니다.

:~$ ls -l /mnt/sda3
drwxrwxrwx    4 groucho  groucho       4096 Apr 25 19:03 bkups
drwxrwxrwx    2 groucho  groucho       4096 Apr 29 18:47 stuff
drwxrwxrwx    2 groucho  groucho       4096 Apr 28 17:53 testdir
:~$ ls -l /mnt

나는 며칠 동안 이 문제로 인해 아무 소용이 없었습니다.

누구든지 나를 위해 이것에 대해 밝힐 수 있다면 매우 감사하겠습니다.

미리 감사드립니다.

G.

답변1

경로에 가장 낮은 수준이 없습니다. 예를 들어:

[stuff]
path = /mnt/sda3
read only = false

이는 stuff루트가 ,로 명명된 공유를 정의합니다 /mnt/sda3. /mnt/sda3귀하의 사용자는 그 자체에 쓸 수 없으며 rsyncd귀하가 우리에게 제공한 디렉토리 목록에 따르면 그것은 귀하가 원하는 것이 아니라고 말하고 싶습니다 .

대신 실제로 전체 경로를 지정해야 합니다.

[stuff]
    path = /mnt/sda3/stuff
    read only = false
    fake user = yes

데몬 사용자가 (아마도) 루트가 아니더라도 사용자, 그룹 및 권한 세부 정보를 캡처할 수 fake user있도록 여기에 설정을 포함했습니다 .rsyncd

일반적으로 다음과 같은 옵션이 있으며 그 중 대부분은 전역 섹션에 배치할 수 있습니다.

[stuff]
    comment = Backup space for stuff
    path = /mnt/sda3/stuff
    hosts allow = ...
    auth users = *
    secrets file = /etc/rsyncd.secrets

    use chroot = yes
    read only = no
    list = yes
    strict modes = yes
    ignore errors = no
    ignore nonreadable = no
    fake super = yes
    transfer logging = no
    timeout = 600
    refuse options = delete
    dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.vib *.vbk

관련 정보