Du er her: Hjem --> Annet --> Blog --> Sette opp Synology rsync daemon

Sette opp rsync daemon på Synology

Programmet rsync et avansert tekstbasert program som i sin enkleste form kopierer filer mellom maskiner på forskjellige nettverk. Det kan også gjøres inkrementell kopiering - der bare endringen i en tidligere overført fil kopieres. Dette kan brukes til å lage backup-script. rsync ble opprinnelig laget for UNIX-baserte operativsystemer (linux, MacOS) men finnes også på Windows - med Cygwin. I Windows 10 kommer rsync med et UNIX subsystem som kan installeres som et valgfritt tillegg til operativsystemet.

rsync kan bruke to forskjellige "transportprotokoller". En transportprotokoll er et nettverksprogram som utfører en del av oppgavene i forbindelse med filoverføring - eksempelvis autentisering og kryptering. rsync bruker altså et "hjelpeprogram" for å gjøre deler av jobben. Et nettverksprogram er et program som bare har mening dersom det kjører på to eller flere maskiner samtidig. Som transportprotokoll kan rsync bruke

Fordelen med rsync daemon er at dataoverføringen går raskere fordi den skjer ukryptert (default). Dette har liten betydning ved små mengder data. Men for hundrevis av giga med data, eller flere terrabyte med, kan det spille en rolle. På en internnettverk (LAN) er det gunstig å bruke rsync daemon istedenfor rsync over SSH fordi her er det vanligvis ikke nødvendig med krptering.

I en tidligere blogpost har vi sett på hvordan rsync over ssh settes opp. Her vil jeg se på hvordan rsync daemon settes opp.

Starte rsync daemon (rsync serveren)

Når rsync er satt opp på Synology (File Service - rsync - Enable rsync service) vil rsync daemon starte automatisk når Synology starter.

På en Synology jeg har tilgang til starter rsync daemon når Synology restarter. Men prosessen kjører ikke som root. Det fungerer å kontakte prosessen og få listet ut navnet på modulene. Men det fungerer ikke å autentisere og liste ut innholdet i en modul. Jeg måtte drepe prosessen og starte den manuelt, med sudo (se nedenfor).

Manuell rsync daemon start

For å starte rsync daemon kan vi kjøre kommandoen
sudo rsync --daemon
Merk at kommandoen må kjøres som root. Det finnes også andre måter å starte rsync daemon på. Kanskje vil man sette opp dette slik at rsync daemon starter automatisk når maskinen starter.

Stoppe rsync daemon (rsync serveren)

rsync daemon konfigureres i filen /etc/rsyncd.conf. En linje i filen definerer en fil som inneholder PID (Process Identification) for rsync daemon prosessen.

pid file = /var/run/rsyncd.pid

For å finne PID for prosessen leser vi innholdet i filen:
more /var/run/rsyncd.pid

For å stoppe rsync daemon:
sudo kill <rsyncdaemonpid>

La oss si PID er 1256. For å stoppe rsync daemon:
sudo kill 1256

Hjelp-systemet (UNIX man)

På min synology (DSM 6.2) er det GNU bash 4.3.48. Men manual-sidene er ikke komplette. Skriv
rsync
og få opp en liten del av rsync hjelp sidene.
man 1 rsync
og
man 5 rsyncd.conf
fungerer ikke. Har du en Mac i nærheten så kan du lese manualen der istedenfor.

Kontakt med rsync serveren

Den lister ut tilgjengelige moduler og andre tilgjengelige kataloger (prekonfigurert av Synology). Out-of-the-box fungerte
rsync <rsyncserverip>::

Anta IP til rsync servermaskinen er 10.10.10.20. Da blir det:

rsync 10.10.10.20::

Default rsyncd.conf var:
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
use chroot = no

Da fikk vi som output:

c:\00aa\syno>rsync 10.10.10.20::
homes user home
NetBackup System default shared folder
synofolder
home ~

Det virker som at DSM har predefinert noen kataloger som tilgjengelige (NetBackup). Og at alle egendefinerte shares (havner under /volume1) også blir tilgjenglige (her: synofolder)

Filen /var/run/rsyncd.lock

Fra manualen:

The "lock file" option specifies the file to use to support the "max connections" option. The rsync daemon uses record locking on this file to ensure that the max connections limit is not exceeded for the modules sharing the lock file. The default is /var/run/rsyncd.lock.

The "max connections" option allows you to specify the maximum number of simultaneous connections you will allow. Any clients connecting when the maximum has been reached will receive a message telling them to try later. The default is 0 which means no limit. See also the "lock file" option.

chroot

chroot (change root) vil si at en prosess anser en spesifisert katalog i filhierarkiet som rotkatalogen, istedenfor / som vanligvis er rotkatalogen. En grunn til at man gjør dette er for å øke sikkerheten. Default er at use chroot er true. Ulempen med dette er at det er endel ting som må konfigureres spesielt for at alt skal fungere. Vi setter foreløpig use chroot til false.

Liste ut innholdet i en konfigurert modul uten bruker/pass

Kommandoen er
rsync rsyncserverip::modulnavn

Kopiere filer fra modul-katalogen uten bruker/pass

Kommandoen er
rsync -a rsyncserverip::minmodul1/minfil1.txt .
Dette fungerte nå.

EDIT: det er uklart hvilken bruker jobben kjører under når ikke gid/uid er spesifisert i rsyncd.conf filen. Muligens må det være Read for Everybody på katalogen. Man kan istedet spesifisere gid og uid i rsyncd.conf filen, eksempelvis gid=admin og uid=wheel. Så lenge admin (eller gruppen wheel) har Read på katalogen vil det fungere. Fordi da vil rsync daemon bruke gid og uid rettighetene når filsystemet manipuleres. rsync daemon kjører under root og har således mulighet til å bruke rettighetene spesifisert for gid/uid bruker/gruppe.

Kopiere filer til modul-katalogen uten bruker/pass

I utgangspunktet er katalogen read-only. I rsyncd.conf filen må vi legge til
read only = false
. Det må være Synology rettighet Write for Everybody på katalogen. Nå kan vi gjøre
rsync minfil.txt rsyncserverip::modulnavn/katalog/

EDIT: det er uklart hvilken bruker jobben kjører under når ikke gid/uid er spesifisert i rsyncd.conf filen. Muligens må det være Write for Everybody på katalogen. Man kan istedet spesifisere gid og uid i rsyncd.conf filen, eksempelvis gid=admin og uid=wheel. Så lenge admin (eller gruppen wheel) har Write på katalogen vil det fungere. Fordi da vil rsync daemon bruke gid og uid rettighetene når filsystemet manipuleres. rsync daemon kjører under root og har således mulighet til å bruke rettighetene spesifisert for gid/uid bruker/gruppe.

rsync daemon bruker og passord system

rsync daemon har et eget bruker-system som er uavhengig av Synology. Vi kan avgrense muligheten til å manipulere en modul ved å lage egne rsync daemon brukere. Dette konfigureres i en rsyncd.secrets fil. Og det må legges til to linjer i rsyncd.conf, auth users og secrets file. Se eksempler nedenfor.

Liste ut innholdet i en konfigurert modul med bruker/pass

Kommandoen er
rsync bruker@rsyncserverip::modulnavn

Man får så spørsmål om passord.

Kopiere filer fra modul-katalogen

Kommandoen er
rsync -a bruker@rsyncserverip::minmodul1/minfil1.txt .
Dette fungerte nå.

EDIT: jeg tror ikke det må være Read for Everybody på katalogen. Man kan istedet spesifisere gid og uid i rsyncd.conf filen, eksempelvis gid=admin og uid=wheel. Så lenge admin (eller gruppen wheel) har Read på katalogen vil det fungere. Fordi da vil rsync daemon bruke gid og uid rettighetene når filsystemet manipuleres. rsync daemon kjører under root og har således mulighet til å bruke rettighetene spesifisert for gid/uid bruker/gruppe.

Kopiere filer til modul-katalogen

Kommandoen er
rsync -a minfil2.txt bruker@rsyncserverip::minmodul1/

EDIT: jeg tror ikke det må være Write for Everybody på katalogen. Man kan istedet spesifisere gid og uid i rsyncd.conf filen, eksempelvis gid=admin og uid=wheel. Så lenge admin (eller gruppen wheel) har Write på katalogen vil det fungere. Fordi da vil rsync daemon bruke gid og uid rettighetene når filsystemet manipuleres. rsync daemon kjører under root og har således mulighet til å bruke rettighetene spesifisert for gid/uid bruker/gruppe.

Eksempel1: datamigrering

Noen ganger må man bytte fra gammel maskin til en ny. For eksempel til en ny filserver med større kapasitet. Da må alle dataene kopieres over fra det gamle systemet til det nye. En slik kopiering av data og metadata kalles datamigrering. Noen ganger vil man også samtidig bearbeide dataene. For eksempel dersom man har filnavn som inneholder ukurante karakterer som æ, ø, å, #, /, & osv, og man vil rydde opp i dette samtidig. Eller det migreres fra en database til en ny med litt forskjellige tabeller (fornavn, etternavn er i to felt istedenfor i ett, etc).

Metadata er "data om dataene", for eksempel rettigheter, dato for opprettelse av fil, data for siste endring osv.

Angående ukurante filnavn: noen ganger er det nødvendig å rydde opp i disse for å kunne gjennomføre en suksessfull datamigrering. Rett og slett fordi ikke alle systemer støtter filnavn som inneholder ukurante karakterer i filnavnet. Et godt råd: IKKE bruk ukurante karakterer i filnavn og katalognavn! Dette kan koste deg den dagen du skal migrere til en nytt datasystem. Og det er mye bedre å bruke - (minus) eller _ (underscore) istedenfor space i filnavn og katalognavn.

rsync over rsync daemon egner seg godt for en enkel datamigrering. Dealjene i migreringen implementeres i et bash-script.

For eksempel kan en bedrift ønske å bytte fra en Macmini filserver til en Synology. Typisk fordi Synology har mer plass og er raskere, og har lav kostnad pr terrabyte lagret data. En måte å gjøre det på er å kjøre bash-scripet på Macmini (dataene "pushes") og konfigurere rsync daemon på Synology. På Synology DSM 6.2 ligger rsync daemon konfigurasjonsfilene rsyncd.conf og rsyncd.secrets under /etc/. Her er et eksempel på innholdet i disse filene. Linjer som begynner med # er kommentarer.

admin@pssyno:/etc$ more rsyncd.conf
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
use chroot = no
#testmod er for testing.
#psdigitalmod er for produksjonskjøring av migreringsscriptet.

[testmod]
path = /volume1/mysynodir
read only = false

[psdigitalmod]
path = /volume1/psdigitalfiler
secrets file = rsyncd.secrets
read only = false
log file = psdigitalmod.log
auth users = peder02
uid = root
gid = root

admin@pssyno:/etc$ sudo more rsyncd.secrets
peder01:MittPass1
peder02:MittPass2

Det migreres fra en source-maskin (kilde, Macmini) til en sink-maskin (mottaker, Synology). På Synology må rsync daemon kjøre med root rettigheter (startes med: sudo rsync --daemon). Kopi-jobben kan dermed potensielt ha root rettigheter. Innslagene uid og guid i rsyncd.conf angir hvilke rettigheter kopijobben skal kjøre med.

Filrettighetene til rsyncd.conf og rsyncd.secrets:
admin@pssyno:/etc$ ls -al
-rw-r--r-- 1 root root 576 Jul 28 16:57 rsyncd.conf
-rw------- 1 root root 42 Jul 25 15:27 rsyncd.secrets

Noen flere aktuelle parametre:
#comment = hei dette er en kommentar
#list = false
#uid = admin
#gid = administrators
#gid = wheel

Dersom scriptet kjører lokalt og ikke startes over en SSH-forbindelse:
./migscript.sh peder02 >out.txt 2>err.txt &
Scriptet behøver ikke kjøre som root på source-maskinen. Men rsync daemon må altså ha root-rettigheter på sink-maskinen.

Referanser

  1. UNIX man rsync sidene
  2. UNIX man 5 rsyncd.conf sidene
  3. Running rsync as a daemon
    https://www.jveweb.net/en/archives/2011/01/running-rsync-as-a-daemon.html
  4. Rsync daemon: is it really useful?
    https://serverfault.com/questions/100707/rsync-daemon-is-it-really-useful
  5. rsync(1) - Linux man page
    https://linux.die.net/man/1/rsync
  6. rsync wikipedia
    https://en.wikipedia.org/wiki/Rsync
Telefon: 67 20 71 21 / 92 60 51 57 rsync and servants