Ora, su internet ci sono una marea di guide su come configurare vsftpd con utenti virtuali (ovvero utenti che creiamo solo nell'ambito di vsftpd, e non sono utenti di sistema)
Questo è probabilmente più sicuro per alcune ragioni tra le quali:
1. Maggiore sicurezza dell'accesso
Qualora la connessione FTP non fosse SSL, la password sarebbe trasmessa in chiaro, e una volta intercettata, darebbe anche l'accesso ad una shell SSH valida dell'utente linux che usa il servizio ftp.
2. Migliore separazione degli utenti
Creare un utente FTP non significa automaticamente voler dare all'utente una shell valida della nostra macchina. Alcuni utenti potrebbero essere semplicemente designati per l'upload di file e nient'altro (vedi servizi di hosting).
Tuttavia, trovo la gestione degli utenti virtuali in vsftpd alquanto scomoda e macchinosa, e di limitata granularità in termini di permessi da poter assegnare a livello filesystem.
Alcuni vantaggi nell'usare utenti unix per l'accesso ftp (anziché virtuali):
1. Nessuna ridondanza per gli utenti che hanno anche accesso SSH
Con lo stesso username e password, sarà possibile accedere sia alla shell, sia all'area ftp. Nel caso non volessimo dare accesso SSH all'utente in questione, è sufficiente assegnargli una shell non valida (/bin/false)
2. Gestione degli utenti più diretta e semplice da automatizzare
Sarà possibile aggiungere, rimuovere, cambiare password o impostare una scadenza agli utenti con i classici useradd e userdel, usermod... creare scripts da qui è molto semplice.
3. Ogni utente FTP potrà avere i propri permessi a livello filesystem
Oltre alla classica pratica di chrootare gli utenti nelle proprie home, avremmo un ulteriore livello di sicurezza a lato filesystem ad assicurarci che anche in caso di bachi del servizio ftp o della sua configurazione, un utente compromesso non possa modificare file di altri utenti
premetto che per ragioni di sicurezza, è assolutamente raccomandato, per non dire obbligatorio installare vsftpd con un certificato SSL, di modo da poter crittare i dettagli di autenticazione ed avere un ftp sicuro.
PS: generare un certificato self-signed:
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem -subj "/C=IT/ST=Rome/L=Rome/O=Organizzazione/OU=Dipartimento/CN=example.com
CONFIGURAZIONE Veniamo alla configurazione, dando per scontato che abbiate già installato il servizio di vsftpd (diversamente, google è vostro amico)
/etc/vsftpd/vsftpd.conf
userlist_deny=YES #tutti sono autorizzati di default
userlist_enable=YES #eccetto quelli elencati in una lista:
userlist_file=/etc/vsftpd/denied_users #lista degli utenti da blacklistare
anonymous_enable=NO #non permette utenti guest o anonimi
guest_enable=NO
guest_username=virtual #fancy
virtual_use_local_privs=YES #non necessario se non usiamo virtual user
write_enable=YES #permesso di scrivere agli utenti
local_umask=022 #maschera dei permessi di default 755
xferlog_enable=YES #abilita gli xferlog
xferlog_file=/var/log/vsftpd.log #location dei log
connect_from_port_20=YES #autorizza la connessione alla porta 20 (FTP-DATA)
local_enable=YES #abilita gli utenti **locali**
chroot_local_user=YES #e li chroota nelle proprie home
local_root=/srv/httpd/$USER #percorso delle home degli utenti locali user_sub_token=$USER
chroot_list_enable=NO #tutti gli utenti sono chrootati di default
chroot_list_file=/etc/vsftpd/chroot_list #contiene una lista degli utenti che non vengono chrootati
allow_writeable_chroot=YES #necessario con vsftpd v3.0.0 e successivi
listen=YES #esegue vsftpd in modalità standalone
pam_service_name=vsftpd #nome del file di PAM riguardante il servizio di vsftpd
tcp_wrappers=YES
pasv_enable=Yes
port_promiscuous=YES
pasv_addr_resolve=NO
pasv_max_port=10100
pasv_min_port=10090
ssl_enable=YES #abilita ssl
allow_anon_ssl=NO #disabilita login anonimi via ssl
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
ssl_ciphers=HIGH #compatibilità con FileZilla
rsa_cert_file=/etc/ssl/certs/vsftpd.pem #i vostri certificati per ssl
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem
/etc/pam.d/vsftpd
bash
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
#auth required pam_userdb.so db=/etc/vsftpd/logins crypt=hash
#account required pam_userdb.so db=/etc/vsftpd/logins crypt=hash
Configurazione di un utente con solo accesso ftp:
getent passwd prova
prova:x:502:502::/srv/httpd/prova:/bin/false
ls -lahd /srv/httpd/prova/
drwxr-xr-x 2 prova prova 4,0K 10 apr 16:59 /srv/httpd/prova/
Configurazione di un utente completo (ftp e ssh)
getent passwd prova2
prova2:x:502:502::/srv/httpd/prova2:/bin/bash
ls -lahd /srv/httpd/prova2/
drwxr-xr-x 2 prova2 prova2 4,0K 10 apr 16:59 /srv/httpd/prova2/
Notate che ho impostato "/srv/httpd/prova" come home per l'utente prova (anziché /home/prova) Ma è anche possibile fare un semplice link a questo percorso e lasciare immutato il percorso home dell'utente.
Nel qual caso, è necessario cambiare la riga di configurazione
local_root=/srv/httpd/$USER
con
local_root=/home/$USER
La home dell'utente deve coincidere con il parametro local_root
FIREWALL
Nelle distribuzioni RedHat-Like iptables è abilitato di default, e dovrete probabilmente creare una regola come questa:
iptables -A INPUT -p tcp -m tcp --sport 10090:10100 --dport 10090:10100 -m conntrack --ctstate ESTABLISHED -m comment --comment "Allow passive inbound connections" -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 10090:10100 --dport 10090:10100 -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment "Allow passive outbound connections" -j ACCEPT
A questo punto dovreste avere un sistema ftp sufficientemente sicuro con utenti decentemente gestibili
A presto!
Leggi il contenuto originale su Morrolinux