Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Jak nahradit FTP pomocí SFTP a zamknout uživatele

Všichni administrátoři vědí, že FTP je zastaralý a nebezpečný protokol. Přesto je to stále standard pro přenos souborů. Důvodem je především neznalost adminů, kteří se bojí, aby se jim po serveru nepotulovali uživatelé a nenahlíželi, kam nemají. Řešení ale existuje, není složité a my vám jej ukážeme.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

FTP je snad posledním „starým“ protokolem, který k přenosu dat ani přihlašovacích informací nepoužívá šifrování. Navíc potřebuje ke svému provozu dva TCP porty, což způsobuje další problémy zejména na firewallech. Bohužel i přesto je FTP na mnoha hostingových službách stále standardem. Když řeknete znalejšímu uživateli, aby přenesl na server soubory, automaticky sáhne po FTP klientu.

Jedním z důvodů je i to, že uživatelé mají zmatek v terminologii a administrátoři mají strach pustit lidi přímo na SSH. Obojí je přitom zbytečné, protože pokud se o problematiku jen trochu zajímáte, brzy zjistíte, že tajemství neexistují a rizika jakbysmet. Tento článek vám odhalí obojí.

Anketa

Jak nejčastěji přenášíte soubory na server v internetu?

       

Terminologie

Stále pozoruji, že v oblasti přenosových protokolů panuje ohromný terminologický zmatek. Uživatelé tak raději zůstávají u osvědčeného FTP, kterému „rozumí“. Pokusím se tedy vysvětlit základní pojmy:

FTP

File Transfer Protocol. Původní a dnes již zastaralý protokol, jehož původní specifikace se objevila už v roce 1971. Nemá žádné zabezpečení, data i přihlašovací údaje procházejí zcela nešifrovaně. Využívá TCP porty 20 a 21.

FTPS

File Transfer Protocol SSL. Stejný protokol, doplněný o SSL vrstvu. V podstatě se jedná o tentýž princip, jaký využívá HTTPS (mnemotechnická pomůcka). Používá se poměrně zřídka.

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 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.

Serverová strana

O implementaci na serveru už jsme se letmo zmínili, teď se na ni podíváme podrobně. Většina adminů zná FTP, ale už tolik nevěří SFTP. Důvodem je především to, že mají strach z SSH. Nechtějí dovolit uživatelům spouštět na serveru konzolové příkazy, potřebují jen přenos souborů a nic víc. Tento problém ale má velmi jednoduché řešení, které si podrobně popíšeme.

Jedním z řešení jsou speciální shelly jako scponly nebo rssh. Ty umožňují pouze přenos souborů pomocí SFTP případně SCP nebo rsync. Uživatelé jsou tak omezeni jen na určité úkoly.

Potíž nasazení těchto shellů je ale v tom, že standardně pustí uživatele mimo jeho adresář. S ohledem na práva se tak může teoreticky procházet po celém disku, prohlížet si konfiguraci serveru a podobně. To není vždy žádoucí, zejména na víceuživatelských systémech.

Tento problém se dříve řešil pomocí prostředí chroot, do kterého byl uživatel uzavřen. Problém ale je, že tento postup vyžaduje kopírování systémových souborů do domovského adresáře, udržování verzí knihoven, ruční konfiguraci a má další nevýhody. Problém se navíc zvětšuje, pokud máte na serveru řekněme stovky uživatelů. Existují skripty, které vytvoření chroot prostředí podstatně usnadňují, přesto se toto řešení adminům oprávněně nelíbí.

Existuje ale ještě jedna, velmi elegantní a velmi pohodlná varianta. Ta je k dispozici v OpenSSH od verze 4.8 (z roku 2008, aktuální verze je 5.3). Je pravděpodobné, že ji ve své distribuci najdete. Má dvě podstatné vlastnosti:

  1. umožňuje automatickou tvorbu chrootu dle potřeby
  2. obsahuje integrovaný SFTP server

První jmenovaná vlastnost vám umožní na chroot vlastně úplně zapomenout, protože po její aktivaci jsou uživatelé automaticky uzavíráni ve svých adresářích. Protože je SFTP server integrován přímo do serveru, není třeba kvůli němu spouštět žádný externí program a nemusíte tedy do chrootu kopírovat žádné soubory. Jdeme na praktickou ukázku.

SFTP jako náhrada FTP

Předpokládám, že máte nainstalovaný balíček OpenSSH (openssh-server) verze alespoň 4.8. Do jeho konfiguračního souboru /etc/ssh/sshd_config přidejte 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. Bohužel pro postup je nutné, aby adresář vlastnil root a jako jediný do něj mohl zapisovat. Za vším stojí bezpečnost tohoto řešení, protože uživatel schopný zapisovat do chrootovaného / by se mohl poměrně snadno dostat ven, protože si může vytvořit vlastní /etc a stát se rootem.

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.

SFTP je lepší než FTP

Toto řešení vám umožní velmi jednoduše a plnohodnotně nahradit nebezpečné FTP na jakémkoliv serveru. Z hlediska uživatele jsou možnosti stejné, vše je ale šifrované a tudíž bezpečnější. Z hlediska uživatele ani administrátora nic nebrání v kompletním nahrazení FTP bezpečnějším protokolem pro přenos souborů.

Petr Krčmář

Petr Krčmář

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Vystudoval elektroniku se zaměřením na počítačové systémy, nyní se zabývá médii, především těmi elektronickými.

Školení: SQL pro začátečníky

Kdo nezná jazyk SQL jako kdyby nebyl. Tak lze stručně charakterizovat dnešní význam SQL v IT. Pokud se chcete naučit tento jazyk, tak navštivte naše školení SQL. Školení je určené začátečníkům, a proto se začíná od skutečných základů.

Kromě samotného SQL se účastíci školení seznámí i se základy PostgreSQL, což je databáze, která se díky své shodě se standardem ANSI SQL a komfortem, který poskutuje svým uživatelům, zvlášť hodí pro výuku SQL.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,29

Přehled názorů

...posledním „starým“ protokolem...
eL 22. 2. 2010 00:19
Nový
└ 
Re: ...posledním „starým“ protokolem...
Ondřej Surý 22. 2. 2010 09:06
Nový
 
└ 
Re: ...posledním „starým“ protokolem...
kolotoc 22. 2. 2010 09:52
Nový
Re: Jak nahradit FTP pomocí SFTP a zamknout uživatele
Mirek 22. 2. 2010 00:36
Nový
└ 
Re: Jak nahradit FTP pomocí SFTP a zamknout uživatele
Mirek 22. 2. 2010 01:11
Nový
 
└ 
Re: Jak nahradit FTP pomocí SFTP a zamknout uživatele
grim . 22. 2. 2010 09:05
Nový
Asi chyba
Father Hurley 22. 2. 2010 00:45
Nový
└ 
Re: Asi chyba
Petr Krčmář 22. 2. 2010 08:19
Nový
SFTP plugin pro total commander
vlx 22. 2. 2010 01:05
Nový
└ 
Re: SFTP plugin pro total commander
caracho 22. 2. 2010 08:14
Nový
 
└ 
Re: SFTP plugin pro total commander
M_P 22. 2. 2010 10:38
Nový
 
 
└ 
Re: SFTP plugin pro total commander
ten češtin 22. 2. 2010 16:34
Nový
 
 
 
└ 
Re: SFTP plugin pro total commander
JardaP . 23. 2. 2010 14:58
Nový
Windows to brzdí...
Harvie .cz 22. 2. 2010 01:59
Nový
Špatný odhad autora
ToM 22. 2. 2010 06:51
Nový
├ 
Re: Špatný odhad autora
PavelM 22. 2. 2010 07:46
Nový
│
└ 
Re: Špatný odhad autora
trubicoid 22. 2. 2010 07:58
Nový
│
 
└ 
Re: Špatný odhad autora
Nfn 26. 2. 2010 09:55
Nový
├ 
Re: Špatný odhad autora
caracho 22. 2. 2010 08:13
Nový
│
└ 
Re: Špatný odhad autora
kolotoc 22. 2. 2010 09:01
Nový
│
 
└ 
Re: Špatný odhad autora
JardaP . 23. 2. 2010 15:02
Nový
└ 
Re: Špatný odhad autora
Sten 22. 2. 2010 13:54
Nový
 
└ 
Re: Špatný odhad autora
beko 23. 2. 2010 14:18
Nový
 
 
├ 
Re: Špatný odhad autora
xurfa 24. 2. 2010 07:41
Nový
 
 
└ 
Re: Špatný odhad autora
Sten 25. 2. 2010 22:39
Nový
Who cares?
Přezdívka je povinná 22. 2. 2010 08:12
Nový
└ 
Re: Who cares?
Jenda 22. 2. 2010 11:39
Nový
Total Commander
Tomas Matejicek 22. 2. 2010 08:45
Nový
└ 
Re: Total Commander
Karel 22. 2. 2010 17:59
Nový
Re: Jak nahradit FTP pomocí SFTP a zamknout uživatele
pht 22. 2. 2010 08:54
Nový
Rychlost na prvém místě
ikarlos 22. 2. 2010 09:17
Nový
└ 
Re: Rychlost na prvém místě
aaa 22. 2. 2010 11:58
Nový
 
└ 
Re: Rychlost na prvém místě
ikarlos 22. 2. 2010 12:11
Nový
 
 
└ 
Re: Rychlost na prvém místě
Zdenek - 22. 2. 2010 19:33
Nový
Loginy v SQL
Sniper 22. 2. 2010 09:27
Nový
├ 
Re: Loginy v SQL
Michal Krause 22. 2. 2010 09:43
Nový
└ 
Re: Loginy v SQL
Sten 22. 2. 2010 14:48
Nový
utok ?!
klusacek 22. 2. 2010 09:40
Nový
└ 
Re: utok ?!
vh 22. 2. 2010 11:06
Nový
 
└ 
Re: utok ?!
klusacek 22. 2. 2010 13:28
Nový
 
 
└ 
Re: utok ?!
Anče 24. 2. 2010 17:51
Nový
 
 
 
└ 
Re: utok ?!
Sten 24. 2. 2010 18:10
Nový
 
 
 
 
└ 
Re: utok ?!
Petr Krčmář 25. 2. 2010 09:57
Nový
 
 
 
 
 
├ 
Re: utok ?!
klusacek 25. 2. 2010 14:45
Nový
 
 
 
 
 
└ 
Re: utok ?!
Sten 25. 2. 2010 17:22
Nový
Jen SFTP!
repli2dev 22. 2. 2010 09:45
Nový
└ 
Re: Jen SFTP!
Petr Krčmář 22. 2. 2010 09:49
Nový
chroot = problem?
kolotoc 22. 2. 2010 09:46
Nový
└ 
Re: chroot = problem?
Petr Krčmář 22. 2. 2010 09:51
Nový
 
└ 
Re: chroot = problem?
kolotoc 22. 2. 2010 13:23
Nový
více uživatelský systém
MiR 22. 2. 2010 09:46
Nový
└ 
Re: více uživatelský systém
Karel 22. 2. 2010 10:51
Nový
Jak se muzu stat vytvorenim /etc rootem?
s 22. 2. 2010 09:48
Nový
└ 
Re: Jak se muzu stat vytvorenim /etc rootem?
r 22. 2. 2010 10:29
Nový
 
└ 
Re: Jak se muzu stat vytvorenim /etc rootem?
tm 22. 2. 2010 10:49
Nový
 
 
└ 
Re: Jak se muzu stat vytvorenim /etc rootem?
Misojogi 21. 2. 2011 11:07
Nový
chybi mi tam rsync over ssh
Jet Pac 22. 2. 2010 10:24
Nový
a co rssh?
ubx 22. 2. 2010 11:53
Nový
lshell
Petr Macek 22. 2. 2010 12:25
Nový
Dobrý nápad jak drba ucho přes hlavu.
ondra.novacisko.cz 22. 2. 2010 12:48
Nový
└ 
Re: Dobrý nápad jak drba ucho přes hlavu.
kolotoc 22. 2. 2010 19:52
Nový
 
└ 
Re: Dobrý nápad jak drba ucho přes hlavu.
Sten 24. 2. 2010 16:35
Nový
Dotaz
profix 22. 2. 2010 12:51
Nový
└ 
Re: Dotaz
Sten 15. 4. 2010 14:54
Nový
Umi uz WinSCP cestinu?
Al Most 22. 2. 2010 15:36
Nový
└ 
Re: Umi uz WinSCP cestinu?
PavelM 22. 2. 2010 20:19
Nový
 
└ 
Re: Umi uz WinSCP cestinu?
pytel blech 22. 2. 2010 23:51
Nový
ajťacký kecy
mat 22. 2. 2010 16:37
Nový
FTP-TLS/SSL
Petr Stehlík 23. 2. 2010 10:38
Nový
└ 
Re: FTP-TLS/SSL
PSIkappa 23. 2. 2010 17:27
Nový
chyba?
deeper 1. 6. 2010 19:15
Nový
├ 
Re: chyba?
mimi 13. 7. 2010 21:52
Nový
└ 
Re: chyba?
lama 8. 11. 2010 14:12
Nový
 
└ 
Re: chyba?
talpa 3. 5. 2011 02:34
Nový
škoda
AkceRec 4. 1. 10:44
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem