Server FTP di rete con ProFTPD e utenti virtuali: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(Utenti ad accesso limitato)
Nessun oggetto della modifica
Riga 2: Riga 2:
== Introduzione ==
== Introduzione ==
In questa guida verrà spiegata la l'installazione e la configurazione di un server FTP all'interno della propria LAN utilizzando ProFTPD.<br/>
In questa guida verrà spiegata la l'installazione e la configurazione di un server FTP all'interno della propria LAN utilizzando ProFTPD.<br/>
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).<br/>
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 deve creare un utente (con relativa home directory).<br/>
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.
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.


Riga 98: Riga 98:
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:
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:
<pre>
<pre>
$ ls -l /home
...
...
drwxr-xr-x  4 root  root  4096 dic 30 22:01 ftp-share
drwxr-xr-x  4 root  root  4096 dic 30 22:01 ftp-share
</pre>
</pre>
Riga 125: Riga 128:
=== Directory pubblica ===
=== Directory pubblica ===
Avere tutte directory private può già essere considerata una situazione ragionevole in molti contesti ma, più in generale, è auspicabile che esista una directory pubblica per condividere dati tra diversi utenti.<br/>
Avere tutte directory private può già essere considerata una situazione ragionevole in molti contesti ma, più in generale, è auspicabile che esista una directory pubblica per condividere dati tra diversi utenti.<br/>
Creeremo, quindi, una directory in cui tutti potranno inviare o prelavare dati attraverso FTP: la chiameremo <code>Pubblica</code> e si troverà all'interno di <code>/home/ftp-share/</code>.
Creeremo, quindi, una directory in cui tutti potranno inviare o prelevare dati attraverso FTP: la chiameremo <code>Pubblica</code> e si troverà all'interno di <code>/home/ftp-share/</code>.
<pre>
<pre>
# mkdir /home/ftp-share/Pubblica
# mkdir /home/ftp-share/Pubblica
Riga 155: Riga 158:
Il secondo file conterrà le direttive per consentire (o negare) il login al server FTP. Creiamo il file <code>01Login.conf</code> contenente:
Il secondo file conterrà le direttive per consentire (o negare) il login al server FTP. Creiamo il file <code>01Login.conf</code> contenente:
<pre>
<pre>
# Login solo dalla subnet 192.168.x.x
# Login solo dalla subnet 192.168.
<Limit LOGIN>
<Limit LOGIN>
   Order allow,deny
   Order allow,deny
Riga 169: Riga 172:
</Limit>
</Limit>
</pre>
</pre>
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.<br/>
La prima direttiva permette l'accesso solo agli indirizzi IP "192.168.x.x" mentre la seconda permette il login solo al grupp ''ftp-users''. Un client che non soddisfa entrambe le condizioni non ha accesso al server FTP.<br/>
Chiaramente adattate questa configurazione al vostro caso.
Chiaramente adattate questa configurazione al vostro caso.


Riga 180: Riga 183:
</pre>
</pre>
;RequireValidShell:Necessaria per consentire il login senza possedere una [[shell]] valida (è stata impostata a "/bin/false").
;RequireValidShell:Necessaria per consentire il login senza possedere una [[shell]] valida (è stata impostata a "/bin/false").
;DefaultRoot ~ ftp-full:La home directory di chi appartiene al gruppo "ftp-full"; di default abbiamo scelto all'inizio che sia <code>/home/ftp-share</code> (home directory durante la creazione dell'utente).
;DefaultRoot ~ ftp-full:La home directory di chi appartiene al gruppo ''ftp-full''; di default abbiamo scelto all'inizio che sia <code>/home/ftp-share</code> (home directory durante la creazione dell'utente).


== Test di funzionamento ==
== Test di funzionamento ==
Riga 187: Riga 190:
# service proftpd restart
# service proftpd restart
</pre>
</pre>
e connettersi con il proprioclient FTP preferito specificando l'indirizzo IP del server, il proprio username e la password.
e connettersi con il proprio client FTP preferito specificando l'indirizzo IP del server, il proprio username e la password.


== Utenti ad accesso limitato ==
== Utenti ad accesso limitato ==
Riga 195: Riga 198:
# ftpasswd --passwd --home /home/ftp-share/Pubblica/ --name paperino --shell /bin/false --uid 4000
# ftpasswd --passwd --home /home/ftp-share/Pubblica/ --name paperino --shell /bin/false --uid 4000
</pre>
</pre>
Creare un gruppo per raggruppare questo tipo di utenti. Chiamiamolo ''ftp-downonly" e aggiungiamoci ''paperino'':
Creare un gruppo virtuale per raggruppare questo tipo di utenti. Chiamiamolo ''ftp-downonly" e aggiungiamoci ''paperino'':
<pre>
<pre>
# ftpasswd --group --name downonly --file /etc/proftpd/ftpd.group -m paperino --gid 4000
# ftpasswd --group --name downonly --file /etc/proftpd/ftpd.group -m paperino --gid 4000
Riga 201: Riga 204:
Bisognerà aggiungere ''paperino'' anche al gruppo ''ftp-users'' (come spiegato nel paragrafo[[#Aggiungere un utente a un gruppo]]) per consentirgli un accesso FTP al server.
Bisognerà aggiungere ''paperino'' anche al gruppo ''ftp-users'' (come spiegato nel paragrafo[[#Aggiungere un utente a un gruppo]]) per consentirgli un accesso FTP al server.


Successivamente bisogna modificare il file ''02Direttive.conf" aggiungendo la riga:
Successivamente è necessario modificare il file ''02Direttive.conf" aggiungendo la riga:
<pre>
<pre>
DefaultRoot    ~      ftp-downonly
DefaultRoot    ~      ftp-downonly

Versione delle 14:05, 31 dic 2014

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

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 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.
--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 2002 --file /etc/proftpd/ftpd.passwd
# ftpasswd --passwd --home /home/ftp-share --name minnie --shell /bin/false --uid 2003 --file /etc/proftpd/ftpd.passwd

le uniche modifiche riguardano esclusivamente il nome e l'UID, tutto il resto va lasciato inalterato.

Se si vuole una directory pubblica per condividerne il contenuto, è consigliato creare un ulteriore utente "ftp":

# ftpasswd --passwd --home /home/ftp-share --name ftp --shell /bin/false --uid 2000 --file /etc/proftpd/ftpd.passwd

L'utente "ftp" appena creato ha il solo scopo di assumere la proprietà della directory pubblica e, avendo UID pari a 2000, non ha niente a che vedere con l'utente "ftp" di sistema con UID uguale a 119 e utilizzato da ProFTPD per l'accesso anonimo.
La vita dell'"ftp" creato è limitata al solo file ftpd.passwd da cui ProFTPD ricava le informazioni d'accesso.

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à creati due gruppi virtuali:

ftp-users
Raggrupperà tutti coloro che avranno accesso al server FTP.
ftp-full
Raggruppa gli utenti con accesso FTP, con la possibilità di avere una propria directory sul server e di avere accesso completo alla directory pubblica.

Nello specifico:

  • Tutti apparterranno a "ftp-users".
  • pippo, pluto e minnie apparterranno anche a "ftp-full".
  • L'utente "ftp" (se creato) non apparterrà ad alcun gruppo.

Creiamo i gruppi virtuali:

# ftpasswd --group --file /etc/proftpd/ftpd.group --name ftp-users -m pippo -m pluto -m minnie --gid 3000
# ftpasswd --group --file /etc/proftpd/ftpd.group --name ftp-full -m pippo -m pluto -m minnie --gid 3001

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

Aggiungere un utente a un gruppo

Per aggiungere un utente a un gruppo già esistente bisogna modificare il file ftpd.group. I diversi utenti appartenenti al gruppo sono separati da una virgola.
Aggiungiamo, ad esempio, paperino al gruppo ftp-users:

ftp-users:x:3000:pippo,pluto,minnie,paperino

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:

$ ls -l /home
...
...
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

e per "pluto":

# mkdir /home/ftp-share/pluto
# chown 2002:2002 /home/ftp-share/pluto
# chmod 770 /home/ftp-share/pluto

Praticamente le uniche modifiche riguardano il nome della directory e l'UID.
Il risultato sarà creare directory accessibili solo dal proprietario. Tutti gli altri (ovviamente escluso "root") non potranno accedervi.

Directory pubblica

Avere tutte directory private può già essere considerata una situazione ragionevole in molti contesti ma, più in generale, è auspicabile che esista una directory pubblica per condividere dati tra diversi utenti.
Creeremo, quindi, una directory in cui tutti potranno inviare o prelevare dati attraverso FTP: la chiameremo Pubblica e si troverà all'interno di /home/ftp-share/.

# mkdir /home/ftp-share/Pubblica
# chown 2000:3000 /home/ftp-share/Pubblica
# chmod 770 /home/ftp-share/Pubblica

Notare che i proprietari (utente:gruppo) della directory sono "ftp:ftp-users" specificati mediante i rispettivi UID/GID (2000:3000).

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.
<Limit LOGIN>
  Order allow,deny
  Allow 192.168.0.0/16
  DenyAll
</Limit>

# Login solo per gli utenti appartenenti al gruppo ftp-users
<Limit LOGIN>
 Order allow,deny
 AllowGroup ftp-users
 DenyAll
</Limit>

La prima direttiva permette l'accesso solo agli indirizzi IP "192.168.x.x" mentre la seconda permette il login solo al grupp ftp-users. 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-full
RequireValidShell
Necessaria per consentire il login senza possedere una shell valida (è stata impostata a "/bin/false").
DefaultRoot ~ ftp-full
La home directory di chi appartiene al gruppo ftp-full; di default abbiamo scelto all'inizio che sia /home/ftp-share (home directory durante la creazione dell'utente).

Test di funzionamento

Riavviare il server FTP:

# service proftpd restart

e connettersi con il proprio client FTP preferito specificando l'indirizzo IP del server, il proprio username e la password.

Utenti ad accesso limitato

In alcuni casi potrebbe risultare utile fornire, solo a determinati utenti, l'accesso alla directory pubblica esclusivamente per prelevare dati.
Per raggiungere questo obiettivo sarà necessario innanzitutto creare un utente (il povero "paperino") ad accesso limitato e confinarlo nella directory pubblica /home/ftp-share/Pubblica/:

# ftpasswd --passwd --home /home/ftp-share/Pubblica/ --name paperino --shell /bin/false --uid 4000

Creare un gruppo virtuale per raggruppare questo tipo di utenti. Chiamiamolo ftp-downonly" e aggiungiamoci paperino:

# ftpasswd --group --name downonly --file /etc/proftpd/ftpd.group -m paperino --gid 4000

Bisognerà aggiungere paperino anche al gruppo ftp-users (come spiegato nel paragrafo#Aggiungere un utente a un gruppo) per consentirgli un accesso FTP al server.

Successivamente è necessario modificare il file 02Direttive.conf" aggiungendo la riga:

DefaultRoot     ~       ftp-downonly

Si nota ancora come la directory FTP in cui sono confinati gli utenti del gruppo ftp-downonly è la home specificata durante la creazione dell'utente (nel nostro caso è /home/ftp-share/Pubblica/ .

Ultimo passo è la creazione del file /etc/proftpd/conf.d/03Directory in cui inseriremo:

<Directory /home/ftp-share/Pubblica>
  <Limit WRITE>
    DenyGroup ftp-downonly
  </Limit>
</Directory>

con cui si impedisce a tutti coloro che fanno parte del gruppo ftp-downonly di scrivere nella directory o di modificare/eliminare file.

Riavviare infine il server FTP:

# service proftpd restart

Guide correlate

Installare un server FTP con ProFTPD
Installare un server FTP con utenti virtuali su MySQL




Guida scritta da: S3v 14:03, 31 dic 2014 (CET) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized