Posts Tagged ‘vsftp’

Utenti virtuali su vsftpd

Sono solito configurare vsftp come FTP server sui web server per permettere un accesso FTP sulla base del nome a dominio. Qualche giorno fa un mio cliente mi ha chiesto di creare multipli utenti ftp per un singolo dominio, ognuno con una root differente all’interno dello stesso dominio.

Questa è sempre stata la configurazione base di vsftpd (/etc/vsftpd.conf) che utilizzo:

listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
connect_from_port_20=YES
xferlog_enable=YES
pam_service_name=vsftpd
guest_enable=YES
guest_username=www-data
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
force_dot_files=YES
ftpd_banner=Welcome to my private FTP service.
local_umask=022

e questo è il mio /etc/pam.d/vsftpd

auth required pam_pwdfile.so pwdfile /etc/ftpd.passwd
account required pam_permit.so

La prima volta ho creato il file /etc/ftpd.passwd in questo modo:

htpasswd -c -d -b /etc/ftpd.passwd domain1.com <password>

Per gli utenti futuri, semplicemente va evitato il parametro ‘-c’:

htpasswd -d -b /etc/ftpd.passwd domain2.com <password>

Con questa configurazione tutti gli utenti hanno le seguenti credenziali:

  • host: domain1.com
  • username: domain1.com
  • password: password
  • port: 21
  • Root folder: /var/www/domain1/

Adesso il punto è: come possiamo creare utenti multipli per un singolo dominio e ognuno con una cartella root diversa?
La risposta è abbastanza semplice, seguitemi!

Create la directory /var/www/users e aggiungete la seguente linea alla fine di /etc/vsftpd.conf:

user_config_dir=/var/www/users

All’interno della directory /var/www/users create un file per ogni utente virtuale (per esempio per l’utente user1.domain1.com) contenente una linea con la directory base per quell’utente:

echo "local_root=/var/www/domain1.com/pub/user1" > /var/www/users/user1.domain1.com

Adesso aggiungete il nuovo nome utente e password al file /etc/ftpd.passwd come al solito:

htpasswd -d -b /etc/ftpd.passwd user1.domain1.com <password>

Riavviate il demone vsftpd e testate la vostra nuova configurazione!