Vsftpd è uno dei server FTP più sicuri e veloci per Linux. Di solito vsftpd è configurato per funzionare con gli utenti del sistema. Questo documento descrive come installare un server vsftpd che utilizza utenti virtuali da un database MySQL invece di utenti del sistema reale. Questo è molto più performante e permette di avere migliaia di utenti ftp su una singola macchina.
Per l'amministrazione del database MySQL è possibile utilizzare strumenti web based come phpMyAdmin che verranno installati anche in questo howto. phpMyAdmin è una comoda interfaccia grafica che significa che non devi scherzare con la riga di comando.
Questo tutorial è basato su Ubuntu 12.04. Dovresti già aver configurato un sistema Ubuntu 12.04 di base.
Questo howto vuole essere una guida pratica; non copre le basi teoriche. Sono trattati in molti altri documenti nel Web.
Questo documento viene fornito senza garanzie di alcun tipo! Voglio dire che questo non è l'unico modo per creare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo in cui prendo. Non garantisco che questo funzionerà per te!
1 Nota preliminare
In questo tutorial utilizzo l'hostname server1.example.com con l'indirizzo IP 192.168.0.100. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato.
Poiché dobbiamo eseguire tutti i passaggi di questo tutorial con i privilegi di root, possiamo anteporre tutti i comandi in questo tutorial con la stringa sudo, oppure diventare root in questo momento digitando
sudo su
2 Installa vsftpd, MySQL e phpMyAdmin
Vsftpd non ha un supporto MySQL integrato, quindi dobbiamo usare PAM per autenticarci sul database MySQL. Quindi installiamo libpam-mysql oltre a vsftpd, MySQL e phpMyAdmin:
apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap
Ti verranno poste le seguenti domande:
Nuova password per l'utente "root" di MySQL:<-- yourrootsqlpassword
Ripeti la password per l'utente "root" di MySQL:<-- yourrootsqlpassword
Server Web da riconfigurare automaticamente:<-- apache2
Configurare il database per phpmyadmin con dbconfig-common? <-- No
Identificatore risorsa uniforme del server LDAP: <-- ENTER
Nome distinto della base di ricerca: <-- ENTER
Versione LDAP da utilizzare: <-- 3
Rendi l'amministratore del database locale root: <-- Sì
Il database LDAP richiede l'accesso? <-- Nessun
account LDAP per root: <-- ENTER
password account root LDAP: <-- ldaprootpw
3 Creare il database MySQL per vsftpd
Ora creiamo un database chiamato vsftpd e un utente MySQL chiamato vsftpd che il demone vsftpd utilizzerà in seguito per connettersi al database vsftpd:
mysql -u root -p
CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* A 'vsftpd'@'localhost' IDENTIFICATO DA 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE , CREATE, DROP ON vsftpd.* IN 'vsftpd'@'localhost.localdomain' IDENTIFICATO DA 'ftpdpass';
PRIVILEGI FLUSH;
Sostituisci la stringa ftpdpass con la password che desideri utilizzare per l'utente MySQL vsftpd. Sempre sulla shell MySQL, creiamo la tabella del database di cui abbiamo bisogno (sì, c'è solo una tabella!):
USE vsftpd;
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNICO (
`nome utente`
)
) MOTORE =MYISAM;
quit;
Come avrai notato, con l'abbandono; comando abbiamo lasciato la shell MySQL e siamo tornati sulla shell Linux.
A proposito, (suppongo che il nome host del tuo sistema server ftp sia server1.example.com) puoi accedere a phpMyAdmin sotto http://server1.example.com/phpmyadmin/ (puoi anche usare l'indirizzo IP invece di server1 .example.com) in un browser e accedi come utente vsftpd. Quindi puoi dare un'occhiata al database. Successivamente puoi usare phpMyAdmin per amministrare il tuo server vsftpd.
4 Configura vsftpd
Per prima cosa creiamo un utente non privilegiato chiamato vsftpd (con la homedir /home/vsftpd) appartenente al gruppo nogroup. Eseguiremo vsftpd sotto questo utente e le directory FTP dei nostri utenti virtuali saranno nella directory /home/vsftpd (ad es. /home/vsftpd/user1, /home/vsftpd/user2, ecc.).
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
Quindi facciamo un backup del file originale /etc/vsftpd.conf e creiamo il nostro:
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null> /etc/vsftpd.conf
vi /etc/vsftpd.conf
Il file dovrebbe avere i seguenti contenuti:
listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf |
Le opzioni di configurazione sono spiegate su http://vsftpd.beasts.org/vsftpd_conf.html. Le opzioni importanti per la nostra configurazione virtuale sono chroot_local_user, guest_enable, guest_username, user_sub_token, local_root e virtual_use_local_privs.
Con l'opzione user_config_dir è possibile specificare una directory per i file di configurazione per utente che sovrascrivono parti delle impostazioni globali. Questo è totalmente facoltativo e dipende da te se desideri utilizzare questa funzione. Tuttavia, dovremmo creare quella directory ora:
mkdir /etc/vsftpd_user_conf
Ora dobbiamo configurare PAM in modo che utilizzi il database MySQL per autenticare i nostri utenti FTP virtuali invece di /etc/passwd e /etc/shadow. La configurazione PAM per vsftpd è in /etc/pam.d/vsftpd. Facciamo un backup del file originale e ne creiamo uno nuovo come questo:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
cat /dev/null> /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 |
Assicurati di sostituire la password MySQL con la tua!
Successivamente, riavviamo vsftpd:
/etc/init.d/vsftpd restart
5 Crea il primo utente virtuale
Per popolare il database puoi usare la shell MySQL:
mysql -u root -p
USE vsftpd;
Ora creiamo l'utente virtuale testuser con la password segreta (che verrà archiviata crittografata utilizzando la funzione PASSWORD di MySQL):
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;
la directory home di testuser è /home/vsftpd/testuser; sfortunatamente vsftpd non crea automaticamente quella directory se non esiste. Pertanto lo creiamo manualmente ora e lo rendiamo di proprietà dell'utente vsftpd e del gruppo nogroup:
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser
Ora apri il tuo programma client FTP sulla tua stazione di lavoro (qualcosa come FileZilla o FireFTP) e prova a connetterti. Come nome host utilizzi server1.example.com (o l'indirizzo IP del sistema), il nome utente è testuser e la password è segreta.
Se riesci a connetterti, congratulazioni! In caso contrario, qualcosa è andato storto.
6 Amministrazione del database
Per la maggior parte delle persone è più facile se hanno un front-end grafico per MySQL; quindi puoi anche usare phpMyAdmin (in questo esempio sotto http://server1.example.com/phpmyadmin/) per amministrare il database vsftpd.
Ogni volta che crei o modifichi un utente, assicurati di utilizzare la funzione PASSWORD di MySQL per crittografare la password di quell'utente. Inoltre, quando crei un nuovo utente virtuale, non dimenticare di creare la directory home di quell'utente sulla shell, come mostrato alla fine del capitolo precedente.
7 link
- vsftpd:http://vsftpd.beasts.org/
- Ubuntu:http://www.ubuntu.com/