porty - 21 příkazový kanál, udržuje se po dobu celé relace
20 datový kanál, navazuje se pouze za účelem přenosu dat
spojení - aktivní
telnet nekde.cz 21
.... # uvodní výpis
USER anonymous # login
PASS xxxxx # heslo
PORT a,b,c,d,x,y # klient oznámí serveru, že na ip adrese
# a.b.c.d je otevřen port x*256+y
LIST # vypíše obsah adresáře
quit # ukončí spojení
datový kanál je otevřen klientem a pomocí příkazu PORT to
oznamý serveru
pasivní
telnet nekde.cz 21
....
USER anonymous
PASS xxxxx
PASV # server vrací řetězec a,b,c,d,x,y
LIST
quit
datový kanál je otevřen serverem na požádaní klienta, přikaz PASV
model komunikace klient-server
-------------
|/---------\|
|| User || --------
||Interface|<--->| User |
|\----^----/| --------
---------- | | |
|/------\| FTP Commands |/----V----\|
||Server|<---------------->| User ||
|| PI || FTP Replies || PI ||
|\--^---/| |\----^----/|
| | | | | |
-------- |/--V---\| Data |/----V----\| --------
| File |<--->|Server|<---------------->| User |<--->| File |
|System| || DTP || Connection || DTP || |System|
-------- |\------/| |\---------/| --------
---------- -------------
Server-FTP USER-FTP
model komunikace klient-server,server
Control ------------ Control
---------->| User-FTP |<-----------
| | User-PI | |
| | "C" | |
V ------------ V
-------------- --------------
| Server-FTP | Data Connection | Server-FTP |
| "A" |<---------------------->| "B" |
-------------- Port (A) Port (B) --------------
Proč je FTP nebezpečné? Je to dáno dobou, ve které protokol vznikl. V roce 1971 byla síť Internet (tehdy ARPANET) relativně bezpečná, byla to akademická/vojenská síť, kde si všichni uživatelé navzájem mohli důvěřovat, proto se při návrhu FTP protokolu hledělo spíše k efektivnosti než k bezpečnosti. Na druhou stranu má FTP unikátní vlastnosti, které u nových protokolů nenajdeme.
Bezpečnostní problémy bych rozdělil do 3 kategorii, viz. níže
1 - Hesla v čitelné podobě
Hesla se sítí posílají nezašifrovaná. Stačí jakýkoli sniffer.
2 - FXP přenosy
a, Přesměrování datového kanálu na port nějaké služby, viz.
www.securityfocus.com/archive/1/3488
====================================================
$cat smtp_file
HELO fi.muni.cz
MAIL from: xaster@fi.muni.cz
RCPT to: orm@penmat.ascs.muni.cz
data
from: Jaroslav Aster
to: orm
test
.
====================================================
Zkopírujeme soubor smtp_file na nekde.cz, třeba jako uživatel
anonymous, do uploadu.
====================================================
$telnet nekde.cz 21
.... # uvodní hlášky
USER anonymous
PASS nekdo@nekde.cz
CWD upload
PORT 147,251,48,3,0,25
RETR smtp_file
quit
====================================================
Smažeme po sobě na serveru soubor smtp_file :-).
====================================================
V emailové zprávě takto odeslané bude ip adresa stroje, na
kterém běží FTP server.
b, Skenování portů, viz. man nmap
$nmap -b user:passwd@nekde:21 scan_comp
Skenování provádí FTP server, Vaše ip vidět není.
3 - Kradení datových kanálů
a, Pasivní FTP
Při provozování pasivního FTP se útočníkovi naskýtá možnost
připojit se na datový kanál a získat tak data. Riziko se
zvyšuje, když FTP server přiděluje porty inkrementálně.
b, Aktivní FTP
Totéž, co u pasivního, ale problém vzniká na straně klienta.
Instalace z deb je velice jednoduchá
do /etc/apt/source.list přidat tyto řádky
deb ftp://ftp.pureftpd.org/pub/pure-ftpd/debian/ ./
deb-src ftp://ftp.pureftpd.org/pub/pure-ftpd/debian/ ./
a spustit příkaz
$apt-get update && apt-get install pure-ftpd
ani uživatelé těch horších :-) nepřijdou nazbyt,
Instalace z rpm
$wget http://cesnet.dl.sourceforge.net/sourceforge/pureftpd/pure-ftpd-1.0.12-1.[tva platforma].rpm
$rpm -Uvh pureftpd/pure-ftpd-1.0.12-1.[tva platforma].rpm
připraveny jsou balíčky pro i386, i586, i686 a athlon
ostatní musí ze zdrojového textu
Instalace ze zdrojového textu
$cd /usr/src
$wget http://cesnet.dl.sourceforge.net/sourceforge/pureftpd/pure-ftpd-1.0.12.tar.gz
$tar zxvf pure-ftpd-1.0.12.tar.gz
$cd pure-ftpd-1.0.12
$./configure --help | less
$./configure && make && make check && make install
více viz. README :-)
Neintuitivní části tu nejsou. PureFTPd má pěknou dokumentaci a vše potřebné je popsáno
v souboru README. Pro lidi nemající humor bych doporučil volbu --without-humor :-).
# Don't allow authenticated users - have a public anonymous FTP only.
AnonymousOnly yes
# Disallow anonymous connections. Only allow authenticated users.
#NoAnonymous yes
# Maximum number 10
MaxClientsNumber 10
# Maximum number of simultaneous clients with the same IP address. only
# works in stand2ne mode.
MaxClientsPerIP 4
# LDAP configuration file (see /usr/share/doc/pure-ftpd/README.LDAP and example)
#LDAPConfigFile /etc/pureftp-ldap.conf
# MySQL configuration file (see /usr/share/doc/pure-ftpd/README.MySQL and example)
# MySQLConfigFile /etc/pureftp-mysql.conf
# PureDB user database (see /usr/share/doc/pureftpd/README.Virtual-Users)
#PureDB /etc/pureftpd.pdb
# If you want to enable PAM authentication, uncomment the following line
#PAMAuthentication yes
# If you want simple Unix (/etc/passwd) authentication, uncomment this
# UnixAuthentication yes
# Allow FXP transfers for authenticated users only.
#AllowUserFXP yes
# Create an additional log file with transfers logged in a Apache-like format :
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# This log file can then be processed by www traffic analyzers.
AltLog clf:/var/log/pureftpd.log
Jak samy vidíte, konfigurace je prostá. Jednotlivé volby jsou okomentované, proto je už
dále komentovat nebudu. Jen pro připomínku kompletní dokumentaci najdete na adrese
http://www.pureftpd.org/documentation.shtml.
WHAT IS RSYNC?
--------------
rsync is a replacement for rcp that has many more features.
rsync uses the "rsync algorithm" which provides a very fast method for
bringing remote files into sync. It does this by sending just the
differences in the files across the link, without requiring that both
sets of files are present at one of the ends of the link beforehand.
At first glance this may seem impossible because the calculation of
diffs between two files normally requires local access to both
files.
Rsync je tedy program provádějící vzdálenou synchronizaci souborů. Používá se převážně k
mirroringu ftp serverů, ale jeho použití by mohlo být i v oblasti webhostingu, kde by mohlo
nahradit stárnoucí a nebezpečné ftp. Používá svůj vlastní protokol pro přenos souborů, který
přenáší jen rozdíly mezi soubory. Bližší informace jsou
zde.
Instalace z deb
$apt-get install rsync
Instalace z rpm pro RedHat
$wget http://samba.anu.edu.au/ftp/rsync/binaries/redhat/rsync-2.4.6-1.i386.rpm
rpm -Uvh rsync-2.4.6-1.i386.rpm
přiraveny jsou binárky i pro jiné platformy, ale to už Vás odkáži na
http://samba.anu.edu.au/ftp/rsync/binaries.
Instalace ze zdrojových textů, aneb to nejlepší na konec
$cd /usr/src
$wget http://samba.anu.edu.au/ftp/rsync/rsync-2.5.5.tar.gz
$tar zxvf rsync-2.5.5.tar.gz
$cd rsync-2.5.5
$./configure --help | less
$./configure && make && make install
Program neobsahuje žádné speciální volby, na které by stálo upozornit.
motd file = /etc/motd
max connections = 25
syslog facility = local3
[ftp]
comment = ftp area
path = /pack/ftp
read only = yes
list = yes
uid = nobody
gid = nobody
[tmp]
comment = temporary file area
path = /tmp
read only = no
list = yes
hosts allow = 192.168.2.0/24 127.0.0.0/8 *.anu.edu.au
auth users = tridge, susan
secrets file = /etc/rsyncd.secrets
pro bližší informace bych doporučil si přečíst rsync HOWTO na této adrese
http://sunsite.dk/info/guides/rsync/rsync-mirroring.html.