Come impostare vsftpd per un utente's Directory su Ubuntu 18.04

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, configurerai 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 18.04, e un utente non root con privilegi sudo: Si può imparare di più su come impostare un utente con questi privilegi nella nostra Configurazione iniziale del server con Ubuntu 18.04 guida.,

Fase 1 — Installazione di vsftpd

cominciamo con l’aggiornamento il nostro elenco dei pacchetti e l’installazione del vsftpd demone:

  • sudo apt update
  • sudo apt install vsftpd

Quando l’installazione è completa, proviamo a copiare il file di configurazione in modo che possiamo iniziare con una configurazione vuoto, il salvataggio originale come backup:

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

Con una copia di backup della configurazione, siamo pronti per configurare il firewall.

Passo 2 — Apertura del firewall

Controlliamo lo stato del firewall per vedere se è abilitato., Se lo è, ci assicureremo che il traffico FTP sia consentito in modo che le regole del firewall non blocchino i nostri test.

Controlla lo stato del firewall:

  • sudo ufw status

In questo caso, solo SSH è consentito tramite:

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

Potresti avere altre regole in atto o nessuna regola del firewall. Poiché in questo caso è consentito solo il traffico SSH, dovremo aggiungere regole per il traffico FTP.,

aprire le porte 20 e 21 per FTP, porta 990 per quando si attiva la 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

le Nostre regole del firewall dovrebbe ora assomigliare a questo:

Con vsftpd installato e le porte aperte, passiamo alla creazione di un apposito utente FTP.,

Passo 3 — Preparazione della directory utente

Creeremo un utente FTP dedicato, ma potresti 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, aggiungi un utente di test:

  • sudo adduser sammy

Assegna una password quando richiesto. Sentitevi liberi di premere ENTER attraverso gli altri prompt.,

FTP è generalmente più sicuro quando gli utenti sono limitati a una directory specifica. vsftpd realizza questo con chroot 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, creiamo una directory ftpper servire come directory chroote una directory files scrivibile per contenere i file effettivi.,missioni:

  • sudo ls -la /home/sammy/ftp
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 cartella per l’upload di file 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 ftp directory deve restituire il seguente:

  • sudo ls -la /home/sammy/ftp

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

  • 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, andiamo a modificare la nostra 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, consentiamo all’utente di caricare i file disattivando l’impostazionewrite_enable:

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

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

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

Aggiungiamo anche 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 altri utenti futuri. Aggiungi queste impostazioni in qualsiasi punto del file:

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

Limitiamo anche l’intervallo di porte che possono essere utilizzate per FTP passivo per assicurarsi che siano disponibili connessioni sufficienti:

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

Nota: Nel passaggio 2, abbiamo 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.

Per consentire l’accesso FTP caso per caso, impostiamo la configurazione in modo che gli utenti abbiano accesso solo quando sono esplicitamente aggiunti 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 è impostata su YES, agli utenti dell’elenco viene negato l’accesso FTP. Quando è impostato su NO, solo agli utenti dell’elenco è consentito l’accesso.

Quando hai finito di apportare le modifiche, salva il file e esci dall’editor.

Infine, aggiungiamo il nostro utente a/etc/vsftpd.userlist., Utilizzare il -a flag per aggiungere il 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

Con la configurazione, passiamo ai test di accesso FTP.

Passo 5 — Test dell’accesso FTP

Abbiamo configurato il server per consentire solo all’utentesammy di connettersi via FTP. Facciamo in modo che questo funzioni come previsto.,

Gli utenti anonimi dovrebbero non connettersi: abbiamo disabilitato l’accesso anonimo. Proviamo che cercando di connettersi in modo anonimo. Se la nostra configurazione è impostata correttamente, agli utenti anonimi dovrebbe essere negata l’autorizzazione. Apri un’altra finestra del terminale ed esegui il seguente comando. Assicurarsi di sostituire 203.0.113.0 con il pubblico del server indirizzo IP:

  • ftp -p 203.0.113.0

Chiudere la connessione:

  • bye

gli Utenti di diversa sammy non effettuare la connessione: a quel punto, cerchiamo di collegamento, come il nostro utente sudo.,> dovrebbe essere in grado di connettersi, lettura e scrittura di file: facciamo in modo che la nostra area utente può connettersi:

  • ftp -p 203.0.113.0

proviamo a cambiare nel files directory e 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

Avanti, andiamo 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, andiamo a prendere 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 TLS / SSL per fornire tale crittografia. Il primo passo è creare i certificati SSL da utilizzare con vsftpd.

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

  • 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 i valori evidenziati 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, vedrete due righe che iniziano con rsa_. Commentali in modo che assomiglino a questo:

/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. Cambiassl_enable inYES:

/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, configurare 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. . .

La sezione del file finito dovrebbe essere simile a questa:

/etc/vsftpd.conf

Quando hai finito, salva e chiudi il file.

Riavvia 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:

Quindi, verifichiamo 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 con FileZilla grazie al suo supporto multipiattaforma. Consultare la documentazione per altri clienti.

Quando apri FileZilla per la prima volta, trova l’icona del Gestore del sito appena sopra la parola Host, 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.

Compila il campo Host con il nome o l’indirizzo IP. Nel menu a discesa Crittografia, selezionare Richiedi FTP esplicito su TLS.

Per il tipo di accesso, selezionare Chiedi password. Inserisci il tuo utente FTP nel campo Utente:

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

Fare clic su OK per connettersi. Ora dovresti essere connesso al tuo server con crittografia TLS/SSL.,ficate che assomiglia a questo:

Quando hai accettato il certificato, fare doppio clic su files cartella e trascinare upload.txt a sinistra per confermare che siete in grado di scaricare i file:

Quando hai fatto questo, fare clic destro sulla copia locale, rinominarlo upload-tls.txt e trascinare il server per confermare che è possibile caricare i file:

ora Hai confermato che non è possibile in modo sicuro e con successo il trasferimento di file con il protocollo 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.,

in Primo luogo, aprire un file chiamato ftponly nel bin directory:

  • sudo nano /bin/ftponly

Aggiungi un messaggio che informa l’utente perché non sono in grado di accedere:

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

Salvare il file e chiudere l’editor.,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 comando seguente:

  • sudo usermod sammy -s /bin/ftponly

Ora prova ad accedere al tuo server 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 degli utenti virtuali di vsftpd. 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.

Lascia un commento

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