Abilità con un editor a riga di comando (utilizzando vi in questo esempio)
Un buon livello di confidenza con l'immissione di comandi dalla riga di comando, la visualizzazione dei log e altri compiti generali di amministratore di sistema
La comprensione di PAM e dei comandi openssl è utile
Eseguire i comandi qui con l'utente root o con un utente normale e sudo
vsftpd è il demone FTP very secure (FTP è il protocollo di trasferimento dei file). È disponibile da molti anni ed è il demone FTP predefinito in Rocky Linux e in molte altre distribuzioni Linux.
vsftpd consente di utilizzare utenti virtuali con moduli di autenticazione collegabili (PAM). Questi utenti virtuali non esistono nel sistema e non hanno altre autorizzazioni, tranne quella di FTP. Se un utente virtuale viene compromesso, la persona con quelle credenziali non avrà altre autorizzazioni dopo aver ottenuto l'accesso come utente. Questa configurazione è molto sicura, ma richiede un po' di lavoro in più.
Prendi in considerazione sftp
Anche con le impostazioni di sicurezza usate qui per configurare vsftpd, si potrebbe prendere in considerazione sftp. sftp cripta l'intero flusso di connessione ed è più sicuro. Abbiamo creato un documento chiamato [Secure Server - sftp] (sftp.md) che tratta l'impostazione di sftp e il blocco di SSH.
È inoltre necessario accertarsi dell'installazione di openssl. Se si utilizza un server web, probabilmente questo è già installato, ma per verificare è possibile eseguire:
Si vuole garantire la disabilitazione di alcune impostazioni e l'abilitazione di altre. In genere, l'installazione di vsftpd include le opzioni più corrette già impostate. Tuttavia, è comunque una buona idea verificarle.
Per controllare il file di configurazione e apportare le modifiche necessarie, eseguire:
vi /etc/vsftpd/vsftpd.conf
Cercare la riga "anonymous_enable=" e assicurarsi che sia "NO" e che sia NON commentata. (Commentando questa riga si abilitano i login anonimi). La riga somiglierà a questa, quando corretta:
anonymous_enable=NO
Assicurarsi che "local_enable" sia yes:
local_enable=YES
Aggiungere una riga per l'utente root locale. Se il server è un server web e si utilizza il file Apache Web Server Multi-Site Setup, la root locale lo rifletterà. Se la tua configurazione è differente, o se questo non è un server web, regola l'impostazione "local_root":
local_root=/var/www/sub-domains
Assicurati che anche "write_enable" sia impostata a YES:
write_enable=YES
Trova la riga "chroot_local_users" e rimuovi il commento. Aggiungere due righe dopo quella mostrata qui:
Al di sotto di questa si vuole aggiungere una sezione che si occuperà degli utenti virtuali:
# Virtual User Settings
user_config_dir=/etc/vsftpd/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd
È necessario aggiungere una sezione in fondo al file per forzare la crittografia delle password inviate via Internet. È necessario installare openssl e creare il file del certificato anche per questo.
Iniziate aggiungendo queste righe in fondo al file:
È necessario creare il file del certificato RSA di vsftpd. L'autore, solitamente, immagina che un server vada bene per 4 o 5 anni. Impostare il numero di giorni per questo certificato in base al numero di anni in cui si ritiene che il server sarà attivo e funzionante su questo hardware.
Modificare il numero di giorni come si ritiene opportuno e utilizzare il formato di questo comando per creare i file del certificato e della chiave privata:
Come tutti i processi di creazione di certificati, si avvia uno script che richiede alcune informazioni. Non è un processo difficile. Molti campi verranno lasciati in bianco.
Il primo campo è quello del codice paese, da compilare con il codice a due lettere del vostro paese:
Country Name (2 letter code) [XX]:
Poi viene lo stato o la provincia, da compilare digitando il nome intero, non l'abbreviazione:
State or Province Name (full name) []:
Il prossimo è il nome della località. Questa è la tua città:
Locality Name (eg, city) [Default City]:
Poi c'è il nome dell'azienda o dell'organizzazione. Si può lasciare in bianco o compilare. È facoltativo:
Organization Name (eg, company) [Default Company Ltd]:
Il prossimo è il nome dell'unità organizzativa. È possibile compilare questo campo se il server è per una divisione specifica, oppure lasciarlo vuoto:
Organizational Unit Name (eg, section) []:
Il campo seguente deve essere compilato, ma potete decidere voi come farlo. Questo è il nome comune del tuo server. Esempio: webftp.domainname.ext:
Common Name (eg, your name or your server's hostname) []:
Il campo dell'email può essere lasciato vuoto:
Email Address []:
Una volta terminato, si verificherà la creazione del certificato.
Come già detto, l'uso di utenti virtuali per vsftpd è molto più sicuro perché non hanno privilegi di sistema. Detto questo, è necessario aggiungere un utente da utilizzare per gli utenti virtuali. È inoltre necessario aggiungere un gruppo:
L'utente deve corrispondere alla riga guest_username= nel file vsftpd.com.
Andare alla directory di configurazione di vsftpd:
cd /etc/vsftpd
È necessario creare un database di password. Questo database viene utilizzato per autenticare i nostri utenti virtuali. È necessario creare un file per leggere gli utenti virtuali e le password. Questo creerà il database.
In futuro, quando si aggiungeranno utenti, si dovrà ripetere questa procedura:
vi vusers.txt
L'utente e la password sono separati da una riga; inserire l'utente, premere INVIO e inserire la password. Continuate fino a quando non avrete aggiunto tutti gli utenti a cui volete dare accesso al sistema. Esempio:
Una volta creato il file di testo, si vuole generare il database delle password che vsftpd utilizzerà per gli utenti virtuali. Per farlo, utilizzare il comando db_load. db_load è fornito da libdb-utils che dovrebbe essere caricato sul vostro sistema, ma se non lo è, potete semplicemente installarlo con:
Prendetevi un momento per rivedere cosa fa db_load:
L'opzione -T consente di importare un file di testo nel database
L'opzione -t dice di specificare il metodo di accesso sottostante.
Il hash è il metodo di accesso sottostante che si sta specificando
L'opzione -f indica di leggere da un file specificato.
Il file specificato è vusers.txt.
Il database che si sta creando o aggiungendo è vsftpd-virtual-user.db
Modificare i permessi predefiniti del file del database:
chmod 600 vsftpd-virtual-user.db
Rimuovere il file "vusers.txt":
rm vusers.txt
Quando si aggiungono gli utenti, usare vi per creare un altro file "vusers.txt" e rieseguire il comando db_load, che aggiungerà gli utenti al database.
vsftpd installa un file pam predefinito quando si installa il pacchetto. Sostituirete il tutto con i vostri contenuti. Eseguire sempre una copia di backup del vecchio file.
Creare una directory per il file di backup in /root:
mkdir /root/backup_vsftpd_pam
Copiare il file pam in questa directory:
cp /etc/pam.d/vsftpd /root/backup_vsftpd_pam/
Modifica del file originale:
vi /etc/pam.d/vsftpd
Rimuovete tutto quello che c'è in questo file tranne "#%PAM-1.0" e aggiungete le righe seguenti:
Questo abilita il login per gli utenti virtuali definiti in vsftpd-virtual-user.db e disabilita i login locali.
Impostazione della configurazione dell'utente virtuale¶
Ogni utente virtuale ha un proprio file di configurazione, che specifica la propria directory "local_root". La proprietà di questa radice locale è dell'utente "vsftpd" e del gruppo "nogroup".
È possibile testare la configurazione con la riga di comando su un computer e verificare l'accesso al computer con FTP. Detto questo, il modo più semplice per effettuare un test è quello di provare con un client FTP, come FileZilla.
Quando si esegue il test con un utente virtuale sul server che esegue vsftpd, si ottiene un messaggio di fiducia del certificato SSL/TLS. Questo messaggio di fiducia comunica alla persona che il server utilizza un certificato e le chiede di approvarlo prima di continuare. Quando si è connessi come utente virtuale, è possibile inserire i file nella cartella "local_root".
Se non si riesce a caricare un file, potrebbe essere necessario tornare indietro e verificare nuovamente tutti i passaggi. Ad esempio, potrebbe accadere che i permessi di proprietà per "local_root" non siano impostati sull'utente "vsftpd" e sul gruppo "nogroup".
vsftpd è un server FTP popolare e comune e può essere un server indipendente o parte di un Apache Hardened Web Server. È abbastanza sicuro se impostato per utilizzare utenti virtuali e un certificato.
Questa procedura prevede molti passaggi per l'impostazione di vsftpd. Dedicando un po' di tempo in più alla sua corretta configurazione, il vostro server sarà il più sicuro possibile.