FTP server a rsync

Jaroslav Aster, xaster@fi.muni.cz


Obsah


1. FTP

1.1 Historie

FTP (File Transfer protocol) je protokol pro přenos souborů. Je to druhá nejrozšířenější služba na Internetu, hned za HTTP. Protokol vznikl v roce 1971 na M.I.T a je definován v několika rfc dokumentech. Poslední definice je rfc 959 z roku 1985, která je platná dodnes. Doplňující rfc 1579 (Firewall-Friendly FTP) a 2228 (FTP Security Extensions).

Obsah  FTP

1.2 Protokol

Protokol FTP je v dnešní době unikátní tím, ze používá ke komunikaci dva oddělené kanály, jeden příkazový a jeden datový. Stručný popis protokolu je uveden níže.
    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) --------------
    


Obsah  FTP

1.3 Bezpečnost

FTP a bezpečnost jsou dva pojmy, které nejdou moc dohromady. FTP protokol není bezpečný a neměl by se používat na nic jiného než na anonymní přístup. Bohužel realita je jiná a FTP se stále v hojné míře používá k autorizovaným přístupům.

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.
    


Obsah  FTP

1.4 Servery

FTP serverů existuje velké množství, jen namátkou: WU-ftpd, ProFTPD, PureFTPD a další.

Obsah  FTP

1.5 PureFTPd

1.5.1 Úvod

Cituji z domovských stránek (http://www.purefptd.org)

"Pure-FTPd is a free (GPL), secure, production-quality and standard-conformant FTP server based upon Troll-FTPd"

Nelze nesouhlasit :-).

Obsah  FTP  PureFTPd

1.5.2 Instalace

Instalace PureFTPd je snadnou záležitostí. Zvládne to i malé dítě na houpačce, tedy za předpokladu, že používá tu správnou ditribuci (Debian GNU/Linux :-)),
    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 :-).

Obsah  FTP  PureFTPd

1.5.4 Konfigurace

Konfigurace PureFTPd Vás možná překvapí, protože PureFTPd nemá žádný konfigurační soubour. Vše se konfiguruje pomocí voleb na příkazovém řádku. Nezoufejte, o svůj "kofigurák" nepřijdete. Standardní distribuce obsahuje perlový script pure-config.pl, který jako parametr dostane konfigurační soubor, jehož část je uvedena níže, a spustí FTP server se zadanými parametry.
     # 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.

Obsah  FTP  PureFTPd

2. rsync

2.1 Co to proboha je?

Boha se na to ptát nebudem :-), ale domovská stránka http://samba.anu.edu.au/rsync nám říká:
    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.

Obsah  rsync

2.2 Instalace

Instalace z balíčků je snadná,
    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.

Obsah  rsync

2.3 Konfigurace

Konfigurace se provádí prostřednictvím souboru /etc/rsyncd.conf. Kdo někdy konfiguroval Sambu, tomu následující výpis nebude neznamý:
    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.

Obsah  rsync