Scrivo questo post giusto per ricorarmi i passaggi nel caso dovessi ripetere l’operazone nel futuro, personalmente preferisco utilizzare sftp e scp per trasferire files da e per i server Linux, ma in qualche occasione viene richiesto ftp e quindi ecco come fare.
Sto utilizzando la distribuzione Debian, versione 6.0.2
Installo i pacchetti necessari:
aptitude install pure-ftpd pure-ftpd-common openssl
Controllo che sia impostata la modalita’ “standalone” nel file di configurazione /etc/default/pure-ftpd-common:
grep "STANDALONE_OR_INETD" /etc/default/pure-ftpd-common
Dovrei ottenere questo risultato:
STANDALONE_OR_INETD=standalone
..eventualmente vado a modificare il file.
Vado a modificare la configurazione di default:
cd /etc/pure-ftpd/conf
Abilito la modalita’ passiva. 121.134.156.178 e’ l’IP pubblico del server ed e’ necessario che il firewall consenta l’accesso alle porte da 4500 a 4600
echo ,21 > Bind echo 121.134.156.178 > ForcePassiveIP echo 4500 4600 > PassivePortRange
Applico alcuni accorgimenti di sicurezza:
echo yes > ChrootEveryone echo yes > NoChmod echo yes > BrokenClientsCompatibility echo 4 > MaxClientsPerIP echo 10 > MaxClientsNumber echo 1 > TLS
Disabilito tutti i tipi di autenticazione e abilito l’autenticazione tramite database (testuale) di utenti virtuali
echo no > PAMAuthentication echo no > UnixAuthentication echo /etc/pure-ftpd/pureftpd.pdb > PureDB ln -s /etc/pure-ftpd/conf/PureDB ../auth/50pure
Creo un gruppo ed un utente di sistema (reale) apposito a cui associare gli utenti virtuali. Questo utente non avra’ ne’ shell ne’ home directory
groupadd -g 2001 ftpgroup useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
Ora posso iniziare a creare gli utenti virtuali tramite il comando pure-pw adduser
pure-pw useradd myfirstuser -u ftpuser -d /var/ftp/public/myfirstuser pure-pw mkdb
Dopo ogni modifica al database testuale degli utenti virtuali (/etc/pure-ftpd/pureftpd.passwd) e’ necessario rigenerare il database binario utilizzato da pure-ftpd (/etc/pure-ftpd/pureftpd.pdb). Il comando pure-pw mkdb fa proprio questo.
Se pero’ aggiungiamo al primo comando il parametro -m, si dira’ a pure-pw di aggiornare automaticamente anche il database binario. In questo modo non servira’ il secondo comando pure-pw mkdb.
Creo ora la directory principale dell’utente virtuale (questa operazione puo’ essere ommessa se il server pure-ftpd viene lanciato con l’opzione -j che permettera’ la generazione automatica della directory al primo login dell’utente, personalmente preferisco generare manualmente le directory)
mkdir -p /var/ftp/public/myfirstuser chown ftpuser:ftpgroup /var/ftp/public/myfirstuser
Genero ora un certificato ssl per il support TLS/SSL (vedi sopra il comando “echo 1 > TLS”)
openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem chmod 600 /etc/ssl/private/pure-ftpd.pem
Riavvio il server e posso provare l’accesso ftp
/etc/init.d/pure-ftpd restart
Alcuni utili comandi:
Lista degli utenti virtuali
pure-pw list
Modifica della password di un utente
pure-pw passwd myfirstuser
Visualizzo i dettagli di un utente
pure-pw show myfirstuser
Modifico dei dettagli di un utente
pure-pw usermod myfirstuser -n 1000 -N 100 pure-pw mkdb
Elimino un utente virtuale e aggiorno subito il database binario (-m)
pure-pw userdel myfirstuser -m
Per monitorare gli utenti virtuali fpt collegati, posso utilizzare il comando
pure-ftpwho
La lista delle direttive di configurazione per Pure-FTPd su Debian/Ubuntu:
Flag | Filename | Value |
---|---|---|
-W | AllowAnonymousFXP | |
-z | AllowDotFiles | |
-w | AllowUserFXP | |
-O %s | AltLog | string |
-t %s | AnonymousBandwidth | range |
-M | AnonymousCanCreateDirs | |
-i | AnonymousCantUpload | |
-e | AnonymousOnly | |
-q %d:%d | AnonymousRatio | range |
-s | AntiWarez | |
-r | AutoRename | |
-S %s | Bind | string |
-b | BrokenClientsCompatibility | |
-o | CallUploadScript | |
-A | ChrootEveryone | |
-j | CreateHomeDir | |
-Z | CustomerProof | |
-B | Daemonize | |
-D | DisplayDotFiles | |
-H | DontResolve | |
-P %s | ForcePassiveIP | IP-number |
-F %s | FortunesFile | string |
-4 | IPV4Only | |
-6 | IPV6Only | |
-K | KeepAllFiles | |
-L %d:%d | LimitRecursion | range |
-1 | LogPID | |
-c %d | MaxClientsNumber | |
-C %d | MaxClientsPerIP | integer |
-k %d | MaxDiskUsage | integer |
-I %d | MaxIdleTime | integer |
-m %d | MaxLoad | integer |
-u %d | MinUID | integer |
-N | NATmode | |
-E | NoAnonymous | |
-R | NoChmod | |
-G | NoRename | |
-0 | NoTruncate | |
-p %d:%d | PassivePortRange | range |
-y %d:%d | PerUserLimits | range |
-X | ProhibitDotFilesRead | |
-x | ProhibitDotFilesWrite | |
-n %d:%d | Quota | range |
-f %s | SyslogFacility | string |
-Y %d | TLS | integer |
-a %d | TrustedGID | integer |
-V %s | TrustedIP | IP-number |
-U %s:%s | Umask | file:dir |
-T %s | UserBandwidth | range |
-Q %d:%d | UserRatio | range |
-d | VerboseLog |
ottimo, la ringrazio tanto del suo lavoro che mi è stato utilissimo, ottimo lavoro