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!