Nell'articolo "Configurare un server FTP con Windows: La Grande Guida a FileZilla Server" abbiamo visto come accettare connessioni FTP sul PC Windows e scambiare così file tramite un client FTP. Nel corso della presente guida, vedremo come raggiungere un risultato analogo da una postazione Linux. La trattazione è incentrata principalmente su CentOS, ma dovrebbe essere adatta, con differenze minime, anche ad Ubuntu ed a tutte le altre distribuzioni.
Pure-FTPd
Le soluzioni software che consentono di predisporre server FTP su Linux sono moltissime, ma la mia prima scelta è Pure-FTPd. Le motivazioni sono diverse: il fatto che sia molto facile da configurare, naturalmente, ma anche la spiccata attenzione alla sicurezza.
Inoltre, Pure-FTPd ha il vantaggio della licenza BSD (open source), grazie alla quale è liberamente utilizzabile anche in ambienti professionali in modo completamente gratuito.
Prima di cominciare..
Per svolgere questa procedura sono necessari i privilegi di root: per non incappare in inutili problemi, raccomando di accedere direttamente con questo account (i più intraprendenti possono usare un account "regolare" e far precedere i comandi da sudo
, ma non ho testato questo scenario).
Aprite quindi un'istanza di terminale (seguite il menu Applications -> Accessories -> Terminal
se vi trovate in ambiente grafico) e assicuratevi che l'interfaccia di rete sia abilitata e la macchina possa accedere ad Internet. Per impostazione predefinita, infatti, così non è.
Pure-FTPd è disponibile presso il repository Extra Packages for Enterprise Linux (EPEL). Se già non l'avete fatto, abilitatelo ora.
Installare Pure-FTPd
Per installare il pacchetto vero e proprio basta impartire yum install pure-ftpd -y
.
Torna poi molto comodo avere a disposizione anche il client FTP a riga di comando: installatelo con yum install ftp -y
.
Dobbiamo quindi far sì che il server FTP parta automaticamente insieme al sistema operativo. Il comando è: systemctl enable pure-ftpd
.
È necessario creare un account sul sistema Linux che rappresenti l'utenza collegata via FTP (i vari file creati e letti via FTP faranno riferimento a questo utente, per quanto riguarda il modello di sicurezza). Creiamo il suo gruppo: groupadd pureftpd
, quindi l'account vero e proprio (i vari parametri fanno sì che sia dotato di privilegi minimi e non possa essere impiegato per eseguire log-in tramite console):
useradd -g pureftpd -d /var/empty -s /sbin/nologin pureftpd
L'ultimo comando mostra l'avviso the home directory already exists
: è normale.
Il server è pronto, ma non ancora utilizzabile dato che non abbiamo predisposto alcun account.
La cartella "Home"
È senza dubbio una buona idea isolare gli utenti FTP in una struttura di cartelle private, andando in seguito ad aggiungere semplici "Collegamenti" a tutte le altre directory alle quali devono poter accedere V. seguito). Create una directory "generale": mkdir /home/utentiftp
.
Nella stessa andremo a posizionare diverse sotto-cartelle "home", ognuna con il nome di un utente abilitato ad accedere al server FTP. Per quello con username amico: mkdir /home/utentiftp/amico
.
Create lì dentro un file chiamato Se mi vedi, sei collegato correttamente.txt
: aiuterà i client a capire che tutto sta funzionando a dovere:
touch '/home/utentiftp/amico/Se mi vedi, sei collegato correttamente.txt'
Per finalizzare la gestione del disco, impostiamo i permessi appropriati. Cominciamo facendo sì che la struttura di cartelle diventi proprietà dell'account pureftpd
creato poco fa:
chown -R pureftpd /home/utentiftp/
Diciamo quindi che il proprietario sia autorizzato a leggere, scrivere e navigare le sotto-cartelle:
chmod -R u=rwX /home/utentiftp/
Creazione di un nuovo utente FTP
A questo punto, procediamo a creare il nostro primo account FTP di nome amico:
pure-pw useradd amico -u pureftpd -d /home/utentiftp/amico
Non appena impartito il comando, vi verrà chiesto di scegliere la password da associare a questo account FTP e quindi di digitarla ancora una volta per conferma.
La sintassi del comando è la seguente:
pure-pw useradd NomeDelNuovoAccountFTP -u NomeAccountSistema -d /percorso/cartella/iniziale
In particolare:
pure-pw
: è il nome del comando di gestione di Pure-FTPd e rimane sempre invariatoNomeDelNuovoAccountFTP
: il nome utente (username) per questo account FTPNomeAccountSistema
: indica l'account di sistema, creato al passo precedente, al quale legare questo account FTP. Sarà sempre lo stesso, indipendentemente da quanti account FTP stiate creando/percorso/cartella/iniziale
: non appena collegatosi, il client FTP verrà posizionato in questo percorso sul disco fisso locale
Altri comandi per la gestione degli utenti
Magari non vi serviranno immediatamente, ma questi sono gli altri comandi da tener a mente per la gestione degli account di PureFTPd:
- Lista degli account:
pure-pw list
- Mostra dettagli di un account:
pure-pw show NomeAccountFTP
- Modifica la "home" di un account:
pure-pw usermod NomeDelAccountFTP -d /percorso/cartella/iniziale
- Modifica la password di un account:
pure-pw passwd NomeAccountFTP
- Eliminare un account:
pure-pw userdel NomeAccountFTP
Salvare le modifiche
Ogni volta che modificate gli account FTP tramite uno dei comandi precedenti è necessario aggiornare il database di Pure-FTPd. Per far sì che questo accada, basta lanciare pure-pw mkdb
. Fatelo subito, e non dimenticatevi di rifarlo ad ogni variazione!
Al contrario, per rendere effettive le creazioni/modifiche agli account NON è necessario riavviare il servizio.
Le opzioni di Pure-FTPd
Prima che i client possano connettersi è indispensabile modificare alcune opzioni del programma. Impartite vi
/etc/pure-ftpd/pure-ftpd.conf
per aprire il file di configurazione, quindi premete la lettera i
sulla tastiera per entrare in modalità modifica.
Scorrete ora il file, modificando i parametri indicati di seguito.
NoAnonymous
Per impostazione predefinita, Pure-FTPd consente l'accesso anonimo al server FTP. Sebbene gli utenti non-autenticati abbiano privilegi molto ridotti, raccomando di disabilitare questa caratteristica e ripristinarla solo alla bisogna.
Modificate il valore della stringa NoAnonymous
da yes
a no
PureDB
Per abilitare l'uso del database che contiene l'utente creato poco fa, eliminate il cancelletto (#
) dalla riga che recita # PureDB /etc/pure-ftpd/pureftpd.pdb
PassivePortRange
La spiegazione dettagliata della modalità passiva del protocollo FTP va oltre gli scopi di questa guida. Per le nostre necessità, basti dire che è necessario impostare Pure-FTPd di modo che possa accettare la connessione anche su alcune porte alternative a quella principale.
Togliete il cancelletto dal parametro PassivePortRange
e assegnategli il valore 2121 2221
AntiWarez
Di default, Pure-FTPd non consente agli utenti del server FTP di scaricare file precedentemente caricati ma non ancora "validati" dall'amministratore. Per disabilitare questo meccanismo di sicurezza piuttosto rigido, modificate il valore di Antiwarez
portandolo a no
UserBandwidth
Piuttosto importante è il parametro UserBandwidth
, relativo ai limiti di velocità, ed in particolare quello legato all'upload del nostro server verso gli altri. Se non imposterete un limite, un singolo client connesso mediante una tradizionale ADSL saturerà completamente la banda, rendendo il resto del sistema estremamente lento nell'accedere alla rete.
Se utilizzate un'ADSL italiana standard (velocità di upload nominale: 384 kbit/s), impostate UserBandwidth 512:32
per limitare, rispettivamente, la velocità di caricamento verso il server a 32 kB/s e quella di scaricamento a 512 kB/s
I possessori di connessioni "20 mega" (velocità di upload nominale: 1 Mbit/s ma che difficilmente supera i 5-600 kbit/s) possono usare UserBandwidth 1500:64
).
Salvare il file di configurazione e uscire
La configurazione di base è completata. Premete Esc
, poi impartite :x
per salvare il file ed uscire dall'editor di testo.
Aprire le porte FTP sul firewall
Prima che un client possa connettersi è necessario aprire le porte impiegate dal server FTP sul firewall. Si tratta della porta 21 TCP
, ma, per come abbiamo configurato l'applicativo, è necessario abilitare anche l'intervallo 2121-2221 TCP
.
[Nota: la 20 TCP
non è necessaria sul server, bensì sul client. Il server la utilizza infatti solo per aprire una connessione in uscita, ma non deve accettare nulla in ingresso sulla stessa.]
In questa sede, ci limiteremo ad indicare i comandi da impartire - per una trattazione più esaustiva, si veda "Aprire le porte sul firewall di Linux CentOS - guida rapida a firewalld":
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=2121-2221/tcp --permanent
systemctl reload firewalld
Avviare il servizio di Pure-FTPd
Impartite ora systemctl start pure-ftpd
per avviare il servizio (in seguito, partirà automaticamente all'avvio del sistema. Eventualmente, quindi, avrete bisogno di arrestarlo con systemctl stop pure-ftpd
oppure riavviarlo con systemctl restart pure-ftpd
).
Potete verificare che tutto sia andato per il verso giusto dando un'occhiata al log: tail -n 25 /var/log/messages
. L'ultima riga dovrebbe recitare Started Pure-FTPd FTP server
.
Connessione tramite client
Arrivati a questo punto, possiamo connetterci al servizio tramite il client FTP (per info, vedi "Client FTP (FileZilla), guida rapida - caricare e scaricare file da un server FTP remoto").
La raccomandazione è di fare le prove partendo dallo scenario a complessità minore, per poi salire:
- connettersi lanciando il client sullo stesso computer sul quale gira il server - il comando è
ftp localhost
, per poi fornire username e password di un account FTP valido els
per elencare i file disponibili - connettersi da un altro computer all'interno della stessa rete locale (LAN) - come
host
, bisogna immettere l'indirizzo IP del sistema da raggiungere (sarà qualcosa tipo192.168.0.2
) - connettersi da un altro computer tramite Internet - il modo migliore è specificare un nome a dominio dinamico (DDNS), ma ci sono anche le complessità legate alla configurazione del router (vedi paragrafi successivi)
Nel caso in cui tutto vada per il verso giusto, il client visualizza l'elenco dei file presenti nella cartella "home" impostata, compreso quel Se mi vedi, sei collegato correttamente.txt
che avete creato in precedenza. Potete ora provare a caricare e scaricare file.
Configurare il router (per l'accesso via Internet)
Se siete interessati ad accettare connessioni FTP attraverso Internet è indispensabile configurare l'inoltro delle porte (port forwarding) dal router verso il sistema sul quale è in esecuzione Pure-FTPd. Si tratta della porta 21 TCP
, ma, per come abbiamo configurato l'applicativo, è necessario abilitare anche l'intervallo 2121-2221 TCP
. Per la procedura dettagliata si veda "Aprire le porte sul router: la guida definitiva".
Ricordate inoltre di procurarvi un nome a dominio dinamico (DDNS).
Condividere cartelle esterne
Fino ad ora ci siamo limitati a consentire l'accesso ad una specifica cartella "home". Utilizzando i collegamenti, però, siamo liberi di fare in modo che gli utenti remoti possano accedere anche a file archiviati al di fuori della propria directory iniziale, magari su unità disco differenti o addirittura dispositivi USB esterni.
A scopo dimostrativo, pensiamo di voler permettere all'account amico di accedere in sola lettura anche alla cartella /home/foto
(esterna, quindi, al percorso /home/utentiftp/amico/
nel quale i client FTP vengono "imprigionati" subito dopo aver effettuato log-in).
Lavorando sul server, creiamo un link simbolico alla cartella desiderata, posizionandolo all'interno della directory iniziale di amico:
ln -s /home/foto/ /home/utentiftp/amico/foto
Il gioco è fatto: al collegamento successivo, amico potrà accedere alla cartella delle foto e scaricare i file.
Con la configurazione attuale, i client non avranno modo di scrivere nella (o "eliminare dalla") cartella linkata.
Abilitare FTPS
Il server FTP sta ora funzionando correttamente, ma tutti i dati viaggiano "in chiaro". Se desiderate proteggere la comunicazione da occhi indiscreti, è necessario abilitare la crittografia: la procedura è dettagliata in "FTPS e Pure-FTPd: come accettare connessioni FTP sicure".
Consentire l'accesso anonimo
Per come abbiamo configurato il servizio, solo coloro che conoscano username e password di un account FTP valido possono connettersi. Per consentire a chiunque di entrare, si veda "Pure-FTPd: abilitare l'accesso anonimo".
Cosa fare in caso di problemi
Pure-FTPd è un software particolarmente stabile e ampiamente "collaudato". Il protocollo FTP stesso, dal canto suo, risale al 1985... In caso di problemi, vi sono ottime possibilità che siano localizzati o nella configurazione del server o, ancora più probabile, nella configurazione della rete.
La prima cosa da capire è se collegandovi con il client FTP dalla stessa macchina su cui è in esecuzione il server (comando ftp 127.0.0.1
) riuscite ad accedere. In caso negativo, verificate attentamente il messaggio di errore: dovete capire se il server stesso non risponde (quindi: o il demone non è in esecuzione o c'è un firewall che blocca la porta) oppure se il server risponde ma vi nega l'accesso (quindi dovrete agire sulla configurazione del programma).
Nell'eventualità che l'accesso locale funzioni, ma quello dagli altri PC no, si tratta di un errore nella predisposizione del router o del firewall: consultante nuovamente i paragrafi dedicati, con particolare attenzione alla configurazione della modalità passiva.
Per la procedura completa di risoluzione problemi si veda ""Impossibile connettersi al computer remoto": cosa fare quando i nostri servizi non rispondono ai client".