FTP - File Transfer Protocol


Tomáš Vašek, xvasek@fi.muni.cz



Obsah




FTP je protokol určený k přenosu souborů ze vzdáleného počítače na lokální. Ve speciálních případech se může jednat o stahování z lokálnío počítače (z jiného účtu) nebo dokonce o kopírování souborů ze vzdáleného počítače na vzdálený.

FTP využívá k přenosu souborů protokoly TCP/IP. Standardní port serveru FTP je 21. Celá komunikace mezi vzdáleným a lokálním počítačem je typu klient/server. Na vzdáleném počítači (serveru) tedy běží démon čekající na příchozí spojení na portu 21. Po navázání řídícího spojení (využívá telnet) na port 21 se vytváří datové spojení na portu 20. Podle toho kdo otvírá datové spojení rozlišujeme mezi pasivním (obojí spojení otvírá klient na server) a aktivním (datové je iniciováno serverem) režimem. Nachází-li se klient za firewallem či proxy serverem, je možné, že server nebude schopen navázat datové spojení.


                                          -------------
                                          |/---------\|
                                          ||   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




  
                  Control     ------------   Control
                  ---------->| User-FTP |<-----------
                  |          | User-PI  |           |
                  |          |   "C"    |           |
                  V          ------------           V
          --------------                        --------------
          | Server-FTP |   Data Connection      | Server-FTP |
          |    "A"     |<---------------------->|    "B"     |
          -------------- Port (A)      Port (B) --------------
    


Po navázání spojení je potřeba zadat jméno a heslo. To se dělá pomocí příkazů USER a PASS. Jedná-li se o volně přístupný server, používá se jako jméno uživatele "anonymsous" nebo "ftp" a jako heslo se zadává emailová adresa. Tokavý server pak většinou umožňuje procházet pouze veřejnou část svého adresářového podstromu a z důvodu bezpečnosti na sebe zavolá chroot.



ProFTPD

ProFTPD je jeden z FTP serverů pracujících pod UNIXovými OS. Je to free software umožňující jakékoliv manipulace a úpravy. Další jeho výhodou je velmi snadná konfigurace podobná www serveru Apache. Ačkoli je jeho předchůdce WU-FTPD velmi výkonný a kvalitní, nemá ProFTPD tak bohatou historii záplat a updatů. Byl vyvíjen jako patch a nové funkce pro WU-FTP, nakonec se z něj stal samostatný produkt.

Vlastnosti: Konfigurace:
/etc/inetd.conf 

  //add
  ftp   stream  tcp   nowait  root  /usr/sbin/proftpd    in.proftpd
  //end


/etc/proftp.conf 

  //add to end of file
  #Jail the user to the home directory except the admin group
  DefaultRoot     ~ !admin
  //end


Nastavit práva adresářů na 755

  //@ the command line type
  cd /home/ftp
  mkdir incoming
  chmod 777 incoming
  chown ftp:ftp incoming
  //end


/etc/proftpd.conf 

  *under 
  where "X" is the allow attribute 

  Allow Attributes:
  MKD make directories
  RMD remove directories
  STOR Transfer of files
  when dealing in multiple attribes X will be the item with spaces. 
   

  //add
  <Directory incoming>
  Umask 017
  <Limit X*>
  AllowAll
  </Limit>
  </Directory>
  //end


/etc/proftpd.conf 

  //add
  <Anonymous /home/ftp>
  RequireValidShell          off
  User                       ftp
  Group                      ftp
  UserAlias                  anonymous ftp
  MaxClients                 10
  <Directory *>
  <Limit WRITE>
  DenyAll
  </Limit>
  </Directory>
  <Directory incoming>
  Umask  017
  <Limit STOR>
  AllowAll
  </Limit>
  </Directory>
  </Anonymous>
  //end


WU-FTP



Rsync

Rsync je program umožňující přenos dat (ekvivalentní s rcp, avšak s mnoha funkcemi navíc). Je velmi rychlý, protože se přenáejí pouze rozdíly v datech. Pro komunikaci používa rsh nebo ssh. Hodí se pro zálohování a zrcadlení, umožňuje práci s celým adresářovým stromem, zachovává práva, vlastníky a skupiny. Jeden (nebo více) počítač se nastaví jako server - rsync daemon (rsync --daemon na příkazovém řádku) a vytvoří (upraví se) konfigurační soubor /etc/rsyncd.conf Libovolný počet počítačů pak může synchronizovat svá data podle tohoto severu.



Bezpečnost FTP

FTP servery byvají spolu s DNS servery častým cílem útoků. Proto je vhodné sledovat nejnovější patche a nové verze. Doporučení: vyvarovat se adresářům s právem zápisu pro anonymous, hlídat si umask 022, jako prevenci proti DoS útokům nastavit maximum potomků (standalone) / maximum procesů na službu (inetd), používat chroot.


Příkazy serveru FTP:

USER   
PASS   
ACCT   
CWD    
CDUP 
SMNT   
QUIT 
REIN 
PORT   
PASV 
TYPE   
STRU   
MODE   
RETR   
STOR   
STOU 
APPE   
ALLO  
[ R  ] 
REST   
RNFR   
RNTO   
ABOR 
DELE   
RMD    
MKD    
PWD  
LIST [ ] 
NLST [ ] 
SITE   
SYST 
STAT [ ] 
HELP [ ] 
NOOP 


Návratové kódy serveru FTP:

200 Command okay.
500 Syntax error, command unrecognized.
    This may include errors such as command line too long.
501 Syntax error in parameters or arguments.
202 Command not implemented, superfluous at this site.
502 Command not implemented.
503 Bad sequence of commands.
504 Command not implemented for that parameter.
110 Restart marker reply.
    In this case, the text is exact and not left to the
    particular implementation; it must read:
        MARK yyyy = mmmm
    Where yyyy is User-process data stream marker, and mmmm
    server's equivalent marker (note the spaces between markers
    and "=").
211 System status, or system help reply.
212 Directory status.
213 File status.
214 Help message.
    On how to use the server or the meaning of a particular
    non-standard command.  This reply is useful only to the
    human user.
215 NAME system type.
    Where NAME is an official system name from the list in the
    Assigned Numbers document.
       
120 Service ready in nnn minutes.
220 Service ready for new user.
221 Service closing control connection.
    Logged out if appropriate.
421 Service not available, closing control connection.
    This may be a reply to any command if the service knows it
    must shut down.
125 Data connection already open; transfer starting.
225 Data connection open; no transfer in progress.
425 Can't open data connection.
226 Closing data connection.
    Requested file action successful (for example, file
    transfer or file abort).
426 Connection closed; transfer aborted.
227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
         
230 User logged in, proceed.
530 Not logged in.
331 User name okay, need password.
332 Need account for login.
532 Need account for storing files.
150 File status okay; about to open data connection.
250 Requested file action okay, completed.
257 "PATHNAME" created.
350 Requested file action pending further information.
450 Requested file action not taken.
    File unavailable (e.g., file busy).
550 Requested action not taken.
    File unavailable (e.g., file not found, no access).
451 Requested action aborted. Local error in processing.
551 Requested action aborted. Page type unknown.
452 Requested action not taken.
    Insufficient storage space in system.
552 Requested file action aborted.
    Exceeded storage allocation (for current directory or
    dataset).
553 Requested action not taken.
    File name not allowed.

Zdroje

Vše o Protokolu FTP - http://www.w3.org/Protocols/rfc959/Overview.html
proftpd-1.2.0pre8-1.i386.rpm
Rsync home page