UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

323 lines (206 loc) 10.2 kB
**vsftpd** (Very Secure FTP Daemon) è un server FTP leggero, stabile e sicuro per sistemi UNIX-like. ## Contents * [1 Installazione](#Installazione) * [2 Configurazione](#Configurazione) * [2.1 Abilitare l'upload](#Abilitare_l.27upload) * [2.2 Accesso utenti locali](#Accesso_utenti_locali) * [2.3 Accesso anonimi](#Accesso_anonimi) * [2.4 Limitare navigabilità con chroot](#Limitare_navigabilit.C3.A0_con_chroot) * [2.5 Limitare il login degli utenti](#Limitare_il_login_degli_utenti) * [2.6 Limitare le connessioni](#Limitare_le_connessioni) * [2.7 Utilizzo di xinetd](#Utilizzo_di_xinetd) * [2.8 Utilizzo di SSL per la sicurezza dell'FTP](#Utilizzo_di_SSL_per_la_sicurezza_dell.27FTP) * [3 Suggerimenti](#Suggerimenti) * [3.1 PAM con utenti virtuali](#PAM_con_utenti_virtuali) * [3.1.1 Aggiungere cartelle private per gli utenti virtuali](#Aggiungere_cartelle_private_per_gli_utenti_virtuali) * [4 Ulteriori risorse](#Ulteriori_risorse) ## Installazione `vsftpd` è incluso nel repository ufficiale. Basta installarlo con pacman: ``` # pacman -S vsftpd ``` Il server può essere avviato utilizzando il seguente comando: ``` # systemctl start vsftpd.service ``` Inoltre se si vuole che venga avviato automaticamente al boot è necessario abilitarlo in questo modo: ``` # systemctl enable vsftpd.service ``` Per usare `vsftpd` con `xinetd`, vedere la sezione sottostante per le procedure adatte. ## Configurazione La maggior parte delle impostazioni in `vsftpd` sono fatte modificando il file `/etc/vsftpd.conf`. Il file è di per se stesso ben documentato, per cui questa sezione mette in luce solo alcuni importanti cambiamenti che si potrebbe voler effettuare. Per tutte le opzioni disponibili e la documentazione, sfogliare [vsftpd.conf(5)](http://jlk.fjfi.cvut.cz/arch/manpages/man/vsftpd.conf.5) (5). ### Abilitare l'upload Il flag `WRITE_ENABLE` deve essere impostato su YES in `/etc/vsftpd.conf` con il fine di consentire le modifiche al filesystem, come ad esempio il caricamento: ``` write_enable=YES ``` ### Accesso utenti locali Bisogna impostare la seguente riga in `/etc/vsftpd.conf` per consentire agli utenti membri in `/etc/passwd` di accedere al sistema: ``` local_enable=YES ``` ### Accesso anonimi La seguente riga in `/etc/vsftpd.conf` controlla se gli utenti anonimi possono effettuare il login: ``` anonymous_enable=YES # Consentire l'accesso anonimo no_anon_password=YES # Nessuna password è richiesta per un login anonimo anon_max_rate=30000 # Velocità massima di trasferimento per un client anonimo in byte al secondo ``` ### Limitare navigabilità con chroot Si può impostare un ambiente chroot che impedisce all'utente di lasciare la sua home directory. A tal fine, aggiungere le seguenti righe a `/etc/vsftpd.conf`: ``` chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list ``` La variabile `chroot_list_file` specifica il file che contiene le direttive per gli utenti da circoscrivere. Per una direttiva ancora più restrittiva, si può specificare la riga: ``` chroot_local_user=YES ``` In questo modo gli utenti locali rimarranno limitati in via predefinita, e il file specificato da `chroot_list_file` elenca gli utenti che **non** rientrano nell'area limitativa chroot. ### Limitare il login degli utenti È possibile impedire agli utenti di accedere al server FTP con l'aggiunta di due righe `/etc/vsftpd.conf`: ``` userlist_enable=YES userlist_file=/etc/vsftpd.user_list ``` `userlist_file` specifica ora il file che elenca gli utenti che non sono autorizzati ad effettuare il login. Se si desidera consentire l'accesso solo ad alcuni utenti, aggiungere la riga: ``` userlist_deny=NO ``` Il file specificato da `userlist_file` contiene ora gli utenti che sono autorizzati ad effettuare il login. ### Limitare le connessioni Si può limitare la velocità di trasferimento dati, il numero di client e connessioni per IP di utenti locali, aggiungendo le informazioni in `/etc/vsftpd.conf`: ``` local_max_rate=1000000 # Massima velocità di trasferimento dati in byte al secondo max_clients=50 # Numero massimo di client che possono essere collegati max_per_ip=2 # Numero massimo di connessioni per IP ``` ### Utilizzo di xinetd Se si vuole usare `vsftpd` con `xinetd`, aggiungere le seguenti righe a `/etc/xinetd.d/vsftpd`: ``` service ftp { socket_type = stream wait = no user = root server = /usr/sbin/vsftpd log_on_success += HOST DURATION log_on_failure += HOST disable = no } ``` L'opzione sottostante deve essere impostata in `/etc/vsftpd.conf`: ``` pam_service_name=ftp ``` Infine, aggiungere `xinetd` alla stringa demoni in `/etc/rc.conf`. Non è necessario aggiungere `vsftpd`, poichè verrà chiamato da `xinetd` quando necessario. In caso di errori del genere durante la connessione al server: ``` 500 OOPS: cap_set_proc ``` Sarà necessario aggiungere il modulo *capability* nella stringa MODULES in `/etc/rc.conf`. Durante l'aggiornamento alla versione 2.1.0 si potrebbe ottenere un errore come questo quando ci si connette al server da un client: ``` 500 OOPS: could not bind listening IPv4 socket ``` Nelle versioni precedenti era sufficiente lasciare le seguenti righe commentate: ``` # Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd # listen=YES ``` In questa nuova versione, e forse anche nelle prossime, è necessario configurare esplicitamente come **non** eseguibile in modalità standalone, in questo modo: ``` # Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd listen=NO ``` ### Utilizzo di SSL per la sicurezza dell'FTP Generare un certificato SSL in questo modo: ``` # cd /etc/ssl/certs # openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem # chmod 600 /etc/ssl/certs/vsftpd.pem ``` Verranno fatte varie domande sulla propria azienda, ecc, ma dato che il proprio certificato non è noto, non importa cosa si risponde durante la compilazione; lo si utilizzerà solo per la crittografia! Se si prevede di doverlo utilizzare con garanzie di fiducia (trusted), meglio ottenerne uno da compagnie come Thawte, Verisign ecc. modificare la configurazione in `/etc/vsftpd.conf` ``` #this is important ssl_enable=YES #choose what you like, if you accept anon-connections # you may want to enable this # allow_anon_ssl=NO #choose what you like, # it's a matter of performance i guess # force_local_data_ssl=NO #choose what you like force_local_logins_ssl=YES #you should at least enable this if you enable ssl... ssl_tlsv1=YES #choose what you like ssl_sslv2=YES #choose what you like ssl_sslv3=YES #give the correct path to your currently generated *.pem file rsa_cert_file=/etc/ssl/certs/vsftpd.pem #the *.pem file contains both the key and cert rsa_private_key_file=/etc/ssl/certs/vsftpd.pem ``` ## Suggerimenti ### PAM con utenti virtuali L'utilizzo di utenti virtuali ha il vantaggio di non richiedere un vero account per il login sul sistema. Mantenere l'ambiente in un contenitore è naturalmente una scelta più sicura. Un database virtuale degli utenti deve essere creato facendo prima di tutto un semplice file di testo come questo: ``` utente1 password1 utente2 password2 ``` Includere quanti utenti virtuali si preferisca, secondo la struttura nell'esempio. Salvarlo come `logins.txt`; il nome del file non ha alcun significato. Il passo successivo dipende dal sistema database Berkeley, che è incluso nel sistema principale di Arch. Come root creare il database effettivo con l'aiuto del file `logins.txt`, o come è stato chiamato: ``` # db_load -T -t hash -f logins.txt /etc/vsftpd_login.db ``` Si raccomanda di limitare le autorizzazioni per l'ormai creato file `vsftpd_login.db`: ``` # chmod 600 /etc/vsftpd_login.db ``` **Warning:** Fare attenzione sul fatto che conservare password in file di testo normale non è sicuro. Non dimenticare quindi di rimuovere il file temporaneo con `rm logins.txt`. PAM dovrebbe ora essere impostato per poter utilizzare vsftpd_login.db. Per fare in modo che PAM controlli l'autenticazione utente, creare un file chiamato ftp nella cartella `/etc/pam.d/` con le seguenti informazioni: ``` auth required pam_userdb.so db=/etc/vsftpd_login crypt=hash account required pam_userdb.so db=/etc/vsftpd_login crypt=hash ``` **Note:** Si usi /etc/vsftpd_login senza l'estensione .db nella configurazione di PAM! Ora è il momento di creare una home per gli utenti virtuali. Nell'esempio `/srv/ftp` è adibito ad ospitare i dati degli utenti virtuali, concetto che riflette anche la struttura delle directory di default di Arch. Per prima cosa creare l'utente virtuale generale e fare di `/srv/ftp` la sua home: ``` # useradd -d /srv/ftp virtual ``` Rendere virtuale il proprietario: ``` # chown virtual:virtual /srv/ftp ``` configurare vsftpd per utilizzare l'ambiente creato modificando `/etc/vsftpd.conf`. Queste sono le impostazioni necessarie per ottenere che `vsftpd` limiti l'accesso agli utenti virtuali, attraverso nomi utente e password, e circoscriva il loro accesso alla zona specificata `/srv/ftp`: ``` anonymous_enable=NO local_enable=YES chroot_local_user=YES guest_enable=YES guest_username=virtual virtual_use_local_privs=YES ``` Se viene utilizzato il metodo `xinetd`, avviare il servizio. Ora si dovrebbe essere autorizzati solo al login con nome utente e password in base al database creato. #### Aggiungere cartelle private per gli utenti virtuali Innanzitutto creare le directory per gli utenti: ``` # mkdir /srv/ftp/user1 # mkdir /srv/ftp/user2 # chown virtual:virtual /srv/ftp/user?/ ``` Quindi, aggiungere le seguenti righe a `/etc/vsftpd.conf`: ``` local_root=/srv/ftp/$USER user_sub_token=$USER ``` ## Ulteriori risorse * [vsftpd official homepage](http://vsftpd.beasts.org/) * [vsftpd.conf man page](http://vsftpd.beasts.org/vsftpd_conf.html)