6 999
contributi
S3v (discussione | contributi) Nessun oggetto della modifica |
S3v (discussione | contributi) (Verificata per Buster) |
||
(26 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Wheezy|Jessie|Buster}} | |||
{{Versioni compatibili}} | |||
== 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 | 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 40: | Riga 39: | ||
;--shell /bin/false:L'utente non avrà una shell di login. | ;--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.<br/>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. | ;--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.<br/>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. | ;--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. | Successivamente verrà chiesta la password di cui l'utente si servirà per l'accesso FTP. | ||
Riga 62: | Riga 61: | ||
=== Creare un gruppo virtuale === | === Creare un gruppo virtuale === | ||
La creazione di un gruppo virtuale non è indispensabile ma risulta comoda per amministrare più agevolmente la configurazione di ProFTPD.<br/> | La creazione di un gruppo virtuale non è indispensabile ma risulta comoda per amministrare più agevolmente la configurazione di ProFTPD.<br/> | ||
Nel successivo esempio | Nel successivo esempio verranno creati due gruppi virtuali: | ||
;ftp-users:Raggrupperà '''tutti''' coloro che avranno accesso al server FTP. | ;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. | ;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: | Nello specifico: | ||
* Tutti apparterranno a "ftp- | * Tutti apparterranno a "ftp-users". | ||
* pippo, pluto e minnie apparterranno anche a "ftp-full". | * pippo, pluto e minnie apparterranno anche a "ftp-full". | ||
* L'utente "ftp" (se creato) non apparterrà ad alcun gruppo. | * L'utente "ftp" (se creato) non apparterrà ad alcun gruppo. | ||
Riga 84: | Riga 83: | ||
;--gid ''GID'':Il [[GID]] del gruppo. Valgono le stesse considerazioni scritte per l'UID. | ;--gid ''GID'':Il [[GID]] del gruppo. Valgono le stesse considerazioni scritte per l'UID. | ||
=== Cancellare un utente o un gruppo virtuale | === Altre operazioni === | ||
;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": | La rimozione di un utente o un gruppo virtuale può essere effettuata utilizzando l'opzione "--delete-user" o "--delete-group": | ||
<pre> | <pre> | ||
# ftpasswd --group --delete-group --name nomedelgruppo --file /etc/proftpd/ftpd.group | # ftpasswd --group --delete-group --name nomedelgruppo --file /etc/proftpd/ftpd.group | ||
# ftpasswd --passwd --delete-user --name | # ftpasswd --passwd --delete-user --name nomeutente --file /etc/proftpd/ftpd.passwd | ||
</pre> | |||
;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.<br/> | |||
Aggiungiamo, ad esempio, ''paperino'' al gruppo ''ftp-users'': | |||
ftp-users:x:3000:pippo,pluto,minnie''',paperino''' | |||
;Bloccare un utente: | |||
Nel caso si voglia bloccare temporaneamente l'accesso al server FTP di un particolare utente: | |||
<pre> | |||
# ftpasswd --passwd -l --name nomeutente --file /etc/proftpd/ftpd.passwd | |||
</pre> | |||
Per sbloccarlo: | |||
<pre> | |||
# ftpasswd --passwd -u --name nomeutente --file /etc/proftpd/ftpd.passwd | |||
</pre> | |||
=== ''ftpd.passw'' e ''ftpd.group'' === | |||
Questi due file appena creati possono essere visualizzati come un normale file di testo per controllare che tutto sia andato come ci si aspetta: | |||
<pre> | |||
# cat /etc/proftpd/ftpd.group | |||
# cat /etc/proftpd/ftpd.passwd | |||
</pre> | |||
È consigliabile, inoltre, nascondere il loro contenuto a tutti fuorché a ''root'': | |||
<pre> | |||
# chmod 660 /etc/proftpd/ftpd.group /etc/proftpd/ftpd.passwd | |||
</pre> | </pre> | ||
Riga 94: | Riga 120: | ||
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> | ||
=== Directory private === | === Directory private === | ||
Per ciascun utente appartenente al gruppo | Per ciascun utente appartenente al gruppo ''ftp-full'' eseguire i comandi: | ||
<pre> | <pre> | ||
# mkdir /home/ftp-share/nomeutente | # mkdir /home/ftp-share/nomeutente | ||
Riga 104: | Riga 133: | ||
# chmod 770 /home/ftp-share/nomeutente | # chmod 770 /home/ftp-share/nomeutente | ||
</pre> | </pre> | ||
Ad esempio, per | Ad esempio, per ''pippo'': | ||
<pre> | <pre> | ||
# mkdir /home/ftp-share/pippo | # mkdir /home/ftp-share/pippo | ||
Riga 110: | Riga 139: | ||
# chmod 770 /home/ftp-share/pippo | # chmod 770 /home/ftp-share/pippo | ||
</pre> | </pre> | ||
e per | e per ''pluto'': | ||
<pre> | <pre> | ||
# mkdir /home/ftp-share/pluto | # mkdir /home/ftp-share/pluto | ||
Riga 121: | Riga 150: | ||
=== 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 | 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 127: | Riga 156: | ||
# chmod 770 /home/ftp-share/Pubblica | # chmod 770 /home/ftp-share/Pubblica | ||
</pre> | </pre> | ||
Notare che i proprietari (utente | Notare che i proprietari (utente:gruppo) della directory sono "ftp:ftp-users" specificati mediante i rispettivi UID/GID (2000:3000). | ||
== Configurazione == | == Configurazione == | ||
Una volta creati gli utenti e i gruppi virtuali, è necessario modificare la configurazione di ProFTPD per | Una volta creati gli utenti e i gruppi virtuali, è necessario modificare la configurazione di ProFTPD per consentirgli l'accesso al server FTP.<br/> | ||
La configurazione avverrà lasciando praticamente inalterato il file <code>/etc/proftpd/proftpd.conf</code> (il file di configurazione principale) e creando file di configurazione separati all'interno della directory <code>/etc/proftpd/conf.d/</code>: questo permetterà di mantenere ordinata la configurazione e renderla più leggibile in futuro. | La configurazione avverrà lasciando praticamente inalterato il file <code>/etc/proftpd/proftpd.conf</code> (il file di configurazione principale) e creando file di configurazione separati all'interno della directory <code>/etc/proftpd/conf.d/</code>: questo permetterà di mantenere ordinata la configurazione e renderla più leggibile in futuro. | ||
Riga 151: | Riga 180: | ||
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. | # Login solo dalla subnet 192.168. | ||
<Limit LOGIN> | <Limit LOGIN> | ||
Order allow,deny | Order allow,deny | ||
Riga 158: | Riga 187: | ||
</Limit> | </Limit> | ||
# Login solo per gli utenti appartenenti al gruppo ftp- | # Login solo per gli utenti appartenenti al gruppo ftp-users | ||
<Limit LOGIN> | <Limit LOGIN> | ||
Order allow,deny | Order allow,deny | ||
Riga 165: | Riga 194: | ||
</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 | La prima direttiva permette l'accesso solo agli indirizzi IP "192.168.x.x" mentre la seconda permette il login solo al gruppo ''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 171: | Riga 200: | ||
Tutte le altre direttive saranno raccolte nel file <code>02Direttive.conf</code> contenente; | Tutte le altre direttive saranno raccolte nel file <code>02Direttive.conf</code> contenente; | ||
<pre> | <pre> | ||
RequireValidShell | RequireValidShell off | ||
DefaultRoot ~ ftp-full | |||
PathDenyFilter \.[^/]*$ | |||
PathAllowFilter [[:print:]] | |||
AllowFilter "^[a-zA-Z0-9 ,]*$" | |||
</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 | ;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). | ||
;PathDenyFilter \.[^/]*$: Impedisce l'invio di file che iniziano con un punto. | |||
;PathAllowFilter <nowiki>[[:print:]]</nowiki>: Permette solo di specificare caratteri stampabili per file/directory. | |||
;AllowFilter "^[a-zA-Z0-9 ,]*$": Consente comandi FTP che contengono esclusivamente caratteri alfanumerici, lo spazio o la virgola. | |||
== Test di funzionamento == | |||
Riavviare il server FTP: | |||
<pre> | |||
# service proftpd restart | |||
</pre> | |||
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.<br/> | |||
Per raggiungere questo obiettivo sarà necessario innanzitutto creare un utente (il povero ''paperino'') ad accesso limitato e confinarlo nella directory pubblica <code>/home/ftp-share/Pubblica/</code>: | |||
<pre> | |||
# ftpasswd --passwd --home /home/ftp-share/Pubblica/ --name paperino --shell /bin/false --uid 4000 --file /etc/proftpd/ftpd.passwd | |||
</pre> | |||
Creare un gruppo virtuale per raggruppare questo tipo di utenti. Chiamiamolo ''ftp-downonly'' e aggiungiamoci ''paperino'': | |||
<pre> | |||
# ftpasswd --group --name ftp-downonly --file /etc/proftpd/ftpd.group -m paperino --gid 4000 | |||
</pre> | |||
Bisognerà aggiungere ''paperino'' anche al gruppo ''ftp-users'' (come spiegato [[#Altre operazioni|nel paragrafo precedente (Aggiungere un utente a un gruppo)]]) per permettergli un accesso FTP al server. | |||
Successivamente è necessario modificare il file ''02Direttive.conf'' aggiungendo la riga: | |||
<pre> | |||
DefaultRoot ~ ftp-downonly | |||
</pre> | |||
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.conf'' in cui inseriremo: | |||
<pre> | |||
<Directory /home/ftp-share/Pubblica> | |||
<Limit WRITE> | |||
DenyGroup ftp-downonly | |||
</Limit> | |||
</Directory> | |||
</pre> | |||
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: | |||
<pre> | |||
# service proftpd restart | |||
</pre> | |||
== Quote == | |||
L'attivazione delle quote potrebbe rivelarsi indispensabile per limitare lo spazio utilizzabile da ciascun utente per conservare i propri file sul server; infatti di default, non c'è nessun limite ai byte o ai file che è possibile inviare al server FTP.<br/> | |||
Nel caso in cui l'amministratore del server abbia già implementato le quote sul filesystem (quindi *non* le quote di ProFTPD), questa configurazione andrebbe bypassata oppure, per non incorrere in problemi, si dovrebbe evitare la creazione di utenti virtuali con lo stesso UID. | |||
Leggere anche la guida [[Installare un server FTP con ProFTPD]] per maggiori informazioni sulla gestione delle quote e le pagine di documentazione lì riportate. | |||
=== Le tabelle === | |||
Prima di tutto è indispensabile creare le due tabelle necessarie a ProFTPD: | |||
<pre> | |||
# ftpquota --create-table --table-path /etc/proftpd/ftpquota.limittab --type=limit | |||
# ftpquota --create-table --table-path /etc/proftpd/ftpquota.tallytab --type=tally | |||
</pre> | |||
Quindi è il momento di decidere che tipo di quote assegnare e a quali utenti. In questo caso si assegnerà ad ogni utente un limite di 60 MB per i byte inviati (upload): | |||
<pre> | |||
# ftpquota --add-record --type limit --limit-type hard --quota-type user --name pippo --bytes-upload 60 --units Mb --table-path /etc/proftpd/ftpquota.limittab | |||
# ftpquota --add-record --type limit --limit-type hard --quota-type user --name pluto --bytes-upload 60 --units Mb --table-path /etc/proftpd/ftpquota.limittab | |||
# ftpquota --add-record --type limit --limit-type hard --quota-type user --name minnie --bytes-upload 60 --units Mb --table-path /etc/proftpd/ftpquota.limittab | |||
</pre> | |||
Si possono vedere gli effetti del comando precedente con: | |||
<pre> | |||
# ftpquota --show-records --type limit --units Mb --table-path /etc/proftpd/ftpquota.limittab | |||
</pre> | |||
che visualizzerà: | |||
<pre> | |||
------------------------------------------- | |||
Name: pippo | |||
Quota Type: User | |||
Per Session: False | |||
Limit Type: Hard | |||
Uploaded Mb: 60.00 | |||
Downloaded Mb: unlimited | |||
Transferred Mb: unlimited | |||
Uploaded files: unlimited | |||
Downloaded files: unlimited | |||
Transferred files: unlimited | |||
------------------------------------------- | |||
Name: pluto | |||
Quota Type: User | |||
Per Session: False | |||
Limit Type: Hard | |||
Uploaded Mb: 60.00 | |||
Downloaded Mb: unlimited | |||
Transferred Mb: unlimited | |||
Uploaded files: unlimited | |||
Downloaded files: unlimited | |||
Transferred files: unlimited | |||
------------------------------------------- | |||
Name: minnie | |||
Quota Type: User | |||
Per Session: False | |||
Limit Type: Hard | |||
Uploaded Mb: 60.00 | |||
Downloaded Mb: unlimited | |||
Transferred Mb: unlimited | |||
Uploaded files: unlimited | |||
Downloaded files: unlimited | |||
Transferred files: unlimited | |||
</pre> | |||
Il contenuto di <code>ftpquota.tallytab</code> può essere mostrato in modo simile: | |||
<pre> | |||
# ftpquota --show-records --type tally --units Mb --table-path /etc/proftpd/ftpquota.tallytab | |||
ftpquota: (empty table) | |||
</pre> | |||
=== Direttive === | |||
Assicurasi che nel file <code>proftpd.conf</code> ci siano: | |||
<pre> | |||
<IfModule mod_quotatab.c> | |||
QuotaEngine on | |||
</IfModule> | |||
</pre> | |||
e poi creare il file <code>/etc/proftpd/conf.d/04Quota.conf</code> con: | |||
<pre> | |||
QuotaLimitTable file:/etc/proftpd/ftpquota.limittab | |||
QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab | |||
QuotaDisplayUnits Mb | |||
</pre> | |||
Riavviare ProFTPD: | |||
<pre> | |||
# service proftpd restart | |||
</pre> | |||
=== Test === | |||
Da un client proviamo a inviare qualche file al server FTP utilizzando, ad esempio, l'utente ''pippo'' e poi controlliamo la tabella "ftpquota.tallytab": | |||
<pre> | |||
# ftpquota --show-records --type tally --units Mb --table-path /etc/proftpd/ftpquota.tallytab | |||
------------------------------------------- | |||
Name: pippo | |||
Quota Type: User | |||
Uploaded Mb: 1.61 | |||
Downloaded Mb: unlimited | |||
Transferred Mb: unlimited | |||
Uploaded files: 0 | |||
Downloaded files: 0 | |||
Transferred files: 0 | |||
</pre> | |||
Il comando mostra i byte inviati da ciascun utente (in questo caso solo ''pippo'' ha, per ora, inviato dati). | |||
È utile sapere che anche il client può conoscere i byte inviati eseguendo il comando "site quota": | |||
<pre> | |||
ftp>site quota | |||
200-La quota corrente per questa sessione è [corrente/limite] | |||
200-Nome: pippo | |||
200-Tipo Quota: Utente | |||
200-Tipo Limite: Hard | |||
200- Inviato Mb: 1.61/60.00 | |||
200- Scaricato Mb: illimitato | |||
200- Trasferito Mb: illimitato | |||
200- Inviato file: illimitato | |||
200- Scaricato file: illimitato | |||
200- Trasferito file: illimitato | |||
</pre> | |||
Proviamo anche a cancellare qualche file e rieseguiamo il controllo della quota disponibile per assicurarci che lo spazio utilizzato venga decrementato correttamente: | |||
ftp>delete filevecchio | |||
250 comando DELE eseguito con successo | |||
ftp>site quota | |||
200-La quota corrente per questa sessione è [corrente/limite] | |||
200-Nome: pippo | |||
200-Tipo Quota: Utente | |||
200-Tipo Limite: Hard | |||
200- Inviato Mb: <span style="color:red">'''1.03'''</span>/60.00 | |||
200- Scaricato Mb: illimitato | |||
200- Trasferito Mb: illimitato | |||
200- Inviato file: illimitato | |||
200- Scaricato file: illimitato | |||
200- Trasferito file: illimitato | |||
=== Rimuovere le quote === | |||
* Cancellare le tabelle <code>ftpquota.limittab</code> e <code>ftpquota.tallytab</code> | |||
* Cancellare il file <code>04Quota.conf</code> | |||
* Disabilitare la gestione delle quote con "QuotaEngine off" in <code>proftpd.conf</code> | |||
== Eliminare la configurazione == | |||
Per eliminare la configurazione ottenuta leggendo questa guida e ritornare ad un server ProFTPD con configurazione iniziale, si può procedere facilmente sfruttando il fatto che le modifiche hanno toccato poco o nulla il file principale ''proftpd.conf'': | |||
* Cancellare i file creati in ''/etc/proftpd/conf.d/'' | |||
* Cancellare il file ''/etc/proftpd/ftpd.group'' | |||
* Cancellare il file ''/etc/proftpd/ftpd.passwd'' | |||
* Rimuovere le modifiche eventualemten eseguite in ''/etc/proftpd/proftpd.conf'' | |||
* Riavviare ProFTPD:<pre># service proftpd restart</pre> | |||
== Guide correlate == | |||
[[Installare un server FTP con ProFTPD]]<br/> | |||
[[Installare un server FTP con utenti virtuali su MySQL]] | |||
{{Autori | |||
| Autore=[[Utente:S3v|S3v]] 14:03, 31 dic 2014 (CET) | |||
}} | |||
[[Categoria:FTP server]] |
contributi