vsftpd - Una Introduzione al Demone "Very Secure FTP"

ArticleCategory:

System Administration

AuthorImage:[Ein Bild von Dir]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage

original in de Mario M. Knopf

en to it Davide Lo Vetere

AboutTheAuthor:

Mario si occupa attivamente di Linux, reti di calcolatori e di tematiche legate alla sicurezza informatica. Nel tempo libero cura due pagine web:
neo5k.org e linuxwallpapers.de.

Abstract:

Questo articolo costituisce una introduzione al demone "Very Secure FTP Daemon". Partendo da una descrizione generale del protocollo FTP e di vsftpd si passa alla procedura di installazione, alla configurazione e alle opzioni di base del demone, il tutto per fornire un sistema di test con le funzionalit� di base.

ArticleIllustration:[Das Titelbild des Artikels]

vsftp

ArticleBody:[The main part of the article]

Introduction

Il File Transfer Protocol (FTP) consente il trasferimento dati su internet in modo indipendente dalla piattaforma operativa ed � basato sul paradigma client/server. Nel riferimento ufficiale RFC 959[1] FTP consiste di due canali di comunicazione, uno per il trasporto dati (porta 20/TCP) e l'altro per il controllo (porta 21/TCP). Nel canale di controllo i due attori (server e client) si scambiano i comandi per la inizializzazione della sessione di trasferimento dati
Una sessione FTP si compone di 4 momenti:

FTP utilizza TCP (Transmission Control Protocol) per il trasporto e questo assicura che i dati arrivino al destinatario correttamente e in modo affidabile. Non c'� dunque bisogno che sia FTP a gestire l'eventuale perdita di pacchetti o a verificare la loro integrit�. In altre parole TCP assicura che ogni pacchetto giunga a destinazione senza ripetizioni, integro e nell'ordine corretto.

Nella trasmissione dati si distinguono tre tipi di trasferimento a seconda che la terminazione del flusso sia marcata con un end-of-file (EOF) oppure come end-of-record (EOR).

A questo si aggiungono due modalit� di trasferimento:

La modalit� ASCII � utilizzata nel trasferimento di files di testo, quella binary (binaria) � usata per trasferire programmi e altri tipi di files. L'utente non ha bisogno di selezionare la modalit� di trasferimento dal momento che oramai tutti i client FTP riconoscono il tipo di file e commutano la modalit� di conseguenza.

Essendo le credenziali dell'utente, username e password, non cifrate, � estremamente importante considerare questo aspetto come una falla nella sicurezza di FTP. Questa � la ragione dalla quale hanno avuto inizio gli studi sulla sicurezza di FTP. Nell'ottobre 1997 � stata rilasciata la documentazione di riferimento RFC 2228[2] che ha definito le modifiche di sicurezza per FTP

vsftpd

vsftpd � un server per sistemi operativi unix-like, attualmente � disponibile per Linux, BSD, Solaris, HP-UX e IRIX. Offre una variet� di di opzioni che sono per lo pi� assenti negli altri sever FTP. Le principali sono:

Il nome vsftpd sta per "very secure FTP daemon" e la sicurezza � una delle principali caratteristiche che il suo creatore, Chris Evans, ha voluto curare fin dall'inizio dello sviluppo dell'applicazione.

Un esempio eloquente � che vsftpd � eseguito in modalit� chroot, cio� al programma (in questo caso vsftpd) � assegnata una versione della directory di root "ridotta" e diversa da quella originaria (l). In questo modo il programma non pu� in alcun modo accedere a risorse al di fuori di questa particolare directory a lui assegnata: esso � per cos� dire "confinato" (jailed). Nel caso in cui il server FTP dovesse essere compromesso l'attaccante sarebbe isolato dal resto del sistema limitando cos� i danni alla sola applicazione attaccata. Ulteriori informazioni sulla tecnica di chrooting si possono trovare in [3]. L'articolo [4] � raccomandato a coloro interessati alle specifiche soluzioni di sicurezza adottate in vsftpd

Questa variet� di caratteristiche peculiari - tra le quali spiccano quelle rivolte alla sicurezza - fanno di vsftpd un server considerevolmente pi� evoluto degli omologhi server FTP. WU-FTPD[5] pu� essere qui citato come esempio negativo a causa delle numerose falle di sicurezza rilevate nei passati due anni.

Installazione

L'installazione di vsftpd � semplice dal momento che i pacchetti RPM di vsftpd completi sono reperibili per le principali distribuzioni, addirittura in molti casi � gi� installato. In ogni caso i sorgenti si trovano in [6] per chi vuole effettuare una installazione manuale.

Dopo aver scompattato il tarball, vai alla directory creata ed esegui il make. Ecco i comandi:

neo5k@phobos> tar xzvf vsftpd-x.x.x.tar.gz
neo5k@phobos> cd vsftpd-x.x.x
neo5k@phobos> make

Prima di questo dovresti controllare se l'utente "nobody" e la directory "/usr/share/empty" esistono e se necessario crearli. Se si immagina di garantire l'accesso anonimo deve essere creato un utente "ftp" con la home "/var/ftp". Questo si ottiene con i seguenti comandi:

neo5k@phobos> mkdir /var/ftp
neo5k@phobos> useradd -d /var/ftp ftp

Per motivi di sicurezza la directory "/var/ftp" non deve appartenere all'utente "ftp", n� questo utente deve avere diritto di scrittura in questa directory. Con i due comandi che seguono possiamo cambiare le impostazioni relative alla propriet� e ai privilegi di scrittura di eventuali utenti su questa directory:

neo5k@phobos> chown root.root /var/ftp
neo5k@phobos> chmod og-w /var/ftp

Solo dopo che tutte questi pre-requisiti sono soddisfatti possiamo installare il demone vsftp:

neo5k@phobos> make install

Il manuale e il programma dovrebbero ora essere presenti nelle posizioni corrette. Se cos� non dovesse essere si pu� eseguire una copia manuale.

neo5k@phobos> cp vsftpd /usr/sbin/vsftpd
neo5k@phobos> cp vsftpd.conf.5 /usr/share/man/man5
neo5k@phobos> cp vsftpd.8 /usr/share/man/man8

Dal momento che il nostro file di configurazione esemplificativo non � stato ancora copiato - per rendere questa introduzione pi� semplice - dobbiamo creare manualmente la voce come segue:

neo5k@phobos> cp vsftpd.conf /etc

Configurazione

Il file di configurazione si trova in "/etc/vsftpd.conf". Come accade nella maggior parte dei file di configurazione, i commenti sono segnalati da un particolare carattere, nel nostro caso:

# Comment line

Una configurazione tipo potrebbe essere la seguente:

# Accesso FTP anonimo? YES/NO
anonymous_enable=NO
 
# Upload anonimo? YES/NO
anon_upload_enable=NO
 
# Gli utenti anonimi possono creare directories? YES/NO
anon_mkdir_write_enable=NO
 
# Permesso per gli utenti anonimi di effettuare operazioni di renaming or deleting? YES/NO
anon_other_write_enable=NO
 
# Log on per gli utenti locali? YES/NO
local_enable=YES
 
# Confinamento degli utenti locali alla loro home? YES/NO
chroot_local_user=YES
 
# Massimo transfer rate (in bytes al secondo) per gli utenti locali. Default = 0 (unlimited)
local_max_rate=7200
 
# Permesso di scrittura? YES/NO
write_enable=YES
 
# Abilitazione di messaggi di notifica al cambio directory? YES/NO
dirmessage_enable=YES
 
# Welcome banner (banner di benvenuto) da presentare al logon del sistema.
ftpd_banner="Welcome to neo5k's FTP service."
 
# Abilitare il logging (tracciamento delle operazioni)? YES/NO
xferlog_enable=YES
 
# Logging di tutte le attivit� FTP? YES/NO
# Attenzione! Questo pu� generare grandi quantit� di dati.
log_ftp_protocol=NO
 
# Connessioni solo dati sulla porta 20 (ftp data). YES/NO
connect_from_port_20=YES
 
# Timeout per inattivit� di una sessione
idle_session_timeout=600
 
# Timeout di connessione dati
data_connection_timeout=120
 
# Accesso via PAM (Pluggable Authentication Modules)
pam_service_name=vsftpd
 
# Modalit� operativa standalone? YES/NO - pu� essere di uno dei tipi (inetd, xinetd, Standalone)
# In questo esempio il servizio FTP viene avviato con xinetd, il valore � dunque NO.
listen=NO

Avvio del servizio FTP

vsftpd pu� operare in tre modalit�. Una � attraverso inetd o xinetd, la terza � standalone.

inetd

Se il servizio FTP � avviato con inetd editiamo il file di configurazione "/etc/inetd.conf" con vi, per esempio:

neo5k@phobos> vi /etc/inetd.conf

Cerchiamo le linee che riguardano il servizio FTP e rimuoviamo il commento davanti a vsftpd. Se non c'� tale riga la aggiungiamo. Al termine facciamo ripartire inetd. La voce per l'avvio del servizio con inetd � questa:
# ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   in.ftpd
ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   vsftpd

xinetd

E' preferibile avviare vsftp con xinetd perch� � di concezione pi� recente di inetd. Alcune caratteristiche non presenti in inetd sono, per esempio, il logging delle richieste, il controllo dell'accesso, l'associazione del servizio a una specifica interfaccia di rete e altro ancora. Una eccellente introduzione a xinetd si trova qui [7]. Dopo le modifiche fai ripartire xinetd. La configurazione di xinetd potrebbe essere la seguente:
# vsftp daemon.
service ftp
{
     disable = no
     socket_type = stream
     wait = no
     user = root
     server = /usr/sbin/vsftpd
     per_source = 5
     instances = 200
     no_access = 192.168.1.3
     banner_fail = /etc/vsftpd.busy_banner
     log_on_success += PID HOST DURATION
     log_on_failure += HOST
     nice = 10
}
    

Avvio in modalit� Standalone

Esiste anche la possibilit� di eseguire vsftp in modalit� standalone. Per fare questo editiamo "/etc/vsftpd.conf" come segue:

# Shall the vsftp daemon run in standalone operation? YES/NO
listen=YES

Al termine il demone pu� essere avviato in backgroud come segue

neo5k@phobos> /usr/sbin/vsftpd &

Se il percorso � stato inserito correttamente (cio� fa parte delle variabili d'ambiente condivise dall'utente e dal sistema) il servizio pu� partire anche cos�

neo5k@phobos> vsftpd &

Un breve controllo sulla correttezza della variabile d'ambiente � il seguente:

neo5k@phobos> echo $PATH
/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin

In modalit� standalone dobbiamo, naturalmente, controllare che vsftp non � avviato da inetd o da xinetd.

Test del servizio

Al termine di una corretta installazione e configurazione del server FTP possiamo dunque inaugurarlo col primo avvio.
neo5k@phobos> ftp phobos
Connected to phobos
220 "Welcome to neo5k's FTP service."
Name (phobos:neo5k): testuser
331 Please specify the password.
Password:
230 Login successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -l
229 Entering Extended Passive Mode
150 Here comes the directory listing
drwxr-xr-x      11  500      100        400  May 07 16:22  docs
drwxr-xr-x       9  500      100        464  Feb 01 23:05  hlds
drwxr-xr-x      39  500      100       4168  May 10 09:15  projects
226 Directory send OK.
ftp>

Conclusioni

Come abbiamo avuto modo di osservare vsftp non � difficile da installare e da configurare e offre una ricca variet� di opzioni e di caratteristiche di sicurezza.

Questa introduzione fornisce solo un breve sguardo su quanto offre vsftpd, dal momento che il server FTP presenta una vasta gamma di possibilit� di configurazione. Chi volesse approfondire la conoscenza di vsftpd pu� visitare la home del progetto [6] e accedere alla documentazione completa.

Links

[1] ftp://ftp.rfc-editor.org/in-notes/rfc959.txt [RFC 959 - File Transfer Protocol]
[2] ftp://ftp.rfc-editor.org/in-notes/rfc2228.txt [RFC 2228 - FTP Security Extensions]
[3] linuxfocus.org: article225, January2002 [chroot]
[4] http://vsftpd.beasts.org/DESIGN [Security vsftpd]
[5] http://www.wu-ftpd.org/ [WU-FTPD]
[6] http://www.vsftpd.beasts.org/ [Home of vsftpd]
[7] linuxfocus.org: article 175, November2000 [xinetd]