Introduzione

FTP, abbreviazione di File Transfer Protocol, è un protocollo di rete che una volta era ampiamente utilizzato per spostare file tra un client e un server. Da allora è stato sostituito da modi più veloci, più sicuri e più convenienti per distribuire i file. Molti utenti occasionali di Internet si aspettano di scaricare direttamente dal proprio browser Web conhttps, e gli utenti della riga di comando sono più propensi a utilizzare protocolli sicuri comescp o sFTP.,

FTP è ancora utilizzato per supportare applicazioni legacy e flussi di lavoro con esigenze molto specifiche. Se hai una scelta di quale protocollo usare, considera di esplorare le opzioni più moderne. Quando hai bisogno di FTP, tuttavia, vsftpd è una scelta eccellente. Ottimizzato per sicurezza, prestazioni e stabilità, vsftpd offre una forte protezione contro molti problemi di sicurezza riscontrati in altri server FTP ed è l’impostazione predefinita per molte distribuzioni Linux.,

In questo tutorial, ti mostreremo come configurare vsftpd per consentire a un utente di caricare file nella sua home directory utilizzando FTP con credenziali di accesso protette da SSL/TLS.

Prerequisiti

Per seguire questo tutorial è necessario:

  • Un server Ubuntu 16.04 con un utente non root consudo privilegi: Puoi saperne di più su come impostare un utente con questi privilegi nella nostra Configurazione iniziale del server con Ubuntu 16.04 guida.

Una volta che hai un server Ubuntu sul posto, sei pronto per iniziare.,

Passo 1 — Installazione di vsftpd

Inizieremo aggiornando la nostra lista dei pacchetti e installando il demone vsftpd:

  • sudo apt-get update
  • sudo apt-get install vsftpd

Al termine dell’installazione, copieremo il file di configurazione in modo da poter iniziare con una configurazione vuota, salvando l’originale come backup.

  • sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Con un backup della configurazione in atto, siamo pronti a configurare il firewall.

Passo 2 — Apertura del Firewall

Controlleremo lo stato del firewall per vedere se è abilitato., In tal caso, ci assicureremo che il traffico FTP sia consentito in modo da non incorrere in regole del firewall che ti bloccano quando arriva il momento di testare.

  • sudo ufw status

In questo caso, solo SSH è consentito tramite:

Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)

Si possono avere altre regole in atto o nessuna regola firewall a tutti. Poiché solo ssh il traffico è consentito in questo caso, dovremo aggiungere regole per il traffico FTP.,

Abbiamo bisogno di aprire le porte 20 e 21 per FTP, porta 990 per più tardi, quando si attiva TLS, e le porte 40000-50000 per la gamma di porte passive abbiamo intenzione di impostare nel file di configurazione:

  • sudo ufw allow 20/tcp
  • sudo ufw allow 21/tcp
  • sudo ufw allow 990/tcp
  • sudo ufw allow 40000:50000/tcp
  • sudo ufw status

Ora la nostra regole del firewall, assomiglia a questo:

Con vsftpd installato e le porte aperte, siamo pronti per procedere con il passaggio successivo.

Passo 3 — Preparazione della directory utente

Per questo tutorial, stiamo andando a creare un utente, ma si può già avere un utente che ha bisogno di accesso FTP., Ci prenderemo cura di preservare l’accesso di un utente esistente ai propri dati nelle istruzioni che seguono. Anche così, si consiglia di iniziare con un nuovo utente fino a quando hai configurato e testato la configurazione.

Per prima cosa, aggiungeremo un utente di test:

  • sudo adduser sammy

Assegna una password quando richiesto e sentiti libero di premere “INVIO” attraverso gli altri prompt.

FTP è generalmente più sicuro quando gli utenti sono limitati a una directory specifica.vsftpdrealizza questo conchroot jail., Quando chroot è abilitato per gli utenti locali, essi sono limitati alla loro directory home per impostazione predefinita. Tuttavia, a causa del modo in cui vsftpd protegge la directory, non deve essere scrivibile dall’utente. Questo va bene per un nuovo utente che dovrebbe connettersi solo tramite FTP, ma un utente esistente potrebbe aver bisogno di scrivere nella propria cartella home se ha anche accesso alla shell.,

In questo esempio, invece di rimuovere i privilegi di scrittura dalla directory home, creeremo una directory ftpper servire come directory chroote una files scrivibile per contenere i file effettivi.,33″>

Output
total 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..

a quel punto, creiamo la directory in cui i file possono essere caricati e assegnare la proprietà per l’utente:

  • sudo mkdir /home/sammy/ftp/files
  • sudo chown sammy:sammy /home/sammy/ftp/files

Un controllo delle autorizzazioni su files directory deve restituire il seguente:

  • sudo ls -la /home/sammy/ftp

Infine, aggiungiamo un test.txt file da utilizzare quando ci prova più tardi:

  • echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt

Ora che abbiamo assicurato il ftp directory e consentito all’utente l’accesso al files directory, ti rivolgere la nostra attenzione alla configurazione.,

Passo 4 — Configurazione dell’accesso FTP

Stiamo pianificando di consentire a un singolo utente con un account shell locale di connettersi con FTP. Le due impostazioni chiave per questo sono già impostate in vsftpd.conf. Inizia aprendo il file di configurazione per verificare che le impostazioni nella configurazione corrispondano a quelle seguenti:

  • sudo nano /etc/vsftpd.conf
/etc / vsftpd.conf

Successivamente dovremo modificare alcuni valori nel file. Per consentire all’utente di caricare file, decommenteremo l’impostazione write_enable in modo da avere:

/etc/vsftpd.,conf
. . .write_enable=YES. . .

Decommenteremo anche il chroot per impedire all’utente connesso con FTP di accedere a qualsiasi file o comando al di fuori dell’albero delle directory.

/etc / vsftpd.conf
. . .chroot_local_user=YES. . .

Aggiungeremo unuser_sub_tokenper inserire il nome utente nel nostro percorsolocal_root directory in modo che la nostra configurazione funzioni per questo utente e per eventuali futuri utenti che potrebbero essere aggiunti.

/etc / vsftpd.,conf
user_sub_token=$USERlocal_root=/home/$USER/ftp

Limiteremo l’intervallo di porte che possono essere utilizzate per FTP passivo per assicurarci che siano disponibili connessioni sufficienti:

/etc / vsftpd.conf
pasv_min_port=40000pasv_max_port=50000

Nota: Abbiamo pre-aperto le porte che abbiamo impostato qui per l’intervallo di porte passive. Se si modificano i valori, assicurarsi di aggiornare le impostazioni del firewall.

Poiché stiamo pianificando di consentire l’accesso FTP solo caso per caso, configureremo la configurazione in modo che l’accesso sia dato a un utente solo quando viene aggiunto esplicitamente a una lista piuttosto che per impostazione predefinita:

/etc/vsftpd.,conf
userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO

userlist_deny commuta la logica. Quando è impostato su “SÌ”, agli utenti dell’elenco viene negato l’accesso FTP. Quando è impostato su “NO”, l’accesso è consentito solo agli utenti dell’elenco. Quando hai finito di apportare la modifica, salva e esci dal file.

Infine, creeremo e aggiungeremo il nostro utente al file., Utilizzeremo -a bandiera da aggiungere al file:

  • echo "sammy" | sudo tee -a /etc/vsftpd.userlist

verificare che è stato aggiunto come previsto:

cat /etc/vsftpd.userlist
Output
sammy

Riavviare il demone di caricare le modifiche di configurazione:

  • sudo systemctl restart vsftpd

Ora siamo pronti per la prova.

Passo 5 — Test dell’accesso FTP

Abbiamo configurato il server per consentire solo all’utentesammy di connettersi via FTP. Assicuriamoci che sia cosi’.

Gli utenti anonimi dovrebbero non connettersi: abbiamo disabilitato l’accesso anonimo., Qui proveremo che cercando di connettersi in modo anonimo. Se lo abbiamo fatto correttamente, agli utenti anonimi dovrebbe essere negata l’autorizzazione:

  • ftp -p 203.0.113.0

Chiudi la connessione:

  • bye

Gli utenti diversi da sammy non dovrebbero connettersi: successivamente, proveremo a connetterci come nostro sudo utente. Anche a loro dovrebbe essere negato l’accesso e dovrebbe accadere prima che possano inserire la loro password.,e la scrittura di file: Qui, faremo in modo che il nostro utente designato canconnect:

  • ftp -p 203.0.113.0

cambieremo il files directory, quindi utilizzare il get comando per trasferire il file di test che abbiamo creato in precedenza per la nostra macchina locale:

  • cd files
  • get test.txt

ti girare a destra di nuovo in giro e provare a caricare il file con un nuovo nome per verificare i permessi di scrittura:

  • put test.txt upload.txt

Chiudere la connessione:

  • bye

Ora che abbiamo testato la nostra configurazione, prenderemo misure per proteggere ulteriormente i nostri server.,

Passo 6 — Protezione delle transazioni

Poiché FTP non crittografa i dati in transito, incluse le credenziali utente, abiliteremo TTL / SSL per fornire tale crittografia. Il primo passo è creare i certificati SSL da utilizzare con vsftpd.

Useremoopenssl per creare un nuovo certificato e utilizzare il flag-days per renderlo valido per un anno. Nello stesso comando, aggiungeremo una chiave RSA privata a 2048 bit., Quindi impostando entrambi i flag-keyout e-out sullo stesso valore, la chiave privata e il certificato si troveranno nello stesso file.

Lo faremo con il seguente comando:

  • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Ti verrà richiesto di fornire le informazioni sull’indirizzo per il tuo certificato., Sostituire le proprie informazioni per le domande qui di seguito:

Per informazioni più dettagliate circa il flag di certificato, vedere OpenSSL Essentials: Lavorare con i Certificati SSL, le Chiavi Private e Csr

una Volta che hai creato i certificati, aprire il vsftpd file di configurazione di nuovo:

  • sudo nano /etc/vsftpd.conf

Verso la fine del file, si dovrebbe due righe che iniziano con rsa_. Commentali in modo che assomiglino a:

/etc/vsftpd.,conf
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Sotto di loro, aggiungi le seguenti righe che puntano al certificato e alla chiave privata che abbiamo appena creato:

/etc / vsftpd.conf
rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem

Successivamente, forzeremo l’uso di SSL, che impedirà ai client che non possono gestire TLS di connettersi. Ciò è necessario per garantire che tutto il traffico sia crittografato, ma potrebbe costringere l’utente FTP a cambiare client. Cambia ssl_enableinYES:

/etc / vsftpd.,conf
ssl_enable=YES

Successivamente, aggiungi le seguenti righe per negare esplicitamente le connessioni anonime su SSL e per richiedere SSL sia per il trasferimento dei dati che per gli accessi:

/etc / vsftpd.conf
allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES

Successivamente configureremo il server per utilizzare TLS, il successore preferito di SSL aggiungendo le seguenti righe:

/etc / vsftpd.conf
ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO

Infine, aggiungeremo altre due opzioni. Innanzitutto, non richiederemo il riutilizzo SSL perché può interrompere molti client FTP., Richiederemo suite di crittografia” high”, che attualmente significa lunghezze di chiave uguali o superiori a 128 bit:

/etc / vsftpd.conf
require_ssl_reuse=NOssl_ciphers=HIGH

Quando hai finito, salva e chiudi il file.

Ora, dobbiamo riavviare il server affinché le modifiche abbiano effetto:

  • sudo systemctl restart vsftpd

A questo punto, non saremo più in grado di connetterci con un client a riga di comando non sicuro. Se ci provassimo, vedremmo qualcosa come:

Successivamente, verificheremo che possiamo connetterci usando un client che supporta TLS.,

Passo 7 — Test TLS con FileZilla

La maggior parte dei client FTP moderni possono essere configurati per utilizzare la crittografia TLS. Dimostreremo come connettersi utilizzando FileZilla grazie al suo supporto multipiattaforma. Consultare la documentazione per altri clienti.

Quando apri FileZilla per la prima volta, trova l’icona Site Manager appena sotto il file Word, l’icona più a sinistra nella riga superiore. Fare clic su di esso:

Si aprirà una nuova finestra., Fai clic sul pulsante “Nuovo sito”nell’angolo in basso a destra:


Sotto” I miei siti “apparirà una nuova icona con le parole” Nuovo sito”. Puoi nominarlo ora o tornare più tardi e utilizzare il pulsante Rinomina.

È necessario compilare il campo “Host” con il nome o l’indirizzo IP. Nel menu a discesa” Crittografia”, selezionare “Richiedi FTP esplicito su TLS”.

Per “Tipo di accesso”, selezionare “Richiedi password”. Inserisci l’utente FTP creato nel campo “Utente”:


Fai clic su “Connetti” nella parte inferiore dell’interfaccia., Ti verrà richiesta la password dell’utente:


Fai clic su “OK” per connetterti. Ora dovresti essere connesso al tuo server con crittografia TLS/SSL.


Dopo aver accettato il certificato, fare doppio clic sulla cartella files e trascinare upload.txt a sinistra per confermare che sei in grado di scaricare i file.

Quando lo hai fatto, fai clic con il pulsante destro del mouse sulla copia locale, rinominala in upload-tls.txt ‘ e trascinarlo di nuovo al server per confermare che è possibile caricare i file.,


Ora hai confermato che puoi trasferire file in modo sicuro e con successo con SSL / TLS abilitato.

Passo 8 — Disabilitazione dell’accesso alla Shell (opzionale)

Se non è possibile utilizzare TLS a causa dei requisiti del client, è possibile ottenere un po ‘ di sicurezza disabilitando la capacità dell’utente FTP di accedere in qualsiasi altro modo. Un modo relativamente semplice per prevenirlo è creare una shell personalizzata. Ciò non fornirà alcuna crittografia, ma limiterà l’accesso di un account compromesso ai file accessibili tramite FTP.,

Per prima cosa, apri un file chiamatoftponly nella directory bin:

  • sudo nano /bin/ftponly

Aggiungeremo un messaggio che dirà all’utente perché non è in grado di accedere.,/p>

#!/bin/shecho "This account is limited to FTP access only."

Modificare le autorizzazioni per rendere eseguibile il file:

  • sudo chmod a+x /bin/ftponly

Aprire la lista delle conchiglie:

  • sudo nano /etc/shells

In fondo, aggiungere:

/etc/shells
. . ./bin/ftponly

Aggiornare la shell dell’utente con il seguente comando:

  • sudo usermod sammy -s /bin/ftponly

Ora provo ad accedere come sammy:

Si dovrebbe vedere qualcosa di simile:

Output
This account is limited to FTP access only.Connection to 203.0.113.0 closed.

Questa è la conferma che l’utente non può più ssh il server e che è limitata per l’accesso FTP solo.,

Conclusione

In questo tutorial abbiamo coperto la creazione di FTP per gli utenti con un account locale. Se è necessario utilizzare un’origine di autenticazione esterna, è possibile esaminare il supporto di vsftpd per gli utenti virtuali. Questo offre un ricco set di opzioni attraverso l’uso di PAM, i moduli di autenticazione collegabili, ed è una buona scelta se si gestiscono utenti in un altro sistema come LDAP o Kerberos.

Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *