Posts Tagged ‘ftp’

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!

Trasferire un intero sito via ftp con lftp

In questi giorni ho dovuto trasferire alcuni siti un po’ grossi da un server ad un altro e l’unico mezzo che mi era permesso era tramite una connessione FTP in quanto il server di destinazione non dispone di altri tipi di accesso. Poiché la quantità di files era notevole (circa 12GB) ho optato per crearmi un piccolo script da dare in pasto a lftp aperto dentro una sessione di screen in modo tale da non occuparmi per giorni un terminale.

Mi sono pertanto creato uno script chiamato sendfiles.sh in questo modo:

set ftp:ssl-allow no
open -u username,password example.com
mirror -c -R /source-path /destination-path
quit

Dove i seguenti campi sono rispettivamente:

username: nome utente per accesso ftp
password: password per accesso ftp
example.com: server ftp di destinazione
source-path: path sorgente sul server locale
destination-path: path remoto sull’ftp (dove / è la root dell’ftp stesso)

Per avviare il tutto basterà aprire una sessione di screen (nel caso in cui vogliate lasciare il processo in background sul server, altrimenti potete farne anche a meno) e lanciare lo script in questo modo:

lftp -f sendfiles.sh