martedì, Dicembre 24, 2024

WU-FTPD: un semplice server ftp

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):

Email

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.

Articoli correlati

Noleggia una Tesla per il tuo evento ICT!

Categorie