{"id":270,"date":"2011-05-02T08:16:37","date_gmt":"2011-05-02T07:16:37","guid":{"rendered":"http:\/\/www.carinato.net\/?p=270"},"modified":"2011-05-02T08:16:37","modified_gmt":"2011-05-02T07:16:37","slug":"installare-pure-ftpd-con-utenti-virtuali","status":"publish","type":"post","link":"https:\/\/carinato.com\/?p=270","title":{"rendered":"Installare pure-ftpd con utenti virtuali"},"content":{"rendered":"<p>Scrivo questo post giusto per ricorarmi i passaggi nel caso dovessi ripetere l&#8217;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.<\/p>\n<p>Sto utilizzando la distribuzione Debian, versione 6.0.2<\/p>\n<p>Installo i pacchetti necessari:<\/p>\n<pre>aptitude install pure-ftpd pure-ftpd-common openssl<\/pre>\n<p>Controllo che sia impostata la modalita&#8217; &#8220;standalone&#8221; nel file di configurazione \/etc\/default\/pure-ftpd-common:<\/p>\n<pre>grep \"STANDALONE_OR_INETD\" \/etc\/default\/pure-ftpd-common<\/pre>\n<p>Dovrei ottenere questo risultato:<\/p>\n<pre>STANDALONE_OR_INETD=standalone<\/pre>\n<p>..eventualmente vado a modificare il file.<\/p>\n<p>Vado a modificare la configurazione di default:<\/p>\n<pre>cd \/etc\/pure-ftpd\/conf<\/pre>\n<p>Abilito la modalita&#8217; passiva. 121.134.156.178 e&#8217; l&#8217;IP pubblico del server ed e&#8217; necessario che il firewall consenta l&#8217;accesso alle porte da 4500 a 4600<\/p>\n<pre>echo ,21 > Bind\necho 121.134.156.178 > ForcePassiveIP\necho 4500 4600 > PassivePortRange<\/pre>\n<p>Applico alcuni accorgimenti di sicurezza:<\/p>\n<pre>echo yes &gt; ChrootEveryone\necho yes &gt; NoChmod\necho yes &gt; BrokenClientsCompatibility\necho 4 &gt; MaxClientsPerIP\necho 10 &gt; MaxClientsNumber\necho 1 &gt; TLS<\/pre>\n<p>Disabilito tutti i tipi di autenticazione e abilito l&#8217;autenticazione tramite database (testuale) di utenti virtuali<\/p>\n<pre>echo no &gt; PAMAuthentication\necho no &gt; UnixAuthentication\necho \/etc\/pure-ftpd\/pureftpd.pdb &gt; PureDB\nln -s \/etc\/pure-ftpd\/conf\/PureDB ..\/auth\/50pure<\/pre>\n<p>Creo un gruppo ed un utente di sistema (reale) apposito a cui associare gli utenti virtuali. Questo utente non avra&#8217; ne&#8217; shell ne&#8217; home directory<\/p>\n<pre>groupadd -g 2001 ftpgroup\nuseradd -u 2001 -s \/bin\/false -d \/bin\/null -c \"pureftpd user\" -g ftpgroup ftpuser<\/pre>\n<p>Ora posso iniziare a creare gli utenti virtuali tramite il comando pure-pw adduser<\/p>\n<pre>pure-pw useradd myfirstuser -u ftpuser -d \/var\/ftp\/public\/myfirstuser\npure-pw mkdb<\/pre>\n<p>Dopo ogni modifica al database testuale degli utenti virtuali (\/etc\/pure-ftpd\/pureftpd.passwd) e&#8217; necessario rigenerare il database binario utilizzato da pure-ftpd (\/etc\/pure-ftpd\/pureftpd.pdb). Il comando pure-pw mkdb fa proprio questo.<br \/>\nSe pero&#8217; aggiungiamo al primo comando il parametro -m, si dira&#8217; a pure-pw di aggiornare automaticamente anche il database binario. In questo modo non servira&#8217; il secondo comando pure-pw mkdb.<\/p>\n<p>Creo ora la directory principale dell&#8217;utente virtuale (questa operazione puo&#8217; essere ommessa se il server pure-ftpd viene lanciato con l&#8217;opzione -j che permettera&#8217; la generazione automatica della directory al primo login dell&#8217;utente, personalmente preferisco generare manualmente le directory)<\/p>\n<pre>mkdir -p \/var\/ftp\/public\/myfirstuser\nchown ftpuser:ftpgroup \/var\/ftp\/public\/myfirstuser<\/pre>\n<p>Genero ora un certificato ssl per il support TLS\/SSL (vedi sopra il comando &#8220;echo 1 &gt; TLS&#8221;)<\/p>\n<pre>openssl req -x509 -nodes -newkey rsa:1024 -keyout \/etc\/ssl\/private\/pure-ftpd.pem -out \/etc\/ssl\/private\/pure-ftpd.pem\nchmod 600 \/etc\/ssl\/private\/pure-ftpd.pem<\/pre>\n<p>Riavvio il server e posso provare l&#8217;accesso ftp<\/p>\n<pre>\/etc\/init.d\/pure-ftpd restart<\/pre>\n<p>Alcuni utili comandi:<br \/>\nLista degli utenti virtuali<\/p>\n<pre>pure-pw list<\/pre>\n<p>Modifica della password di un utente<\/p>\n<pre>pure-pw passwd myfirstuser<\/pre>\n<p>Visualizzo i dettagli di un utente<\/p>\n<pre>pure-pw show myfirstuser<\/pre>\n<p>Modifico dei dettagli di un utente<\/p>\n<pre>pure-pw usermod myfirstuser -n 1000 -N 100\npure-pw mkdb<\/pre>\n<p>Elimino un utente virtuale e aggiorno subito il database binario (-m)<\/p>\n<pre>pure-pw userdel myfirstuser -m<\/pre>\n<p>Per monitorare gli utenti virtuali fpt collegati, posso utilizzare il comando<\/p>\n<pre>pure-ftpwho<\/pre>\n<p>La lista delle direttive di configurazione per Pure-FTPd su Debian\/Ubuntu:<\/p>\n<table width=\"566\" style=\"height: 941px;\">\n<tbody>\n<tr>\n<th>Flag<\/th>\n<th>Filename<\/th>\n<th>Value<\/th>\n<\/tr>\n<tr>\n<td>-W<\/td>\n<td>AllowAnonymousFXP<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-z<\/td>\n<td>AllowDotFiles<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-w<\/td>\n<td>AllowUserFXP<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-O %s<\/td>\n<td>AltLog<\/td>\n<td>string<\/td>\n<\/tr>\n<tr>\n<td>-t %s<\/td>\n<td>AnonymousBandwidth<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-M<\/td>\n<td>AnonymousCanCreateDirs<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-i<\/td>\n<td>AnonymousCantUpload<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-e<\/td>\n<td>AnonymousOnly<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-q %d:%d<\/td>\n<td>AnonymousRatio<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-s<\/td>\n<td>AntiWarez<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-r<\/td>\n<td>AutoRename<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-S %s<\/td>\n<td>Bind<\/td>\n<td>string<\/td>\n<\/tr>\n<tr>\n<td>-b<\/td>\n<td>BrokenClientsCompatibility<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-o<\/td>\n<td>CallUploadScript<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-A<\/td>\n<td>ChrootEveryone<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-j<\/td>\n<td>CreateHomeDir<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-Z<\/td>\n<td>CustomerProof<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-B<\/td>\n<td>Daemonize<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-D<\/td>\n<td>DisplayDotFiles<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-H<\/td>\n<td>DontResolve<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-P %s<\/td>\n<td>ForcePassiveIP<\/td>\n<td>IP-number<\/td>\n<\/tr>\n<tr>\n<td>-F %s<\/td>\n<td>FortunesFile<\/td>\n<td>string<\/td>\n<\/tr>\n<tr>\n<td>-4<\/td>\n<td>IPV4Only<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-6<\/td>\n<td>IPV6Only<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-K<\/td>\n<td>KeepAllFiles<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-L %d:%d<\/td>\n<td>LimitRecursion<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-1<\/td>\n<td>LogPID<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-c %d<\/td>\n<td>MaxClientsNumber<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-C %d<\/td>\n<td>MaxClientsPerIP<\/td>\n<td>integer<\/td>\n<\/tr>\n<tr>\n<td>-k %d<\/td>\n<td>MaxDiskUsage<\/td>\n<td>integer<\/td>\n<\/tr>\n<tr>\n<td>-I %d<\/td>\n<td>MaxIdleTime<\/td>\n<td>integer<\/td>\n<\/tr>\n<tr>\n<td>-m %d<\/td>\n<td>MaxLoad<\/td>\n<td>integer<\/td>\n<\/tr>\n<tr>\n<td>-u %d<\/td>\n<td>MinUID<\/td>\n<td>integer<\/td>\n<\/tr>\n<tr>\n<td>-N<\/td>\n<td>NATmode<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-E<\/td>\n<td>NoAnonymous<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-R<\/td>\n<td>NoChmod<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-G<\/td>\n<td>NoRename<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-0<\/td>\n<td>NoTruncate<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-p %d:%d<\/td>\n<td>PassivePortRange<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-y %d:%d<\/td>\n<td>PerUserLimits<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-X<\/td>\n<td>ProhibitDotFilesRead<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-x<\/td>\n<td>ProhibitDotFilesWrite<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>-n %d:%d<\/td>\n<td>Quota<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-f %s<\/td>\n<td>SyslogFacility<\/td>\n<td>string<\/td>\n<\/tr>\n<tr>\n<td>-Y %d<\/td>\n<td>TLS<\/td>\n<td>integer<\/td>\n<\/tr>\n<tr>\n<td>-a %d<\/td>\n<td>TrustedGID<\/td>\n<td>integer<\/td>\n<\/tr>\n<tr>\n<td>-V %s<\/td>\n<td>TrustedIP<\/td>\n<td>IP-number<\/td>\n<\/tr>\n<tr>\n<td>-U %s:%s<\/td>\n<td>Umask<\/td>\n<td>file:dir<\/td>\n<\/tr>\n<tr>\n<td>-T %s<\/td>\n<td>UserBandwidth<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-Q %d:%d<\/td>\n<td>UserRatio<\/td>\n<td>range<\/td>\n<\/tr>\n<tr>\n<td>-d<\/td>\n<td>VerboseLog<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Scrivo questo post giusto per ricorarmi i passaggi nel caso dovessi ripetere l&#8217;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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-270","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/posts\/270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=270"}],"version-history":[{"count":0,"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/posts\/270\/revisions"}],"wp:attachment":[{"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}