Na synchronizaci dat mezi počítači používám bezplatný a otevřený nástroj Syncthing. Dříve jsem používal Resilio Sync, ale poté co změnili licenční politiku a pro běh na serverovém OS je třeba měsíční platba, přešel jsem právě na Syncthing. A na kanálu Z-TECH jsem o něm vytvořil seriál:

  1. Základní představení a instalace na Windows
  2. Instalace na Linux a Raspberry Pi
  3. Pokročilejší nastavení synchronizace
  4. Instalace na Windows jako služba

Instalace na Windows je poměrně přímočará, ale na Linuxu je to o něco složitější, je tam více manuálních kroků. Proto jsem připravil návod krok za krokem.

Instalace aplikace Syncthing na Linuxu

Tento návod popisuje, jak nainstalovat synchronizační software na Linux. Počítá s následujícími distribucemi, aktuálními ke dni vydání článku:

Z mého pohledu je důležitá zejména instalace na Raspberry Pi, protože pomocí něj a externího disku (ukážu vám, jak ho zprovoznit) si můžete jednoduše vytvořit off-site zálohu. V práci, u známého, kdekoliv kde je připojení k Internetu, si můžete jednoduše vytvořit zálohovací server, který ochrání vaše data i v případě, že by primární lokace byla zničena, například požárem.

Návodů na zprovoznění Syncthingu na Linuxu jsem našel spoustu, ale mají z mého pohledu dvě zásadní vady z hlediska bezpečnosti:

Základní instalace

1.

Připojte se na server z konzole nebo přes SSH.

2.

Následujícími příkazy plně aktualizujte systém

sudo apt-get update && sudo apt-get upgrade -y

Vyčkejte, dokud vše neproběhne, což může v závislosti na rychlosti vašeho připojení a počítače trvat i několik desítek minut.

Instalace aplikace Syncthing

3.

Přidejte klíč APT repository Syncthingu mezi důvěryhodné:

curl -s https://syncthing.net/release-key.txt | gpg --dearmor | sudo tee /usr/share/keyrings/syncthing-archive-keyring.gpg >/dev/null
4.

Přidejte repository do systému:

echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
5.

Aktualizujte seznam dostupných balíčků:

sudo apt-get update
6.

Nainstalujte aplikaci Syncthing:

sudo apt-get install syncthing -y

Vytvoření uživatele

Chceme, aby aplikace běžela nikoliv pod rootem (nebo jiným uživatelem s vysokými právy), ale pod svým vlastním uživatelem syncthing s minimálními oprávněními.

7.

Následujícím příkazem vytvoříte pro službu uživatele:

sudo adduser --disabled-password --gecos "Syncthing service" syncthing
8.

Přepněte se do kontextu tohoto uživatele:

sudo su syncthing
9.

Spusťte z konzole Syncthing, aby se vytvořila konfigurace:

syncthing
10.

Měli byste vidět log, zhruba jako na následujícím obrázku:

Ukončete aplikaci stiskem Ctrl+C.

11.

Opusťte kontext uživatele služby:

exit

Konfigurace aplikace a registrace daemona

Protože budeme chtít webové rozhraní aplikace publikovat do Internetu pomocí nginxu, je třeba provést změnu v konfiguraci, aby fungovala publikace pomocí proxy. Také je nutné nastavit Syncthing jako daemona, automaticky spouštěnou aplikaci běžící na pozadí.

12.

Otevřete konfigurační soubor v editoru Nano:

sudo nano /home/syncthing/.local/state/syncthing/config.xml
13.

Najděte v XML dokumentu element /configuration/gui a přidejte do něj následující element:

<insecureSkipHostcheck>true</insecureSkipHostcheck>

14.

Stiskem Ctrl+S uložte změny a stiskem Ctrl+X ukončete editor.

15.

Vytvořte v editoru Nano soubor s definicí služby:

sudo nano /lib/systemd/system/syncthing.service
16.

Zadejte do něj následující text:

[Unit]
Description=Syncthing
Documentation=man:syncthing(1)
After=network.target

[Service]
User=syncthing
WorkingDirectory=/home/syncthing
ExecStart=/usr/bin/syncthing -no-browser -no-restart -logflags=0
Restart=on-failure
RestartSec=5
SuccessExitStatus=3 4
RestartForceExitStatus=3 4
SyslogIdentifier=syncthing
ProtectSystem=full
PrivateTmp=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
17.

Stiskem Ctrl+S uložte změny a stiskem Ctrl+X ukončete editor.

18.

Následujícími příkazy službu zaregistrujte a nastartujte:

sudo systemctl enable syncthing
sudo systemctl start syncthing
19.

Následujícím příkazem si ověřte, že úspěšně běží (je tam Active: active (running) jako na obrázku):

sudo systemctl status syncthing

Nyní již Syncthing běží a mohli byste se k němu připojit pomocí adresy http://127.0.0.1:8384 - ale jenom z lokálního počítače, ne zvenčí.

Publikace pomocí nginxu

Nechceme, aby byl Syncthing do sítě (Internetu) vystaven přímo, ale prostřednictvím proxy nginx. Z bezpečnostních důvodů a i z důvodů praktických -- například je výrazně jednodušší nastavit automatické vystavení a obnovování HTTPS certifikátů od Let's Encrypt CA pro nginx než přímo pro Syncthing.

20.

Nainstalujte nginx:

sudo apt-get install nginx -y
21.

Vytvořte v editoru Nano konfigurační soubor pro naši site:

sudo nano /etc/nginx/sites-available/syncthing
22.

Zadejte do něj následující obsah:

server {
    listen 80;
    location / {
        proxy_pass http://localhost:8384;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
23.

Stiskem Ctrl+S uložte změny a stiskem Ctrl+X ukončete editor.

24.

Zakažte výchozí demo site a povolte nově vytvořenou site pro Syncthing:

sudo rm /etc/nginx/sites-enabled/default
sudo ln /etc/nginx/sites-available/syncthing /etc/nginx/sites-enabled/syncthing
25.

Reloadněte konfiguraci nginxu:

sudo nginx -s reload

Základní zabezpečení

26.

Podívejte se v prohlížeči na IP adresu nebo název vašeho serveru. Zobrazí se vám webové GUI aplikace Syncthing:

27.

V tomto okamžiku není nastaveno pro webové rozhraní žádné uživatelské jméno a heslo.

  1. Klepněte na odkaz Settings.
  2. Vyberte záložku GUI.
  3. Vyplňte požadované uživatelské jméno.
  4. Vyplňte požadované heslo.
  5. Klepněte na Save.

Po klepnutí na Save se Syncthing restartuje, což chvíli trvá. Nenechte se zmást chybovými hlášeními jako například 502 Gateway Timeout. Chvíli vyčkejte a obnovte stránku.

28.

Nyní budete před vstupem do uživatelského rozhraní vyzváni k zadání jména a hesla, které jste zvolili v kroku 27.

29.

Abychom zvýšili zabezpečení celého systému, nastavíme pravidla na firewallu tak, aby byly povoleny pouze vybrané porty. Nainstalujte Uncomplicated firewall (UFW):

sudo apt-get install ufw -y

Instalace UFW není nezbytná, lze přímo konfigurovat iptables, ale to není dvakrát pohodlné, proto je lepší toto jednoduché rozhraní.

30.

Následujícími příkazy povolíte porty 22, 80 a 443:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
31.

Následujícím příkazem firewall aktivujete:

sudo ufw enable

Na dotaz Command may disrupt existing ssh connections. Proceed with operation (y|n)? odpovězte y.

32.

Následujícím příkazem restartujte server a ověřte si, že všechny služby po rebootu řádně nastartovaly:

sudo reboot now

Instalace dalšího disku

Syncthing nám úspěšně běží a můžeme s ním běžným způsobem pracovat. Nicméně v případě Raspberry Pi máme k dispozici pouze úložiště na paměťové kartě, což není ideální. Následujícím postupem lze připojit k Raspberry externí disk pomocí USB a zpřístupnit ho pro použití Syncthingem.

Tento postup předpokládá, že disk je zcela nový, prázdný, bez partitions atd. Pokud tomu tak není, budete v kroku 38 muset nejprve smazat existující partitions.

33.

Nejprve zjistěte, jak se váš disk systémově jmenuje. To záleží na mnoha okolnostech, ale typicky to bude /dev/sda (na Raspberry Pi, které nabootovalo z MicroSD karty a má připojený nový disk přes USB), /dev/sdb (na běžném PC, které má jeden systémový disk a jeden nový přes USB nebo SATA) a podobně.

Je velmi důležité si být jisti, že pracujete se správným diskem! Pokud budete příkazy volat proti špatnému disku, přijdete o veškerá data na něm!

34.

Následujícím příkazem si vypište seznam všech disků:

sudo fdisk -l
35.

Najděte svůj disk. Poznáte jej podle velikosti (zde 931,51 GiB) a modelu (zde 024 HN-M101MBB). Pro náš případ se tento disk jmenuje /dev/sda.

Pokud se váš disk jmenuje jinak, musíte /dev/sda v následujících příkazech nahradit za váš název.

36.

Spusťte interaktivní aplikaci pro vytvoření partitions cfdisk:

sudo cfdisk /dev/sda
37.

Jako label type zvolte výchozí hodnotu gpt (stačí stisknout Enter).

38.

Pokud je váš disk prázdný, uvidíte pouze informaci Free space. Pokud by na něm byly partitions, musíte všechny smazat (Delete), dokud se do tohoto stavu nedostanete.

39.

Šipkami vyberte New a klepněte na Enter.

40.

Potvrďte výchozí velikost (použije se celý disk) tím, že klepnete na Enter.

41.

Vyberte Write. Na otázku Are you sure you want to write the partition table to disk? odpovězte yes a Enter.

42.

Podívejte se, jak se jmenuje nově vytvořená partition. Zde /dev/sda1. Poté vyberte Quit a ukončete cfdisk.

Pokud se vaše partition jmenuje jinak, musíte /dev/sda1 v následujících příkazech nahradit za váš název.

43.

Následujícím příkazem partition naformátujte na souborový systém EXT4. První parametr (-L /syncthing-data) je label disku, který může být jakýkoliv. Druhý parametr je název partition zjištěný v předchozím kroku.

sudo mkfs.ext4 -L /syncthing-data /dev/sda1

Pokud budete vyzváni k přepsání existující partition, odpovězte y a Enter. Formátování bude chvíli trvat, buďte trpěliví.

44.

Vytvořte prázdný adresář /syncthing-data:

sudo mkdir /syncthing-data
45.

Přimountujte novou partition do tohoto adresáře:

sudo mount /dev/sda1 /syncthing-data

Nyní je váš disk dostupný pro operační systém. Můžete se o tom přesvědčit příkazem ls -la /syncthing-data. Pokud je vše správně, uvidíte tam systémový adresář lost+found.

46.

Učiňte uživatele syncthing vlastníkem adresáře a tedy celého disku:

sudo chown -R syncthing: /syncthing-data
47.

Zakažte přístup komukoliv kromě vlastníka:

sudo chmod go-rwx /syncthing-data
48.

Nyní všechno funguje, ale po rebootu přestane. Aby byl disk funkční i po restartu (automaticky se přimountoval), editujte soubor /etc/fstab:

sudo nano /etc/fstab
49.

Přidejte na konec souboru následující řádek (oddělovač je tabulátor):

/dev/sda1       /syncthing-data ext4    defaults        0       0

50.

Stiskem Ctrl+S uložte změny a stiskem Ctrl+X ukončete editor.

51.

Následujícím příkazem restartujte server:

sudo reboot now
52.

Po restartu se přesvědčte, že je disk řádně namountován (uvidíte v něm jako root adresář lost+found). Pokud ano, můžete nový disk zdárně používat v aplikaci Syncthing.