Instalace Syncthing v Arch Linux a globální sdílení složek

SyncthingKopírování aktuálních dat mezi několika zařízeními je důležitým současným požadavkem. Často se dostaneme do situace, kdy na svém chytrém telefonu chceme zpřístupnit něco, co máme uloženo na stolním počítači nebo notebooku, či naopak. Jednou takovou možností je využití běžného sdílení souborů, kde zdrojové zařízení ze kterého data zpřístupňujeme musí být spuštěn a dostupný, a druhou pak synchronizace. V případě synchronizace jsou datové soubory po jejich změně automaticky překopírovány na předem vybraná zařízení. Tyto soubory jsou tedy dostupné i při odpojeném datovém připojení (tzv. offline režim). Jako synchronizační službu můžeme použít např. OneDrive, Google Drive, DropBox, iCloud, Syncthing, BTsync, ownCloud a jiné.
O Syncthing jsem už několik řádek napsal. Ve většině případů je spouštěn pod specifickým uživatelským kontem. Veškeré synchronizované adresáře a soubory musí mít tedy správně nastavená oprávnění a vlastníka.

V následujícím příkladu bude popsáno nastavení synchronizace a sdílení dat na globální úrovni, kde je využit speciální systémový uživatelský účet, který je vlastníkem veškerých dat. Lépe si to lze představit tak, že vlastníme malý linuxový domácí server, který je zdrojem multimediálního obsahu pro všechna zařízení v síti. Nejjednodušší je samozřejmě nastavení anonymního sdílení, my ale požadujeme také synchronizaci tohoto obsahu pro mobilní zařízení.

Veškeré datové soubory a adresáře může na serveru vlastnit účet superuživatele, ale z bezpečnostních důvodů vytvoříme jiného uživatele. Tento uživatel se bude jmenovat d-share. Samozřejmě můžeme zvolit jiné jméno. Domovským adresářem bude /data/share/.home/, nicméně datové soubory/obsah budou v adresáři /data/share/. Důvod je prostý, synchronizační nástroje potřebují uložit databázi metadat, a pro tento účel se používá právě domovský adresář. Adresář .home/ bude tedy obsahovat tuto databázi a další nastavení. Oba adresáře, datový/obsah a adresář pro metadata a nastavení, mohou být umístěny rozděleně, ale takto máme vše pohromadě a přehledné. Adresář /data/share/ ale nikdy nebudeme sdílet celý.

Vytvoření uživatele

Nejprve vytvoříme systémové konto d-share. Během této operace je také automaticky vytvořena stejnojmenná skupina. Tu můžeme později použít pro další uživatele v systému.

Instalace balíčků syncthing

Instalace balíčků probíhá standardním způsobem, za použití nástroje pacman.

Kromě balíčku syncthing můžeme nainstalovat také syncthing-inotify. Syncthing-inotify hlídá změny v adresářích a souborech, které jsou synchronizovány syncthing. K tomu využívá API inotify – monitoring událostí na souborovém systému. Syncthing-inotify se řídí konfigurací syncthing. Syncthing-inotify ale instalovat nemusíme. Při jeho absenci je souborový systém kontrolován v závislosti na nastavení parametru rescanIntervalS (interval opakování skenování) jednotlivých adresářů.

Start systémových služeb a nastavení syncthing

Nyní je ten vhodný čas pro první spuštění služeb. V tomto kroku je automaticky vytvořena prvotní konfigurace a vygenerována dvojice SSL certifikátů. Ty se uplatňují při komunikaci syncthing s okolní infrastrukturou.

Při práci se službou je důležité uvést jméno uživatele, který bude příslušné procesy v operačním systému vlastnit. K tomu slouží oddělovač „@“, za než zapíšeme jméno uživatele – v našem případě d-share. Takto musíme službu identifikovat při jakékoli práci v rámci systemd.

Nově vytvořená konfigurace spolu s SSL certifikáty je umístěna v adresáři /data/share/.home/.config/syncthing.
V tomto adresáři nás bude zajímat zejména textový soubor config.xml obsahující vlastní nastavení syncthing, kterým se řídí také syncthing-inotify.

Povšimněme si, že byl automaticky vytvořen výchozí adresář /data/share/.home/Sync/ určený pro synchronizaci. Je na nás, zda jej ponecháme nebo vymažeme.

Pokud nás zajímá, na kterých síťových komunikačních portech syncthing naslouchá, máme k dispozici nástroj netstat.

Z výpisu jsou nejdůležitější porty 8384/tcp (ovládání přes GUI a API – zde se syncthing komunikuje i syncthing-inotify), 22000/tcp (listenAddress – datová komunikace z okolní infrastruktury) a 21027/udp (localAnnouncePort – datová komunikace pouze z místní sítě/rozsahu – broadcast/multicast). Tyto síťové porty je možné změnit v souboru config.xml a jejich znalost je důležitá pro případné nastavení firewallu.

Události ze startu můžeme zobrazit ze systémového žurnálu:

Povolíme spouštění služby po startu operačního systému:

Stejným způsobem nastartujeme a povolíme syncthing-inotify

GUI rozhraní syncthing

V tuto chvíli máme službu syncthing spuštěnu. Její nastavení můžeme provést změnou souboru config.xml, případně ve vlastním GUI. Toto rozhraní je přístupné přes protokol HTTP/HTTPS, tedy běžný internetový prohlížeč. Standardně služba naslouchá na síťovém portu 8384/tcp počítače, kde je služba spuštěna (ve výpisu netstat řádek obsahující 127.0.0.1:8384).
Pokud bychom chtěli přistupovat vzdáleně, upravíme patřičnou část konfiguračního souboru:

Řádek <address>127.0.0.1:8384</address> zaměníme za <address>0.0.0.0:8384</address>. Adresa 0.0.0.0 značí, že se bude možné připojit ze všech počítačů v síti Internet. Nejlepším způsobem pro omezení přístupu je správné nastavení adresního rozsahu a nasazení firewallu – pokud je náš systém z internetu dostupný. Po změně nastavení službu restartujeme.

V každém případě doporučuji v GUI ihned nastavit přihlašovací jméno/heslo a použít HTTPS pro grafické rozhraní.

Certifikáty

Certifikáty, které jsou vygenerovány při prvním spuštění syncthing jsou tzv. self signed.

V adresáři obsahujícím nastavení syncthing nalezněme čtveřici souborů:
cert.pem
https-cert.pem
https-key.pem
key.pem

V každém případě můžeme tyto certifikáty zaměnit za vlastní. Pokud používáme certifikační autoritu Let’s Encrypt, zaměníme soubory cert.pemhttps-cert.pem za fullchain.pem a soubory https-key.pemkey.pem za privkey.pem. Samozřejmě je možné nastavit symbolické linky.
Při opětovném startu služby dojde k jejich načtení.

V systému máme možnost si o použitých certifikátech zjistit podrobnější informace:

Omezení syncthing

Syncthing s sebou nese řadu koncepčních a technických omezení, která jsou dána návrhem služby a jejím cílem.

Jelikož je syncthing koncipován jako multiplatformní, není zahrnuta podpora přenesení detailnějších práv mezi jednotlivými uzly. Musíme se tedy obejít bez ACL, XATTR a jiných vlastností souborových systémů. Tzn., pokud se v synchronizovaném adresáři nachází adresáře nebo soubory, které jsou vlastněny více než jedním uživatelem. V takovém případě budou synchronizovaná data na okolních systémech vlastněna vždy uživatelem, pod kterým je spuštěna konkrétní instance/služba syncthing.

Toto a jiná omezení se nás nebudou dotýkat v domácím prostředí nebo jednouživatelském režimu. V případě, kdy budeme chtít službu nasadit ve víceuživatelském prostředí, typicky firma, není pro nás tento produkt vhodný.

Sdílení dat přes SMB (samba) – Windows

V domácím prostředí můžeme data jednotlivých synchronizovaných adresářů jednoduchým způsobem sdílet. Musíme si však dát pozor na správné nastavení příslušných vlastníků. V našem případě jsou všechna data vlastněna uživatelem d-share. I v případě samby musíme tento stav respektovat.

Následující příklad uvádí nastavení sdílené složky /data/share/public, která je vlastněna uživatelem d-share. Příslušná část souboru /etc/samba/smb.conf:

Za povšimnutí stojí výchozí nastavení módu pro vytváření nových souborů a adresářů.

Tento adresář musíme samozřejmě nastavit i pro synchronizaci službou syncthing.

Sdílení dat přes NFS – UNIX/Linux

Podobným způsobem jako v případě SMB můžeme sdílet soubory přes NFS. Důležité je si v tomto případě uvědomit, že nelze zadat jméno uživatele d-share, ale musíme zadat jeho číslo (UID) a číslo skupiny (GID).

Tyto hodnoty zjistíme následujícím způsobem:

Nyní vytvoříme/změníme soubor /etc/exports.d/nfs.exports a vložíme definici sdíleného adresáře:

Opět je důležité poznamenat, že tento adresář bude dostupný z celé sítě pro zápis.

Nastavení NFS nebudu stejně jako v případě SMB detailně popisovat.

Notifikace sdílení službou avahi/zeroconf

V prostředí UNIX/Linux/Mac OSX můžeme pro informování zařízení v místní síti použít službu avahi/zeroconf. O notifikaci se v případě SMB starat nemusíme, tato funkce je automatická. Pro NFS použijeme soubor /etc/avahi/services/nfs_dvr.service:

Závěr

Ať již svá data synchronizujeme či sdílíme, vždy si musíme uvědomit, že naše infrastruktura je tak bezpečná, jak bezpečný je její nejslabší prvek. To platí zejména v případě mobilních zařízení.

Pokud je to možné, snažíme se minimalizovat rizika úniků dat pomocí šifrování a nasazením firewallu.

Jednotlivé složky by měly být dostupné pouze ze zařízení, ze kterých je takový přístup bezpodmínečně nutný. Kromě úniku nám také hrozí i nechtěné vymazání. V takovém případě nejsou většinou vlastnosti systému jakým je např. koš dostupné.

Leave a Reply