Server FTP di rete con ProFTPD e utenti virtuali
Versioni Compatibili Tutte le versioni supportate di Debian |
Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.
Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template. |
Introduzione
In questa guida verrà spiegata la l'installazione e la configurazione di un server FTP all'interno della propria LAN utilizzando ProFTPD.
L'installazione di ProFTPD porta, di default, ad una autenticazione degli accessi basata sui file "/etc/passwd" e "/etc/group" presenti sul server. Questo significa che, per avere accesso al server FTP. l'amministratore del server deve creare un utente (con relativa home directory).
Questo approccio è, tipicamente, valido nel caso in cui gli accessi al server siano pochi e l'amministratore non debba preoccuparsi più di troppo di ciò che hanno in mente di fare gli utenti e dello spazio occupato da ciascuna home directory. All'aumentare delle utenze, però, i rischi legati alla sicurezza aumentano e serve trovare una strada più comoda per amministrare facilmente gli accessi.
Premesso questo, per la procedura spiegata nei paragrafi seguenti si assumerà che:
- Gli indirizzi della propria rete siano del tipo 192.168.X.X .
- L'autenticazione avvenga esclusivamente attraverso utenti/gruppi virtuali.
Installazione
Per installare ProFTPD:
# apt-get install proftpd-basic
Operazioni preliminari
Prima di cominciare con la modifica dei file di configurazione di ProFTPD, bisogna scegliere la directory che conterrà le sotto-directory in cui ciascun utente potrà inviare/scaricare i propri file. In questa guida si prenderà come esempio la directory "/home/ftp-share". Creiamola:
# mkdir -p /home/ftp-share
Questa sarà anche la home directory degli utenti, ossia la directory in cui sono confinati durante la sessione FTP.
Utenti e gruppi virtuali
Gli utenti e gruppi virtuali non sono altro che normali utenti (o gruppi) con un proprio UID (o GID) ma con un'importante differenza rispetto agli "utenti canonici": la loro autenticazione è valida solo per ProFTPD.
Questo si ottiene separando completamente i file contenenti le credenziali di autenticazione per utenti/gruppi: il sistema utilizzerà i classici "/etc/passwd" e "/etc/group", ProFTPD creerà dei propri file e si baserà su questi ultimi per autenticare gli accessi.
La creazione di utenti/gruppi virtuali si ottiene attraverso il comando "ftpasswd".
Creare un utente virtuale
Iniziamo a creare gli utenti virtuali che avranno accesso al server FTP:
# ftpasswd --passwd --home /home/ftp-share --name pippo --shell /bin/false --uid 2001 --file /etc/proftpd/ftpd.passwd
Il precedente comando accetta diverse opzioni:
- --passwd
- Necessario affinché "ftpasswd" crei un utente virtuale.
- --home path_directory
- È la home directory dell'utente in cui gli sarà possibile accedere tramite FTP.
- --name nome
- Opzione necessaria per assegnare un nome all'utente virtuale.
- --shell /bin/false
- L'utente non avrà una shell di login.
- --uid UID
- Numero che rappresenta l'UID per l'utente virtuale. Importante notare che è attraverso l'UID che ProFTPD identifica un utente e non attraverso il suo nome. Questo porta alla naturale conclusione che è possibile creare utenti virtuali che hanno lo stesso nome degli utenti reali (se presenti) con possibilità di login sul server.
La scelta dell'UID non ha particolari limitazioni ma è fortemente consigliato evitare UID pari a 0 o UID uguale a quello di utenti reali (presenti in "etc/passwd"); è invece possibile avere utenti virtuali con lo stesso UID (sarà questa la strada che verrà seguita). - --file /etc/proftpd/ftpd.passwd
- Il percorso e il nome del file che conterrà le informazioni per ciascun utente virtuale.
Successivamente verrà chiesta la password di cui l'utente si servirà per l'accesso FTP.
Il precedente comando va impartito per ciascun utente. Ad esempio:
# ftpasswd --passwd --home /home/ftp-share --name pluto --shell /bin/false --uid 2001 --file /etc/proftpd/ftpd.passwd # ftpasswd --passwd --home /home/ftp-share --name minnie --shell /bin/false --uid 2001 --file /etc/proftpd/ftpd.passwd
l'unica modifica riguarda esclusivamente il nome, tutto il resto va lasciato inalterato.
Creare un gruppo virtuale
La creazione di un gruppo virtuale non è indispensabile ma risulta comoda per amministrare più agevolmente la configurazione di ProFTPD.
Nel successivo esempio verrà creato il seguente gruppo virtuale:
- ftp-virtuali
- raggruppa gli utenti con accesso FTP e con la possibilità di avere una propria directory sul server.
Nello specifico:
- pippo, pluto e minnie apparterranno a "ftp-virtuali"
Creiamo il gruppo virtuale:
# ftpasswd --group --file /etc/proftpd/ftpd.group --name ftp-virtuali -m pippo -m pluto -m minnie --gid 3000
Le opzioni utilizzate:
- --group
- Necessario affinché ProFTPD crei un gruppo virtuale.
- --file /etc/proftpd/ftpd.group
- Il percorso e il nome del file che conterrà le informazioni per ciascun gruppo virtuale.
- --name nome
- Il nome del gruppo.
- -m nomeutente
- Assegna al gruppo gli utenti specificati. L'opzione "-m" può essere utilizzata più volte.
- --gid GID
- Il GID del gruppo. Valgono le stesse considerazioni scritte per l'UID.
Cancellare un utente o un gruppo virtuale
La rimozione di un utente o un gruppo virtuale può essere effettuata utilizzando l'opzione "--delete-user" o "--delete-group":
# ftpasswd --group --delete-group --name nomedelgruppo --file /etc/proftpd/ftpd.group # ftpasswd --passwd --delete-user --name nomedutente --file /etc/proftpd/ftpd.passwd
Creare le directory
Il passo successivo consiste nel creare le directory personali di ciascun utente in quanto la directory home è stata creata da root e non ha permessi di scrittura per utenti diversi. Infatti:
drwxr-xr-x 4 root root 4096 dic 30 22:01 ftp-share
Directory private
Per ciascun utente appartenente al gruppo "ftp-virtuali" eseguire i comandi:
# mkdir /home/ftp-share/nomeutente # chown UID:GID /home/ftp-share/nomeutente # chmod 770 /home/ftp-share/nomeutente
Ad esempio, per "pippo":
# mkdir /home/ftp-share/pippo # chown 2001:2001 /home/ftp-share/pippo # chmod 770 /home/ftp-share/pippo
L'unica parte da cambiare per i restanti utenti è il nome della directory.
Il risultato sarà creare directory accessibili solo dal proprietario. Tutti gli altri (ovviamente escluso "root") non potranno accedervi.
Directory pubblica
TODO
Configurazione
Una volta creati gli utenti e i gruppi virtuali, è necessario modificare la configurazione di ProFTPD per consentirne l'accesso al server FTP.
La configurazione avverrà lasciando praticamente inalterato il file /etc/proftpd/proftpd.conf
(il file di configurazione principale) e creando file di configurazione separati all'interno della directory /etc/proftpd/conf.d/
: questo permetterà di mantenere ordinata la configurazione e renderla più leggibile in futuro.
Autenticazione
Il primo file da creare conterrà le direttive per permettere l'autenticazione mediante utenti/gruppi virtuali. Creiamo il file /etc/proftpd/conf.d/00Autenticazione.conf
e inseriamo al suo interno:
# Autenticazione permessa solo per utenti/gruppi virtuali AuthOrder mod_auth_file.c # Percorso dei file che contengono utenti/gruppi virtuali AuthGroupFile /etc/proftpd/ftpd.group AuthUserFile /etc/proftpd/ftpd.passwd
La spiegazione è abbastanza semplice:
- AuthOrder mod_auth_file.c
- Carica il modulo "mod_auth_file.c" in modo da permettere l'autenticazione solo per utenti virtuali.
- AuthGroupFile /etc/proftpd/ftpd.group
- Percorso e nome del file contenente i gruppi virtuali.
- AuthUserFile /etc/proftpd/ftpd.passwd
- Percorso e nome del file contenente gli utenti virtuali.
Login
Il secondo file conterrà le direttive per consentire (o negare) il login al server FTP. Creiamo il file 01Login.conf
contenente:
# Login solo dalla subnet 192.168.x.x <Limit LOGIN> Order allow,deny Allow 192.168.0.0/16 DenyAll </Limit> # Login solo per gli utenti appartenenti al gruppo ftp-utenti <Limit LOGIN> Order allow,deny AllowGroup ftp-virtuali DenyAll </Limit>
La prima direttiva permette l'accesso solo agli indirizzi IP "192.168.x.x" mentre la seconda permette il login solo al gruppi "ftp-virtuali". Un client che non soddisfa entrambe le condizioni non ha accesso al server FTP.
Chiaramente adattate questa configurazione al vostro caso.
Direttive
Tutte le altre direttive saranno raccolte nel file 02Direttive.conf
contenente;
RequireValidShell off DefaultRoot ~ ftp-virtuali
- RequireValidShell
- Necessaria per consentire il login senza possedere una shell valida (è stata impostata a "/bin/false").
- DefaultRoot ~ ftp-virtuali
- La home directory di chi appartiene al gruppo "ftp-virtuali"