Možno si myslíte, že v názve rrsync je preklep, ale je to skutočný názov príkazu. Názov pochádza z restricted rsync a zvyčajne sa distribuuje spolu s rsync cez správcu balíkov. Zistíme, kde sa nachádza na Arch Linux:

$ pacman -Fy && pacman -F rrsync
extra/rsync 3.2.3-3 [installed]
    usr/lib/rsync/rrsync

Je zrejmé, že Arch dodáva rrsync ako súčasť balíka rsync, hoci jeho umiestnenie je trochu nepraktické — /usr/lib/rsync/rrsync nie je miesto, kde by človek zvyčajne hľadal spustiteľné súbory a toto umiestnenie zvyčajne nie je v premennej $PATH používateľa, čo znamená, že na jeho spustenie treba uviesť celú cestu. Je už správne označený ako spustiteľný:

$ ls -l /usr/lib/rsync/rrsync
-rwxr-xr-x 1 root root 7467 Dec 30  2020 /usr/lib/rsync/rrsync

Áno, na konci prvého stĺpca je x. Alternatívne možno použiť aj stat:

$ stat -c '%A' /usr/lib/rsync/rrsync
-rwxr-xr-x

Jeho umiestnenie však vôbec nie je problém, keďže ho nebudete spúšťať manuálne. Pokus o to končí chybou:

$ /usr/lib/rsync/rrsync
/usr/lib/rsync/rrsync: No subdirectory specified
Use 'command="/usr/lib/rsync/rrsync [-ro|-wo] SUBDIR"'
	in front of lines in /home/user/.ssh/authorized_keys

Chyba je vlastne dosť nápomocná, keďže presne naznačuje, čo treba urobiť.

Vygenerovanie verejného kľúča #

Na prijímacom stroji vygenerujte SSH pár kľúčov:

ssh-keygen -f ~/.ssh/rrsync_transfer -C "Transfer files between servers using rrsync"

Keď budete vyzvaní na zadanie heslovej frázy, nezadávajte žiadnu. Je to kľúčové pre automatizované nastavenie. Teraz preneste súbor verejného kľúča umiestnený na ~/.ssh/rrsync_transfer.pub na zdrojový stroj. Môže to byť trochu komplikované, keďže medzi týmito dvoma servermi/strojmi pravdepodobne v tejto chvíli neexistuje priame spojenie, ale zvyčajne existuje sprostredkovateľský lokálny počítač (ten, na ktorom teraz pracujete), ktorý sa môže vzdialene pripojiť k obom. Prenos verejného kľúča by mohol vyzerať takto:

scp user@receiving:~/.ssh/rrsync_transfer.pub .
scp rrsync_transfer.pub user@sourcing:~/

Existuje mnoho iných spôsobov, ako to urobiť, dokonca jednoduché skopírovanie a vloženie z editora do editora môže byť dostatočné. Na konci by mal obsah súboru rrsync_transfer.pub byť prítomný na zdrojovom stroji.

Autorizované kľúče #

Ďalším krokom je pridanie referencie rrsync z vyššie do súboru authorized_keys na zdrojovom stroji:

echo -n 'command="/usr/lib/rsync/rrsync -ro ~/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ' >> /home/user/.ssh/authorized_keys

Ak súbor neexistuje a terminál si sťažuje, najprv ho vytvorte:

touch /home/user/.ssh/authorized_keys

Trailing medzera je tam potrebná. Všimnite si, že tu sa používa absolútna cesta len na označenie user. Ak ste už prihlásení ako daný používateľ, môžete samozrejme použiť aj relatívnu cestu. Pokračujte pridaním verejného kľúča hneď za tento príkaz:

< rrsync_transfer.pub >> /home/user/authorized_keys

Pre používateľov neznámych s vyššie uvedenou syntaxou, operátor presmerovania sa používa na vyhnutie sa tzv. zbytočnému použitiu cat. V každom prípade, na konci by mal súbor authorized_keys mať jeden zo záznamov na jedinom riadku, ktorý obsahuje niečo takéto:

command="/usr/lib/rsync/rrsync -ro ~/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAA...Vc= Transfer files between servers using rrsync

Teraz by malo byť možné rsyncovať súbory na prijímací stroj zo zdrojového takto:

rsync -e "ssh -i $HOME/.ssh/rrsync_transfer" -av user@sourcing: transferred-files/

Poznámka: táto metóda funguje len pre ne-root prostredia. Aby fungovala s rootom, napríklad pre periodickú zálohu celého systému (tak ako to väčšinou používam ja), je potrebných niekoľko ďalších krokov.

Použitie s rootom #

Aby ste mali prístup k celému súborovému systému umiestnenému na /, najprv presuňte vyššie uvedený záznam command="... ssh-rsa AAA... zo súboru authorized_keys používateľa do toho, ktorý patrí rootovi. Prosím, nepokúšajte sa presunúť celý súbor, pokiaľ nie ste absolútne istí, že obsahuje iba jediný záznam diskutovaný vyššie, inak môžete — v závislosti od konfigurácie ssh — znížiť bezpečnosť vášho systému.

Teraz upravte riadok, ktorý ste práve presunuli z /home/user/.ssh/authorized_keys do /root/.ssh/authorized_keys a zmeňte cestu z relatívnej ~/ na absolútnu / takto:

command="/usr/lib/rsync/rrsync -ro /",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAA...Vc= Transfer files between servers using rrsync

Jediný rozdiel je chýbajúce ~, pričom / sprístupňuje celý súborový systém. Poslednou požiadavkou je úprava súboru /etc/ssh/sshd_config. Vyhľadajte PermitRootLogin, odkomentujte to a zmeňte hodnotu na:

PermitRootLogin forced-commands-only

Tu rrsync, teda restricted rsync, žiari. Aj keď pristupuje k rootovmu súborovému systému, nemôže byť takto použitý na poškodenie systému, keďže môže súbory len čítať. Príkaz na zálohu celého súborového systému by mohol vyzerať takto:

sudo rsync -e "ssh -i $HOME/.ssh/rrsync_transfer" -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} root@sourcing: filesystem-backup/

Nezabudnite zmeniť user@sourcing: na root@sourcing:. Vyššie uvedený príkaz sa dá nastaviť aj ako cron job!

Odkazy #