Introduzione
Il protocollo FTP (File transfer Protocol) rappresenta una comoda soluzione per trasferire file da un sistema ad un altro attraverso la rete.
Esistono sostanzilmente due tipologie di configurazione del server FTP:
A: Definire siti ad accesso limitato ai soli utenti del sistema. Questa è la configurazione adottata di default sui server FTP. E’ possibile definire controlli in modo da consentire o negare il login.
B: Accesso al server in maniera anonymous. Un server FTP anonimo permette il trasferimento di file a chiunque nella rete, anche a cui non dispone di un account locale su sistema. Questa configurazione è ottimale ma può esser soggetta a rischi per la sicurezza del sistema. http://www.cert.org
In questo tutorial prenderemo in considerazioni il Server FTP wu-ftpd, sicuramente ve ne sono di migliori e più affidabili ma lo scopo di questa guida e scoprire i concetti e i funzionamenti basilari del servizio ftp, non decretare una classifica.
procediamo:
apt-get install wu-ftpd
Il processo di installazioni chiederà alcune impostazioni di default, tra queste:
- la modalità del servizio ftpd
- eventuale accesso anonimo in una cartella (/home/ftp)
- directory di upload dei file da parte di utenti esterni (pub/incoming)
Con questi semplici passi avremo il nostro server ftp attivo.
Eseguendo il test dal sistema stesso inserendo come user anonymous e pwd la propria email avremo:
[02:55][root:/etc/ssh]# ftp 192.168.3.60 Connected to 192.168.3.60. 220 mail.indrelab.cxm FTP server (Version wu-2.6.2(1) Sun Apr 17 09:42:13 UTC 20 05) ready. Name (192.168.3.60:indre): anonymous 331 Guest login ok, send your complete e-mail address as password. Password: 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp>
Eseguendo il test dal sistema inserendo i dati del nostro account sul sistema il demone ftpd ci ubicherà direttamente nella nostra home di default:
[02:57][root:/etc/ssh]# ftp 192.168.3.60 Connected to 192.168.3.60. 220 mail.indrelab.cxm FTP server (Version wu-2.6.2(1) Sun Apr 17 09:42:13 UTC 2$ Name (192.168.3.60:indre): indre 331 Password required for indre. Password: 230 User indre logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 93420 -rw------- 1 indre indre 7376 Oct 15 23:37 .ICEauthority -rw------- 1 indre indre 213 Oct 7 16:28 .Xauthority -rw------- 1 indre indre 1744 Oct 15 14:29 .bash_history
Il servizio FTP viene controllato da /etc/inetd.conf ed è automaticamente richiamato ogni volta che ci si collega alla porta FTP, ovvero la numero 21.
Quando viene rilevata una connessione viene chiamato il demone ftpd e ha inizio la sessione di lavoro. Suggerimento è di impostarlo come demone standalone e non “comandato” da inet, in modo da velocizzare il processo. Come già detto sopra gli utenti si collegano in due modi: in modalità anonima o con utenze di sistema. Nel primo caso gli utenti anonimi vengono collocati nella directory /home/ftp.
Una volta che gli utenti sono entrati nel sistema viene effettuata una chiamata chroot.
Questa chiamata trasforma le dir degli utenti ftp nella loro directory root.
Viene negato l’accesso a qualunque altra directory di sistema comprese /bin /etc e /lib.
Questo comporta il fatto che il server non riuscirà più a “vedere” i file come /etc/passwd, /etc/group e file binari come /bin/ls.
Per ovviare a questo problema il pacchetto di installazione crea delle directory bin, etc e lib sotto /home/ftp in modo da avere a disposizione le librerie e gli strumenti per utilizzare il sistema.
La configurazione del servizio ftpd di default può ritenersi “abbastanza” sicura, ma è meglio agire nei file di configurazione per modificare alcune impostazioni.
In linea di massima i file da editare sono:
- /etc/wu-ftpd/ftpaccess
- /etc/ftpusers
- /etc/wu-ftpd/ftpconversiones
Il file /etc/wu-ftpd/ftpaccess è il cuore per controllare quali e quanti utenti hanno accesso al server. In questo file son presenti comandi di:
- Access: class, autogroup, deny, limit ecc.
- Information: email, banner ecc..
- Logging: syslog, comands, transfers ecc..
- Generic: alias, shutdown ecc..
- Permission: chmod, umask, delete ecc.
Controllo accesso utente
/etc/wu-ftpd/ftpaccess
Class
Definisce una classe di utenti che ha accesso al sistema. E’ possibile definire n classi; ogni classe ha la seguente sintassi:
class nome_classe tipo addressing [.....] class access real 192.168.3.*
In questo esempio abbiamo creato la classe access con accesso di tipo real (utenti presenti sul sistema) e consentito l’accesso solo dalla nostra lan.
Altri tipo di utenze sono: anonymous e guest
Autogroup
Definisce un gruppo specifico per gli utenti connessi in modalità anonymous
autogroup nome_gruppo class nome_classe [.....] autogroup ftponly class ignite
E’ da ricordarsi che il nome_gruppo deve trovarsi nel file /etc/group del sistema.
Deny
Vieta l’accesso a determinati host in base al nome o indirizzo IP.
deny ip/nome_host messaggio deny 192.168.3.58 /home/ftp.message.no.accessftp
[05:39][root:/etc/wu-ftpd]# ftp 192.168.3.60 Connected to 192.168.3.60. 220-Debian Server - HOWTO wu-ftpd per areanetworking 220- 220 mail.indrelab.cxm FTP server (Version wu-2.6.2(1) Sun Apr 17 09:42:13 UTC 2$ Name (192.168.3.60:indre): indre 331 Password required for indre. Password: 530-TUT TUT MI DISPIACE LAMERONE MA NON SEI ABILITATO AD ENTRARE :E 530 Login incorrect. Login failed.
Guestgroup
Consente di restringere i privilegi agli utenti reali durante l’accesso ftp.
guestgroup nome_gruppo [.....] guestgroup ftponly
Ricordarsi che il nome del gruppo DEVE realmente esistere sul sistema.
Con questo procedimento gli utenti real diventano come utenti anonymous.
Questo procedimento è visibile nelle riga del file /etc/passwd del sistema.
sarina:x:1003:1003:,,,:/home/ftp/./home/sarina:/bin/bash
Limit
Setta il numero di utenti che possono collegarsi al sistema via ftp. E’ possibile settare gli orari per i vari accessi real o anonymous.
limit nome_class n orario messaggio limit access 10 MoTuWeThFr0800-1800 /home/ftp.message.too_many.
[05:56][root:/home/ftp/pub]# ftp 192.168.3.60 Connected to 192.168.3.60. 220-Debian Server - HOWTO wu-ftpd per AreaNetworking 220- 220 mail.indrelab.cxm FTP server (Version wu-2.6.2(1) Sun Apr 17 09:42:13 UTC 2$ Name (192.168.3.60:indre): indre 331 Password required for indre. Password: 530-Il numero massimo di connessioni è stato raggiunto, riprova il + tardi poss$ 530 Login incorrect. Login failed.
Il formato dell’orario è in stile militare: i giorni della settimana sono indicati con: Su, Mo, Tu, We, Th, Fr, Sa. mentre l’intera settimana è indicata da Wk.
Le ore e i minuti son scritti consecutivamente senza spazi o sengi di separazione.
In caso di connessioni che eccedono il limite impostato verrà mostrato il messaggio di testo presente in /home/ftp.message.too_many.
Loginfails
E’ il numero di tentativi di login che un utente può effettuare prima di esser disconnesso dal sistema; di default è 5
loginfails n loginfails 3
Private
Consente di condividere file con altri utenti ftp senza doverli mettere in posizioni completamente accessibili. I client ftp usano il comando SITE GROUP e SITE GPASS per passare a gruppi privilegiati che richiedono la password.
private switch private yes
Switch
E’ una stringa che assume valore YES o NO per attivare o disattivare questa funzione.
Questi gruppi ovviamente necessitano di password, si deve impostare nel file /etc/wu-ftpd/ftpgroups e metterlo in relazioni con il gruppo reale sul sistema.
nome_gruppo_accesso:password_encrypted:gruppo_reale gps:$1$SfRBUdJi$cCZ3fb:ftponly
Un comando utile per creare direttamente il file ftpgroup e impostare la correlazione fra gruppo ftp e gruppo reale e relativa password è privatepw esempio:
privatepw -c -f ftpgroup -g gruppo_reale gruppo_ftp
Avvisi FTP
Spesso vengono predisposti al login o al verificarsi di un azione dei messaggi per l’utente connesso o in fase di login in modo da dare alcune info oppure semplicemente un messaggio di benvenuto.
Banner
Permette di visualizzare sullo schermo prima dell’inserimento di login e pwd un messaggio.
banner percorso banner /home/fpt/.banner
[05:37][root:/etc/wu-ftpd]# ftp 192.168.3.60 Connected to 192.168.3.60. 220-Debian Server - HOWTO wu-ftpd per areanetworking 220- 220 mail.indrelab.cxm FTP server (Version wu-2.6.2(1) Sun Apr 17 09:42:13 UTC 2$ Name (192.168.3.60:indre):
Indirizzo email dell’amministratore del server ftp per segnalare problemi, in genere viene visualizzato insieme al banner iniziale.
email indirizzo email [email protected]
Message
Invia messaggi quando gli utenti si collegano o si spostano in directory particolari.
message percorso when {class .....} message /home/fpt/.danger CWD=/home/ftp/CVS message /home/ftp/.welcome login
ftp> cd /home/ftp/CVS/ 250-ATTENZIONE! Area di sviluppo! 250- 250 CWD command successful. Password: 230-Benvenuti! non vi aspettavo cosଠpresto! 230- 230 User indre logged in. Remote system type is UNIX. Using binary mode to transfer files.
When assume o CWD o login, in pratica o quando entra in una dir preimpostata o quando faccio il login.
E’ possibile utilizzare delle variabili di sistema preimpostate come:
%T tempo locale %F spazio disponibile nella dir corrente %C dir di lavoro %E indirizzo email settato in precendeza* %R nome host client %L nome host server %U nome utente al login %M numero max di utenti %N numero attuale utenti connessi per la determinata classe di appartenenza
Benvenuto su %L, %U sei l'utente numero %N di %M. Sono le ore %T. Have a nice time.
e una volta ottenuto il login avremo:
230-Benvenuti su mail.indrelab.cxm, indre. 230-Sei l'utente numero 1 di 2. 230-Sono le ore Fri Oct 21 10:31:43 2005. 230-Have a nice time. 230- 230 User indre logged in. Remote system type is UNIX. Using binary mode to transfer files.
Readme
Stabilisce le condizioni per le quali viene notificato al client che un file di una directory è stato modificato.
readme percorso when class readme /home/ftp/.README CWD=/home/ftp/CVS
percorso è il luogo ove risiede il file per la segnalazione, when ha le stesse impostazioni di message.
ftp> cd old 250-Please read the file /home/ftp/.README 250- it was last modified on Fri Oct 21 10:39:48 2005 - 0 days ago 250 CWD command successful. ftp>
Log
Wuftpd, come ogni altro servizio gestisce il logging, ovvero tiene traccia delle connessioni e delle operazioni effettuate.
E’ possibile avere differenti livelli di logging.
E’ possibile registrare i comandi digitati dagli utenti ftp, ogni comando è inviato al file di log.
log command tipi_di_utenti log command real, anonymous
Ricordarsi che i tipi di utenti sono real, guest e anonymous.
Attenzione di default il demone ftpd, avviato da inet e non come demone standalone, è avviato con l’opzione -l quindi NON logga i comandi digitati dagli utenti.
Per poter permettere ciò è necessario editare il file /etc/inetd.conf e modificare la riga
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/wu-ftpd -l
in
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/wu-ftpd -L
Fare riferimento alla pagina man di wu-ftpd.
Using binary mode to transfer files. ftp> cd work 250 CWD command successful. [11:56][root:/home/ftp/pub]# tail -3 /var/log/messages Oct 21 11:55:15 mail wu-ftpd[4811]: FTP LOGIN FROM 192.168.1.22 [192.168.1.22], indre Oct 21 11:55:15 mail wu-ftpd[4811]: SYST Oct 21 11:55:20 mail wu-ftpd[4811]: CWD work
E’ possibile inoltre registrare i trasferimenti di file sia inbound che outbound.
log tranfers tipi_di_utenti direzioni log tranfers real,anonymous inbound,outbound
Il risultato delle registrazioni è visibile in /var/log/wu-ftpd/xferlog
[11:46][root:/var/log/wu-ftpd]# tail -100 xferlog Fri Oct 21 11:45:35 2005 1 192.168.1.22 5 /home/ftp/test.txt b _ o r indre ftp 0 * c
Comandi server
Esistono altri numerosi comandi da poter utilizzare per ottimizzare il nostro server FTP, tra questi:
Alias
Consente di definire un alias per una directory, in modo da potrevi accedere specificando l’alias al posto del path (genericamente lungo) della directory effettiva.
alias nome_alias path_directory alias work /home/ftp/CVS/lavoro/new
ftp> cd work 250 CWD command successful. ftp> pwd 257 "/home/ftp/CVS/lavoro/new" is current directory. ftp>
Cdpath
Permette di definire un elenco di percorsi alterati. Identico al PATH di UNIX.
cdpath /home/ftp/film cdpath /home/ftp/mp3
Se il client digita cd ball, la dir verrà ricercata in ./ball, eventuali alias, /home/ftp/film, /home/ftp/mp3.
Compress
Consente di comprimere o decomprimere un file prima della trasmissione.
compress switch* class compress yes all
switch assume i valori YES o NO.
E’ necessario configurare il file /etc/ftpconversions in modo che il server sappia quali programmi utilizzano una certa estensione. di default abbiamo /bin/gzip e /bin/compress.
Tar
Simile alla funzione compress.
tar switch* class
tar yes all
switch assume i valori YES o NO.
Anche qui è necessario configurare il file /etc/ftpconversions.
Shutdown
Specifica al server ftp di controllare un file per stabilire se deve effettuare uno shutdown programmato del sistema.
shutdown path shutdown /etc/shutmsg
Questo file viene interrogato dal programma di chiusura di ftpshut per le modalità di chiusura del servizio. Il formato del file è: anno mese giorno ora minuto vieta_connessioni disconnetti testo L’anno è espresso in formato numerico dal 1970 in poi.
- mese da 0 a 11.
- giorno da 0 a 30
- ora da 0 a 23
- minuti da 0 a 59
- vieta_connessioni sta ad indicare l’ora dalla quale il server non accetta più connessioni, indicato nella forma HHMM
- disconnetti indica l’ora dalla quale il server termina le sessioni correnti, indicato nel formato HHMM.
- text è in formato testo e indica il messaggio da visualizzare all’utente, usando se necessario le variabili utilizzate per message.
Questo file viene creato tramite il comando ftpshut.
ftpshut -l 5 -d 3 1155 “il server FTP è in fase di spegnimento”
Il file /etc/shutmsg avrà la seguente sintassi:
2005 09 26 11 55 0005 0003 il server FTP è in fase di spegnimento
Controllo dei permessi
In linea di massima il file /etc/ftpaccess è configurato in questa maniera per quanto riguarda le permission:
tar yes all compress yes all chmod no guest,anonymous delete no guest,anonymous overwrite no guest,anonymous rename no guest,anonymous
Chmod
Stabilisce se un client dispone o meno del permesso di modificare le permission relative ai file.
chmod switch class chmod yes real
Delete
Stabilisce se un client dispone o meno del permesso di cancellare file.
delete switch class delete yes real
ftp> delete .README 553 .README: Permission denied on server. (Delete) ftp>
Overwrite
Stabilisce se un client dispone o meno del permesso di sovrascrivere file esistenti.
overwrite switch class overwrite yes real
ftp> put .README local: :README remote: .README 220 PORT command successful. 553 .README: Permission denied on server. (Overwrite) ftp>
Rename
Stabilisce se un client dispone o meno del permesso di rinominare file.
rename switch class overwrite yes real <pre> <pre> ftp> rename .README .InDrE 350 File exists, ready for destination name 553 .README: Permission denied on server. (Overwrite) ftp>
Umask
Stabilisce se un client dispone o meno del permesso di modificare le proprie permission di default sui file.
umask switch class umask yes real
Passwd-check
Questa opzione consente di determinare un livello di protezione nell’email del collegamento anonimo.
passwd-check option messaggio passwd-check trivial enforce
Come option è possibile settare: strictness, trivial, rrc822:
- strictness significa che non viene eseguito nessun controllo sull’inserimento della password
- trivial significa che la password inserita come email deve almeno contenere il simbolo @
- rfc822 è più restrittivo e specifica che l’indirizzo di posta elettronica sia conforme allo standard RFC822.
Come “messaggio” è possibile settare enforce o warn; warn segnala che non si son rispettate le regole di inserimento ma consente lo stesso l’accesso, enforce vieta l’accesso fino a che non si inserisce una password conforme.
Path-filter
Questa opzione permette di specificare, nel caso di upload da parte di utenti, i nomi di file non accettati dal server.
path-filter class messaggio exp_permessa exp_negata path-filter anonymous,real /home/ftp/.badfile FT* jpg$
La seguente espressione consente di fare upload da parte di utenti real e anonymous solo di file che iniziano con FT o che non terminano con jpg. exp_negata è un comando facoltativo.
Esistono numerose altre opzioni da aggiungere al file ftpaccess, per informazioni dettagliate
Il file /etc/ftphosts
Questo file determina le regole di accesso per singolo utente; è possibile specificare da quale host un utente può loggarsi al nostro server ftp o meno.
allow nome_utente indirizzo allow indre *.areanetworking.it
In questo modo l’utente indre può loggarsi la qualsiasi macchina del dominio areanetworking.it
deny nome_utente indirizzo deny indre 195.10.2.*
In questo modo si impedisce all’utente indre di accedere al server dalla rete 195.10.2.0/24.
Il file /etc/ftpusers
Questo file contiene gli utenti a cui non è consentito l’accesso al server.
Di default nel file avremo utenti tipo root, daemon, nobody, mail, sys.
Questi son già presenti di default in quanto non sono account reali, se si volesse impedire ad un account reale l’accesso ftp basta inserirlo in questo file.