Vytvořeno 26. 11. 2020

Okopírováno částečně odtud. Článek na root.cz od P. Krčmáře z roku 2010 o SFTP.

 Obsah:

Přehled protokolů

Přehled klientů

Serverová část

 

Přehled protokolů

FTP

File Transfer Protocol. Dnes již zastaralý protokol. Nemá žádné zabezpečení, data i přihlašovací údaje procházejí zcela nešifrovaně. Využívá TCP porty 20 a 21.

Vhodné použít pro rychlý upload velkého objemu dat ve vnitřní síti.

FTPS

File Transfer Protocol SSL/TLS. FTP, doplněný o TLS (dříve SSL) vrstvu. Klient se připojuje na port 21, zahajuje nešifrovanou komunikaci a žádá o aktivaci TLS před tím, než budou posílána citlivá data.

FTP-over-SSH

FTP hnané skrze SSH tunel. Opět stejný protokol FTP, který je ale přenášen přes SSH tunel, který je sestaven speciálně pro tento účel. Problémem jsou zde dva různé porty (FTP i SSH) a také složitá podpora. SSH klient musí o FTP vědět a celá činnost není příliš automatizovaná. Téměř se nepoužívá.

SCP

Secure Copy Protocol. Poměrně jednoduchý protokol, který dovoluje kopírovat soubory ze serveru a na server. Vše se automaticky přenáší pomocí standardní SSH komunikace.

Všechny SSH servery dnes umějí modernější protokol SFTP, takže i když si uživatel myslí že používá SCP (třeba ve WinSCP), používá dnes obvykle SFTP.

SFTP

Secure File Transfer Protocol. Nemá nic společného s FTP, jen to, že se v překladu názvu jedná o „protokol pro přenos souborů“. Je to vlastně rozšíření myšlenky SCP do nového protokolu. Ten na rozdíl od SCP umí podstatně více věcí a dokáže plně spravovat data na serveru včetně práce s právy, adresáři a podobně.

Pro použití SFTP dnes stačí nainstalovat jen balíček OpenSSH. Tak, jako máte přístupnou vzdálenou konzoli, máte k dispozici také přenos souborů přes stejný tunel. Výhody jsou zcela zřejmé: kompletně šifrovaný přenos, jeden standardní port, velké množství klientů, možnost přihlašování pomocí klíčů a další.

Vzhledem k rozšířenosti protokolu SFTP, jeho široké podpoře a bezproblémové implementaci doporučuji právě tento protokol. Je jasné, že překážkou budou někteří uživatelé, kteří prostě nesmyslně odmítají používat jiný program než Total Commander. Bohužel ten protokoly založené na SSH neumí. V Linuxu doporučuji na klientské straně aplikaci gFTP či ještě lépe FileZilla. Na Windows pochopitelně vládne český produkt WinSCP.

WebDAV over HTTPS

Umí to samé co SFTP a je vestavěný i ve Windows. Je velmi dobře implementované i ověřování serveru pomocí HTTPS certifikátů. Jenže správně nastavit WebDAV není moc jednoduché. Ve Windows může mít problém s přímým otevřením souboru.

SSHFS

Odkaz na článek zde nebo zde a také zde.

Přes šifrované spojení pomocí SFTP mohu namountovat vzdálený disk díky technologii FUSE (vytvoří se "pouze" virtuální disk - jakoby obraz vzdáleného).

Nevýhoda: pokud bychom chtěli soubory ze vzdáleného systému otevírat, musíme buď soubor nejprve okopírovat na náš systém, nebo se spolehnout na podporu ze strany dotyčné aplikace. Např. v Okularu otevřeme snadno cestu „sftp://server/soubor.pdf“, horší to ale bude kupříkladu s GIMPem. Pokročilejším uživatelům zase může scházet možnost pracovat se soubory z konzole, jako by byly lokální.

 

Přehled klientů

FileZilla Client (lze i Server - samostatná instalace pouze pro Windows) - multiplatformní (MS WIndows, Linux, Mac OS) FTP a SFTP klient s mnoha funkcemi jako jsou např. udržování připojení, podpora SLL a GSS, automatická volba mezi binárním a textovým módem, podpora firewallu a proxy atd.

CrossFTP - přehledný FTP klient GUI režimu podporující SFTP, FTPS, FXP, WebDav a Amazon S3. Podporované platfrmy pro instalaci jsou Windows, Mac, Linux, Solaris a FreeBSD.

sFTP Client for Linux - Nástroj pro přenášení souborů pomocí FTP, FTPS, FTPIS, FTPES, SFTP protokolů, podporuje cloudové služby jako Amazon S3, Dropbox, Backblaze B2 a další, synchronizuje data mezi zařízeními a mnoho dalšího.

LFTP - (popis na root.cz) terminálový programový nástroj sloužící jako klient pro přenos souborů s využitím protokolů FTP, FTPS (FTP se SSL), SFTP (přenos po SSH), HTTP, HTTPS, BitTorrent s celou řadou dalších vlastností a podporou např. IPv6, FXP přenosu (mezi dvěma servery), mirroringu zdrojů, aliasů, záložek (oblíbené akce), disponuje vlastní frontou úkolů a dá se využít ve bash-shell skriptech.

gFTP - jednoduchý a přehledný GUI klient podporující protokoly pro přenosu souborů: FTP, FTPS, HTTP, HTTPS, SFTP (SSH), FSP (starý protokol pro přenos souborů) a nakonec FXP (přenos dat mezi dvěma vzdálenými servery). Není podporováno připojení ke dvěma a více serverům najednou, ale jemožné tvořit záložky (od tvůrců aplikace je již několik předvolených, díky čemuž je možné se snadno připojit např. k oficiálnímu FTP Debianu nebo třeba openSUSE). gFTP lze nalézt v repozitářích většiny distribucí nebo na oficiálních stránkách (v GitHubu).

 

Serverová část

Využijeme (nainastalujeme) výhod balíku OpenSSH, kde najdeme:

  1. automatickou tvorbu chrootu
  2. integrovaný SFTP server

ad 1)

Po aktivaci jsou uživatelé automaticky uzavíráni ve svých adresářích. Nedovolí uživatelům spouštět na serveru konzolové příkazy a s ohledem na práva se procházet po celém disku, prohlížet si konfiguraci serveru a podobně. Což právě standardně s SSH jde.

 

 ad 2) provoz SFTP serveru

Postup:

Do konfiguračního souboru /etc/ssh/sshd_config přidáme následující sekci:

Subsystem   sftp    internal-sftp

Match group sftpusers
    ChrootDirectory     /sftp/%u
    ForceCommand        internal-sftp
    X11Forwarding       no
    AllowTcpForwarding  no

 

Tím jsme nastavili, že pro komunikaci typu sftp bude využit interní SFTP server. V systému takový příkaz nehledejte, OpenSSH ví, že ho nemá hledat a nabídne rovnou své integrované funkce.

V další části pak říkáme, že uživatele ze skupiny sftpusers (může se samozřejmě jmenovat jakkoliv) uzavřeme v adresáři /sftp a podadresáři, který odpovídá uživatelskému jménu. Pokud chcete využít domovský adresář uživatele, můžete rovnou využít proměnnou %h, která jej obsahuje.

Dále uživateli vnutíme interní SFTP server. I kdyby požádal ručně o jiný shell, stejně mu bude spuštěn tento přednastavený. Není tedy možné ručně spustit například Bash. Nakonec vypneme některé další možnosti, abychom uživatele opět trochu omezili v možnostech.

Následně vytvoříme uživatele pomocí příkazu adduser a přidáme jej do skupiny sftpusers. Jako standardní shell mu nastavíme pro jistotu /bin/false a jako domovský adresář ten, který je v /sftp. Záznam v /etc/passwd tedy bude vypadat následovně:

 

uzivatel:x:1000:100:,,,:/sftp/uzivatel:/bin/false

Jsme téměř u konce. Ještě nesmíme zapomenout nastavit adresáři uživatele jako vlastníka roota a zamezit zápis ostatním uživatelům.

# chown root /sftp/uzivatel
# chmod 700 /sftp/uzivatel

Teď ještě restartujeme SSH server a máme hotovo. Pokusíme se k našemu serveru přihlásit třeba z řádky:

$ sftp uzivatel@server
Connecting to server...
uzivatel@server's password:
sftp> ls
soubor.txt
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
soubor.txt
sftp> pwd
Remote working directory: /

Vidíte, že uživatel je uzavřen ve svém adresáři, který se mu jeví jako nejvyšší. Není možné dostat se o úroveň výše, takže uživatel je uzavřen ve svém vlastním prostoru a nemůže se procházet po zbytku disku.

Jedinou nevýhodou je, že uživatel nemá právo zapisovat do svého adresáře.

Vyřeší to ale jednoduše vytvoření podadresáře(ů) s příslušnými právy. V případě webserveru tak můžeme založit adresář public_html a uživatele v něm nechat pracovat. Můžeme také klidně nechat chroot vytvořit o úroveň výše v /sftp  a uživatele oddělit pomocí práv na jejich domovské adresáře.