SSHFS: malý pomocník pro šifrovaný přístup k datům

7. 9. 2012
Doba čtení: 6 minut

Sdílet

Souborové systémy v uživatelském prostoru nemusí být jen hračkou, ale i užitečným pomocníkem například pro vzdálený přístup k disku. Hlavní výhodou je, že fungují i bez superuživatelských práv a SSHFS vám umožní toho využít naplno. Umí totiž připojit vzdálený souborový systém přímo do vašeho počítače.

O SSH a FUSE jsme už několik článků napsali, takže pokud o jednom nebo obou těchto slovech nic netušíte, podívejte se na ně:

SSH nebo-li Secure Shell by se dalo popsat jako univerzální šifrovaný kanál, který sice měl být náhradou za telnet a tedy jako bezpečný vzdálený shell, ale je navržen tak, že zvládne mnohem více. Můžeme si ho představit jako trubku, kterou lze přenášet soubory, příkazy a dokonce i okna. Jedním z protokolů kolem SSH je i SFTP, které má stejný účel jako FTP, tedy přenášení souborů z či na vzdálený server a odtud už je jen krůček tomu, aby se dal disk vzdáleného počítače připojit do počítače lokálního.

A tady přichází na řadu FUSE. Ten nabízí programátorům rozhraní pro napsání souborového systému mimo linuxové jádro. V praxi tak běží proces souborového systému ne na úrovni jádra, ale jako kterýkoli jiný program v uživatelském prostoru včetně všech omezení, které s tím souvisí. To znamená hlavně běh pod uživatelem a tedy i větší bezpečnost. Souborový systém napsaný pomocí FUSE má mnohem větší problémy shodit stroj než systém, který je součástí jádra.

Když spojíme SFTP, SSH a FUSE, dostaneme SSHFS. Tento nástroj umožňuje uživatelům připojit jakýkoli stroj s SSH a SFTP do lokálního adresáře. Díky SSH jsou data navíc přenášena bezpečným kanálem, takže je není možné odposlouchávat. Autentizaci je možné řešit přes klíče, takže připojení vzdáleného stroje lze pohodlně automatizovat.

Jak na to

SSHFS je součástí snad každé velké distribuce a stačí ho nainstalovat z repositářů. Na Ubuntu či Debianu se použije následující:

# apt-get install sshfs 

Po instalaci se v systému objeví stejnojmenná binárka, a tak nic nebrání tomu nějaký vzdálený systém připojit.

$ sshfs uzivatel@1.2.3.4:~/ ~/vzdaleny_stroj 

V tomto příkladu jsme připojili domácí adresář uživatele uzivatel na stroji s IP adresou 1.2.3.4 do lokálního adresáře ~/vzdaleny_stroj. SSHFS se ve správný okamžik zeptá na heslo a po jeho zadání vše proběhne.

K nově připojenému souborovému systému je potřeba vědět, že soubory a adresáře patří stejnému UID a GID, jako na vzdáleném stroji, ale při práci s nimi se používá vždy uživatel, kterého jste použili při připojení souborového systému. To znamená, že pokud mají data vzdáleného stroje jako vlastníka jiné UID než je to vaše aktuální, ještě to neznamená, že nemůžete s daty pracovat. Takto můžete připojit třeba celý systém pomocí vzdáleného uživatele root a mít tak přístup ke každému souboru, i když to práva na první pohled nedovolí.

Když vás připojený souborový systém přesně bavit, přijde na řadu utilitka fusermount, která ho dokáže odpojit.

$ fusermount -u ~/vzdaleny_stroj 

Parametr -u znamená umount, tedy odpojení. Další parametry je možné najít po spuštění fusermount -h.

Na vzdáleném serveru musí být nainstalován a běžet daemon openssh. V Debianu a Ubuntu ho nainstalujete z balíčku ssh, v Arch Linuxu to je pak openssh a jiné distribuce ho mohou označovat úplně jinak.

Pokročilé možnosti

SSHFS je možné přizpůsobit pomocí parametru -o, kde můžeme ovlivnit, jak se mají zobrazit práva, (a)synchronní čtení a zápis, velikost bloků odeslaných dat, různé timeouty, práci se symlinky, cache a mnoho dalšího. Všechny možnosti jsou stručně popsány v manuálové stránce.

$ man sshfs 

Některé parametry by se vám mohly v praktickém životě hodit a najdete je v následující tabulce.

uid=UID Namapovat vzdáleného uživatele na lokálního
gid=GID Namapovat vzdálenou skupinu na lokální
idmap=none|user Způsob mapování uživatelů – none: žádné, user: mapovat lokálního uživatele na vzdáleného
follow_symlinks Na straně serveru následovat symlinky
max_read=N Maximální velikost požadavku pro čtení
max_write=N Maximální velikost požadavku pro zápis
hard_remove Smazání odstraněných dat ihned
intr Povolit možnost přerušení požadavku
sshfs_sync Synchronní zápis
reconnect Znovu připojení po odpojení

Všechny se používají s parametrem -o a oddělují čárkou, například:

$ sshfs -o uid=1000,gid=1000,idmap=user,reconnect uzivatel@1.2.3.4:~/ ~/vzdaleny_stroj 

Klíče

Při častém použití sshfs nebo při jeho automatickém připojování, se vám může hodit přihlašování pomocí klíčů bez hesla. Takové přihlášení využívá páru veřejného a soukromého klíče, kdy se veřejný klíč nahraje na vzdálený server a ten pak je schopen bezpečně ověřit uživatele.

Klíče by se měly správně vybavovat heslem, ale záleží hlavně na situaci. Nový pár klíčů vytvoříte pomocí ssh-keygen nástroje:

$ ssh-keygen -t dsa 

Budete požádání o zadání hesla a místa pro uložení klíčů. Místo můžete nechat výchozí a heslo je na vás. Pokud žádné nepoužijete, budete se moci přihlásit pomocí tohoto klíče bez něj.

Veřejný klíč se nachází ve výchozím stavu v ~/.ssh/id_dsa.pub a je potřeba ho dopravit na vzdálený server do souboru ~/.ssh/authorized_keys. Každý řádek může obsahovat jeden klíč, takže jich na jednom serveru můžete mít více. Lze to udělat ručně nebo použít utilitku ssh-copy-id.

$ ssh-copy-id -i .ssh/id_dsa.pub uzivatel@1.2.3.4 

Nyní by mělo jít se přihlásit pomocí klíče. Ten je automaticky použit, takže nic dalšího není potřeba nastavovat. Připojení je možné ještě zjednodušit použitím konfiguračního souboru ~/.ssh/config, a to následujícím způsobem:

Host jmeno_stroje
  HostName domena_nebo_IP_adresa
  User uzivatel
  Port 22
  Compression no 

Těchto pět řádků můžete také zopakovat pro další stroje. K nim se pak připojíte tímto způsobem:

$ ssh jmeno_stroje 

A abychom neobíhali od tématu, tak:

$ sshfs jmeno_stroje: ~/pripojny_bod 

Pokud není za dvojtečkou nic uvedeno, připojí se domácí adresář uživatele. V tomto případě roota.

Automatický mount

Automatické připojení je možné řešit mnoha způsoby. Jedním je třeba autofs, ale jeho konfigurace je trochu složitější. Za to by si měl dobře poradit s výpadky spojení a znovupřipojením odpojeného stroje. Pokud zrovna žádný program k připojenému souborovému systému nepřistupuje, autofs ho automaticky odpojí a čeká, dokud do přípojného bodu nějaký program zase nevstoupí. Více informací o autofs získáte v našem článku NFS a Autofs: Sdílení v LAN.

My si ukážeme použití sshfs v souboru /etc/fstab.

jmeno_stroje:  /pripojny/bod  fuse.sshfs  uid=1000,gid=1000,reconnect,intr,follow_symlinks,allow_other  0  0 

Souborové systémy uvedené v /etc/fstab jsou připojované během bootovacího procesu, takže je nutné, aby byla v této době už dostupná síť. Pokud používáte NetworkManager nebo jinou utilitku, která stroj připojí k síti až po přihlášení uživatele, nebude záznam v /etc/fstab fungovat a jen si prodloužíte bootovací proces.

ict ve školství 24

V řádku s parametry určitě nezapomeňte uvést allow_other, jenž zpřístupní připojený souborový systém uživatelům a také uid a gid uživatele, který ho bude používat. Další parametry jsou už jen na vašem zvážení.

Shrnutí

SSHFS používám každý den pro streamování hudby ze vzdáleného serveru přes internet a někdy i pro streamování filmů či seriálů a až na občasné výkyvy způsobené kvalitou připojení, jsem na žádný problém nenarazil. Na rychlém hardwaru je rychlost přenosu shodná s rychlostí fyzické linky. To znamená, že na 100 Mbps síti není problém protáhnout kolem 10 MB/sec. Na stejné síti mi dělá NFS přes UDP protokol o 1 MB víc.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.