Successivamente, aggiungiamo l'autenticazione tramite database PureDB, che ci permette di usare utenti virtuali, in aggiunta agli utenti di sistema:
Codice: [Visualizza]
# cd /etc/pure-ftpd/auth/ # rm * # echo '/etc/pure-ftpd/pureftpd.pdb' > ../conf/PureDB # ln -s ../conf/PureDB 10puredb
Codice: [Visualizza]
# ls -lA totale 0 lrwxrwxrwx 1 root root 14 feb 21 22:42 10puredb -> ../conf/PureDB
Codice: [Visualizza]
# ln -s ../conf/PAMAuthentication 20PAMAuthentication
A questo punto passiamo alla creazione di un nuovo utente virtuale FTP, ftp_pincopallino, che deve accedere alla cartella /vhosts/pincopallino.it/, con i diritti di lettura e scrittura del server web. Ci verrà chiesto la password per due volte, che copia-incolliamo da un database di password, possibilmente generato secondo i criteri di sicurezza con almeno 8, meglio 10, caratteri alfanumerici, ad esempio: 5wGCSp3Gc5. Al posto del codice 33 possiamo usare www-data:
Codice: [Visualizza]
# pure-pw useradd ftp_pincopallino -m -u 33 -g 33 -d /vhosts/pincopallino.it/ Password: Enter it again:
Codice: [Visualizza]
# /etc/init.d/pure-ftpd restart
Codice: [Visualizza]
Restarting ftp server: Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/pureftpd.pdb -l pam -u 1000 -E -8 UTF-8 -O clf:/var/log/pure-ftpd/transfer.log -B
Codice: [Visualizza]
21:51:34 Risposta: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 21:51:34 Risposta: 220-You are user number 1 of 50 allowed. 21:51:34 Risposta: 220-Local time is now 21:51. Server port: 21. 21:51:34 Risposta: 220-This is a private system - No anonymous login 21:51:34 Risposta: 220-IPv6 connections are also welcome on this server. 21:51:34 Risposta: 220 You will be disconnected after 15 minutes of inactivity. 21:51:34 Comando: USER ftp_pincopallino 21:51:34 Risposta: 331 User ftp_pincopallino OK. Password required 21:51:34 Comando: PASS * 21:51:36 Risposta: 530 Sorry, but I can't trust you 21:51:36 Errore: Errore grave 21:51:36 Errore: Impossibile collegarsi al server
Codice: [Visualizza]
# echo '1' > /etc/pure-ftpd/conf/MinUID # /etc/init.d/pure-ftpd restart Restarting ftp server: Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/pureftpd.pdb -l pam -u 1 -E -8 UTF-8 -O clf:/var/log/pure-ftpd/transfer.log -B
Codice: [Visualizza]
# echo 'yes' > /etc/pure-ftpd/conf/ChrootEveryone # /etc/init.d/pure-ftpd restart Restarting ftp server: Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/pureftpd.pdb -l pam -u 1 -E -8 UTF-8 -O clf:/var/log/pure-ftpd/transfer.log -A -B
Per tutte le possibili configurazioni esiste un file che contiene i nomi dei file da creare, e con un po' di intuizione si può quindi rendere il server parecchio versatile: /usr/sbin/pure-ftpd-wrapper. All'inizio si trova questa lista, che riportiamo qui per completezza. Dove appare un parse_number, il valore è numerico, con parse_string è una stringa, altrimenti yes oppure no. Il parametro in parentesi quadre viene poi aggiunto alla riga di comando di avvio del server, come abbiamo visto qui sopra:
Codice: [Visualizza]
my %conf = ('AllowAnonymousFXP' => ['-W'], 'AllowDotFiles' => ['-z'], 'AllowUserFXP' => ['-w'], 'AltLog' => ['-O %s', \&parse_string], 'AnonymousBandwidth' => ['-t %s', \&parse_number_1_2], 'AnonymousCanCreateDirs' => ['-M'], 'AnonymousCantUpload' => ['-i'], 'AnonymousOnly', => ['-e'], 'AnonymousRatio' => ['-q %d:%d', \&parse_number_2], 'AntiWarez' => ['-s'], 'AutoRename' => ['-r'], 'Bind' => ['-S %s', \&parse_string], 'BrokenClientsCompatibility' => ['-b'], 'CallUploadScript' => ['-o'], 'ChrootEveryone' => ['-A'], 'CreateHomeDir' => ['-j'], 'CustomerProof' => ['-Z'], 'Daemonize' => ['-B'], 'DisplayDotFiles' => ['-D'], 'DontResolve' => ['-H'], 'ForcePassiveIP' => ['-P %s', \&parse_string], 'FortunesFile' => ['-F %s', \&parse_filename], 'FSCharset' => ['-8 %s', \&parse_string], 'ClientCharset' => ['-9 %s', \&parse_string], 'IPV4Only' => ['-4'], 'IPV6Only' => ['-6'], 'KeepAllFiles' => ['-K'], 'LimitRecursion' => ['-L %d:%d', \&parse_number_2_unlimited], 'LogPID' => ['-1'], 'MaxClientsNumber' => ['-c %d', \&parse_number_1], 'MaxClientsPerIP' => ['-C %d', \&parse_number_1], 'MaxDiskUsage' => ['-k %d', \&parse_number_1], 'MaxIdleTime' => ['-I %d', \&parse_number_1], 'MaxLoad' => ['-m %d', \&parse_number_1], 'MinUID' => ['-u %d', \&parse_number_1], 'NATmode' => ['-N'], 'NoAnonymous' => ['-E'], 'NoChmod' => ['-R'], 'NoRename' => ['-G'], 'NoTruncate' => ['-0'], 'PassivePortRange' => ['-p %d:%d', \&parse_number_2], 'PerUserLimits' => ['-y %d:%d', \&parse_number_2], 'ProhibitDotFilesRead' => ['-X'], 'ProhibitDotFilesWrite' => ['-x'], 'Quota' => ['-n %d:%d', \&parse_number_2], 'SyslogFacility' => ['-f %s', \&parse_word, 99], 'TLS' => ['-Y %d', \&parse_number_1], 'TrustedGID' => ['-a %d', \&parse_number_1], 'TrustedIP' => ['-V %s', \&parse_ip], 'Umask' => ['-U %s:%s', \&parse_umask], 'UserBandwidth' => ['-T %s', \&parse_number_1_2], 'UserRatio' => ['-Q %d:%d', \&parse_number_2], 'VerboseLog' => ['-d'], );