PI Guide/ Server FTP a prova d'intruso

L'accoppiata PureFTPd e MySQL ci permette di allestire su Linux un server ad alte prestazioni con centinaia di utenti virtuali e con un occhio di riguardo alla sicurezza

Quando si gestiscono molti host su uno stesso server bisogna attivare numerosi account FTP e di conseguenza creare numerosi utenti sul sistema. Una tecnica molto più semplice e pratica da attuare è la creazione di un database contenente una serie di utenti virtuali che faranno riferimento a un utente reale operante su un servizio FTP. Questa tecnica ha il chiaro vantaggio di non intaccare la sicurezza di ogni singolo account poiché non esiste un file in cui sono memorizzati nomi utenti e password. Un utente corrisponderà a un semplice inserimento nel database e la password verrà criptata automaticamente tramite la cifratura md5 offerta da MySQL. Ogni user avrà accesso alla sua cartella personale, avrà un limite di banda, una quota massima e potrà essere abilitato/disabilitato cambiando il suo status. Le operazioni di inserimento possono apparire complesse se attuate tramite una query MySQL: è per questo che scopriremo anche come aggiornare la tabella degli account tramite il software PhpMyAdmin, che consente di interagire con i DB MySQL in modo rapido e indolore. La procedura che segue è basata su una distribuzione Fedora.

Perché PhpMyAdmin?
La gestione di un DB da shell MySQL non è un cosa immediata. Per gli utenti più avanzati potrebbe essere interessante usarla, ma l'inserimento di migliaia di utenti risulterebbe comunque molto più semplice tramite un software ben strutturato graficamente e progettato per facilitare queste operazioni. Una volta creato il nostro DB potremo inserire i numerosi utenti in pochi semplici passaggi e modificare i campi di testo in pochi secondi. Con PhpMyAdmin anche la modifica di un'utente è un'operazione rapida: basta aprire l'elemento inserito in tabella e modificare il campo interessato. Ciò si rivela molto utile per assegnare quote, modificare i limiti di banda o disabilitare un utente per un qualsiasi motivo.

PhpMyAdmin è il leader indiscusso del settore, ma ciò non toglie che esistano numerose alternative. Qualora volessimo mettere alla prova una soluzione diversa da PhpMyAdmin, possiamo affidarci ad Adminer. Si tratta di una versione minimizzata di PhpMyAdmin, ridotto in un unico file PHP e pertanto decisamente leggero e facile da installare. ╚ corredato di quasi tutte le funzioni offerte da PhpMyAdmin e consente anche personalizzazioni grafiche tramite CSS.
Installiamo l'occorrente
I software necessari non sono disponibili nei repository ufficiali. Pertanto useremo dei repo "alternativi" (Epel).
Per importare i repository, nel terminale usiamo il comando rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*. Lanciamo yum -y install epel-release e yum -y install yum-priorities. Attendiamo che vengano scaricati tutti i pacchetti.


Sempre da terminale digitiamo il comando nano /etc/yum.repos.d/epel.repo. Spostiamoci nella sezione Epel e individuiamo la riga enabled=1: premiamo Invio e scriviamo priority=10.


Salviamo il file con Ctrl+X e confermiamo con Invio. Aggiorniamo dunque i pacchetti con il comando yum update e attendiamo che termini il download e la configurazione di tutte le dipendenze.


A questo punto possiamo lanciare il comando yum -y install mariadb mariadb-server phpmyadmin httpd php per installare alcuni dei software che ci serviranno nel corso della nostra opera.


Configuriamo PhpMyAdmin
Per rendere accessibile PhpMyAdmin non solo da locale ma anche da remoto, dobbiamo editare il file di configurazione di Apache: dunque, lanciamo il comando nano /etc/httpd/conf.d/phpMyAdmin.conf.


Nella sezione Directory /usr/share/phpMyAdmin/, commentiamo tutte le righe del campo IFModule e aggiungiamo i parametri Options Indexes, AllowOverride None, Require all granted. Infine, salviamo le modifiche apportate.


Affinché vada tutto liscio è necessario aprire le porte ad Apache. Lanciamo quindi firewall-cmd --permanent --zone=public --add-service=http, firewall-cmd --permanent --zone=public --add-service=https e firewall-cmd --reload.


Infine, con i comandi systemctl enable httpd.service e systemctl start httpd.service creiamo il servizio per il web server e avviamolo. A questo punto, PhpMyAdmin è pronto all'inserimento degli utenti virtuali che vogliamo creare.


╚ il momento del database
Anche il server MySQL deve essere adeguatamente configurato così da poter creare gli utenti virtuali.
Come fatto in precedenza per Apache, lanciamo i comandi systemctl enable mariadb.service e systemctl start mariadb.service per attivare e avviare un servizio anche per MariaDB (il server MySQL che utilizzeremo).


La configurazione del server MySQL è un'operazione molto semplice grazie a MariaDB. Da terminale eseguiamo il comando mysql_secure_installation: basterà rispondere a qualche domanda per avere un server ben configurato.


La prima richiesta è l'inserimento della password di MariaDB: se è già stato configurato in passato forniamo la chiave settata, altrimenti scegliamone una nuova (basterà premere Invio).


Alla richiesta successiva inseriamo Y per confermare e premiamo nuovamente Invio. Inseriamo la password due volte e confermiamo la nostra scelta. Facciamo in modo di tenerla bene a mente: ci servirà per le modifiche al DB.


La richiesta successiva è relativa all'utente anonimo che MariaDB crea di default, utile solo a fini di test. Confermiamone la rimozione e proseguiamo. Allo stesso modo rimuoviamo il database di prova creato automaticamente.


Per confermare le modifiche attuate fino ad ora dobbiamo rispondere a un'ultima richiesta: Reload privilege tables now? A tale quesito rispondiamo con Yes e confermiamo per proseguire. MariaDB è finalmente configurato!


Il primo utente FTP "virtuale"
Creiamo ora il database MySQL e definiamo gli account virtuali in una nuova tabella.
╚ arrivato il momento di installare PureFTPd. Per fare ciò lanciamo sul terminale yum -y install pure-ftpd. Ci servirà anche un utente FTP e dovrà appartenere a un gruppo che creeremo con groupadd -g 2500 ftpgroup.


Per creare l'utente, invece, usiamo useradd -u 2500 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser. Al posto di 2500 dovremo inserire un id che sia libero sul nostro sistema, sia per l'utente che per il gruppo.


Come fatto in precedenza per Apache, abilitiamo le porte anche per PureFTPd. Basta lanciare il comando firewall-cmd --permanent --zone=public --add-service=ftp e firewall-cmd --reload.


Accediamo alla console di MySQL con il comando mysql -u root -p e con il comando CREATE DATABASE pureftpd; creiamo il nostro DB che conterrà la tabella account con tutti gli utenti virtuali e garantirà la possibilità di effettuare delle query specifiche per i login.


Inseriamo GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass'; seguito da GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';.


Il campo "ftpdpass" può essere sostituito con una password a scelta. Aggiorniamo con FLUSH PRIVILEGES; e con USE pureftpd; selezioniamo il DB. Per creare la tabella usiamo la query presente nel file reperibile su questa pagina Web. Infine, terminiamo con quit;.


FTP e MySQL a braccetto
Come consentire a PureFTPd di effettuare richieste sul DB? Ecco la risposta.
Editiamo il file di configurazione con il comando nano /etc/pure-ftpd/pure-ftpd.conf. Assicuriamoci che le voci ChrootEveryone, CreateHomeDir siano su YES e decommentate e che MySQLConfigFile punti alla cartella /etc/pure-ftpd/pureftpd-mysql.conf.


Lanciamo cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf.bak per effettuare un backup delle configurazioni MySQL di PureFTPd e sostituiamolo con il file reperibile su questa pagina.


Per attivare TLS sul nostro server FTP lanciamo nuovamente nano /etc/pure-ftpd/pure-ftpd.conf e assicuriamoci che alcune righe siano decommentate. Nello specifico la riga TLS 1, la riga TLSCipherSuite HIGH e CERT FILE /etc/ssl/private/pure-ftpd.pem.


Con mkdir -p /etc/ssl/private/ creiamo la cartella dei certificati e con openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem creiamo un vero e proprio certificato.


Durante la creazione del certificato, ci vengono posti dei quesiti. Indichiamo la sigla IT per la nostra nazione, forniamo la città e tutti gli altri dati richiesti. Cambiamo i permessi al file appena creato: chmod 600 /etc/ssl/private/pure-ftpd.pem.


Per concludere, non dobbiamo fare altro che creare ed avviare il servizio per PureFTPd (come abbiamo già fatto con gli altri software). Lanciamo semplicemente systemctl enable pure-ftpd.service seguito da systemctl start pure-ftpd.service.


Collegamento al server FTP
Tutto è configurato ma senza utenti non si va da nessuna parte! Popoliamo dunque il database ed effettuiamo un primo test.
Per creare il primo utente ci affideremo alla shell MySQL. Lanciamo il comando mysql -u root -p per avviarla e digitiamo USE pureftpd; per selezionare il database che vogliamo popolare (quello creato in precedenza).


Popoliamo la tabella. Per farlo lanciamo INSERT INTO account (User, status,Password,Uid,Gid,Directory, ULBand,DLBand,comment,ipaccess,QuotaMax,QuotaFiles) VALUES ('utenteprovà, '1', MD5('temppassw'), '2500', '2500', '/cartellaperhostspaceutentè, 250, 2000, '', '*', 50,0);.


Così facendo abbiamo creato un utente con username utenteprova e password temppassw, uid e gid 2500, una banda di upload e download di 200 kbps e 2 Mbps e un limite di spazio per i file. Non resta che configurare il client. Scarichiamo Filezilla.


Il test è molto semplice: basterà inserire nella barra in alto l'IP del nostro server e i relativi dati di accesso. Verrà richiesta l'accettazione del certificato TLS e nella console vedremo la negoziazione degli identificativi. Al termine, verrà mostrato un messaggio di benvenuto.


L'inserimento di un'utente da shell MySQL può essere complesso. Puntiamo il browser alla pagina http://ipserver/PhpMyAdmin, inseriamo i dati di accesso e selezioniamo il nostro DB dal pannello di sinistra.


Facciamo clic sul pulsante Inserisci e compiliamo tutti i parametri visti in precedenza, ma in dei comodi campi di testo. Ricordiamoci di selezionare dal menu a tendina la crittografia MD5 e salviamo. Un nuovo utente è stato inserito!

14 Commenti alla Notizia PI Guide/ Server FTP a prova d'intruso
Ordina
  • Oddio! solo un incompetente totale come panda rossa può essere d'accordo con questo articolo (e infatti già lo vedo).

    Scrivere un articolo su come gestire un server LINUX (o BSD) senza nemmeno nominare SSH è un po' come lanciarsi da un aereo senza il paracadute! Davvero. E poi dire "a prova di intruso" con phpmyadmin esposto su internet? e poi con proftpd? Rotola dal ridere

    Prima di tutto. Per configurare il firewall decentemente bisogna farlo senza usare stà cosa chiamata "firewall-cmd" che è la prima volta che la vedo. Ho anche già visto che è molto meglio non usarlo e configurare il firewall manualmente (usando il ridicolo iptables su linux; oppure ipfw, ipfilter o meglio pf su bsd, ecc) mettendo la mano a quello senza usare sti wrapper che non servono a niente.

    Il server FTP è una tecnologia del millennio passato. E' mostruosamente meglio usare SSH, cioè SFTP (SSH File Transfer Protocol) per comodità, con autenticazione tramite chiave RSA ad almeno 4096 bits (di default ssh-keygen la genera a 2048). Il vetusto protocollo FTP è da buttare a mare. Inoltre ProFTPD è il server FTP più buggato del secolo. Molto famoso è stato l'exploit di proftpd che è stato usato per bucare la BBC ( https://vulners.com/zdt/1337DAY-ID-21719 oppure google "proftpd bbc") che è stato VENDUTO per MESI come 0day prima che proftpd sistemasse il bug definitivamente. ProFTPD è più colabrodo di Windows ME eppure c'è chi continua ad usarlo nonostante alternative migliori (2009 https://forums.proftpd.org/smf/index.php/topic,435... 2011 https://forums.proftpd.org/smf/index.php/topic,704... 2014 https://forums.proftpd.org/smf/index.php/topic,115... )

    L'articolo continua suggerendo di aggiungere eccezioni al firewall e a installare inutile software di amministrazione SUL SERVER, ma a che serve(r)???? Solo ad aggiungere buchi e vulnerabilità.
    SSH supporta il port forwading. Il firewall lo si configura sempre per permettere tutto il traffico sull'interfaccia di loopback. Basta usare un tunnel SSH e connettersi a localhost. phpMyAdmin Rotola dal ridere lo si installa nel PC di casa e lo si connette al DBMS sotto il tunnel di SSH.

    MariaDB è meglio di MySQL. Su questo sono d'accordo con chi ha scritto l'articolo se si fosse costretti ad usare MariaDB/MySQL. Ma perché continuare ad usare questo RDBMS? Esiste postgresql che è mostruosamente meglio su tutta la linea.

    Insomma.... bene dire che esiste Linux, ma se lo usi come fosse Windows Server 2003 allora è meglio che usi Windows. Si fa una figura migliore ad usare bene qualcosa di scarso, che a usare male qualcosa che è perfetto.
    non+autenticato
  • - Scritto da: Ben10

    > Insomma.... bene dire che esiste Linux, ma se lo
    > usi come fosse Windows Server 2003 allora è
    > meglio che usi Windows. Si fa una figura migliore
    > ad usare bene qualcosa di scarso, che a usare
    > male qualcosa che è
    > perfetto.

    Si ma a proposito di firgure migliori, guarda che nell'articolo non si parla di PROFTPD ma di PUREFTPD eh !
    non+autenticato
  • - Scritto da: Wooommmm
    > - Scritto da: Ben10
    >
    > > Insomma.... bene dire che esiste Linux, ma se lo
    > > usi come fosse Windows Server 2003 allora è
    > > meglio che usi Windows. Si fa una figura
    > migliore
    > > ad usare bene qualcosa di scarso, che a usare
    > > male qualcosa che è
    > > perfetto.
    >
    > Si ma a proposito di firgure migliori, guarda che
    > nell'articolo non si parla di PROFTPD ma di
    > PUREFTPD eh
    > !

    come se cambiasse qualcosa. Si trova al secondo posto nella lista. Immagina di leggere pureftp quando leggi il post ed è tutto uguale. Tutti i concetti rimangono validi. Cmq vero che mi ero confuso mentre leggevo.
    non+autenticato
  • - Scritto da: Ben10
    > - Scritto da: Wooommmm
    > > - Scritto da: Ben10
    > >
    > > > Insomma.... bene dire che esiste Linux, ma se
    > lo
    > > > usi come fosse Windows Server 2003 allora è
    > > > meglio che usi Windows. Si fa una figura
    > > migliore
    > > > ad usare bene qualcosa di scarso, che a usare
    > > > male qualcosa che è
    > > > perfetto.
    > >
    > > Si ma a proposito di firgure migliori, guarda
    > che
    > > nell'articolo non si parla di PROFTPD ma di
    > > PUREFTPD eh
    > > !
    >
    > come se cambiasse qualcosa. Si trova al secondo
    > posto nella lista. Immagina di leggere pureftp
    > quando leggi il post ed è tutto uguale. Tutti i
    > concetti rimangono validi. Cmq vero che mi ero
    > confuso mentre
    > leggevo.

    Si si .. nessun problema solo che pureFTPD per come è usato nell'articolo ha l'autenticazione TLS con autenticazione a 2048 bit, quindi non è banale.
    non+autenticato
  • - Scritto da: Woooommm
    > Si si .. nessun problema solo che pureFTPD per
    > come è usato nell'articolo ha l'autenticazione
    > TLS con autenticazione a 2048 bit, quindi non è
    > banale.

    Espone un server col vetusto protocollo FTP, prob. accetta connessioni non cifrate, 2048 bit non è più raccomandato, non segue i privilegi del fileystem per utente né gli xattr, non supporta l'isolamento (pensa alle jail non al chroot) e l'FTP è lento e chissà cos'altro.

    Devi usare SSH. Continuare ad insistere sull'FTP significa che non hai afferrato il punto.
    non+autenticato
  • In questa discussione tra diversi tipi di server ftp vi siete dimenticati che il punto più debole è l'idea di utilizzare un DB per gestire gli utenti e gli accessi. Sarà più semplice di un LDAP e più alla portata di utenti meno esperti. Ma non mi sembra proprio una buona idea. Ovviamente dipende anche dal sistema, una piccola azienda con requisiti di sicurezza meno restrittivi potrebbe sorvolare, ma sarebbe meglio metterlo in chiaro.
    non+autenticato
  • - Scritto da: vnrvthx
    > In questa discussione tra diversi tipi di server
    > ftp vi siete dimenticati che il punto più debole
    > è l'idea di utilizzare un DB per gestire gli
    > utenti e gli accessi. Sarà più semplice di un
    > LDAP e più alla portata di utenti meno esperti.
    > Ma non mi sembra proprio una buona idea.
    > Ovviamente dipende anche dal sistema, una piccola
    > azienda con requisiti di sicurezza meno
    > restrittivi potrebbe sorvolare, ma sarebbe meglio
    > metterlo in
    > chiaro.

    Mah .. non penso che il frontend sia esposto sulla rete esterna, al massimo sulla intranet che è già protetta per conto suo, altrimenti che senso avrebbe ?
    non+autenticato
  • L'ho letto a spanne, perché sono cose che faccio tutti i giorni, anche se FTP è un protocollo decisamente obsoleto, scomodissimo per il mobile e di cui tra qualche anno non sentiremo la mancanza.

    Bello è leggere qualcosa di tecnico da queste parti, anche se aumenta il rischio di ottenere dei commenti intelligenti.
    non+autenticato
  • installare un server ftp, meglio vsftpd che pureftpd

    PS: l'articolo non è firmato
    non+autenticato
  • - Scritto da: enne o
    > installare un server ftp, meglio vsftpd che
    > pureftpd

    Il senso dell'articolo e' diverso.
    Dice che per un server ftp ci vuole un sistema operativo e non un giocattolo colorato per incompetenti paganti.

    > PS: l'articolo non è firmato

    E che cosa cambia?
  • - Scritto da: panda rossa
    > - Scritto da: enne o
    > > installare un server ftp, meglio vsftpd che
    > > pureftpd
    >
    > Il senso dell'articolo e' diverso.
    > Dice che per un server ftp ci vuole un sistema
    > operativo e non un giocattolo colorato per
    > incompetenti
    > paganti.
    >
    > > PS: l'articolo non è firmato
    >
    > E che cosa cambia?

    ero curioso, questi articoli sembrano un po' stagionati
    non+autenticato
  • - Scritto da: enne o
    > - Scritto da: panda rossa
    > > - Scritto da: enne o
    > > > installare un server ftp, meglio vsftpd che
    > > > pureftpd
    > >
    > > Il senso dell'articolo e' diverso.
    > > Dice che per un server ftp ci vuole un sistema
    > > operativo e non un giocattolo colorato per
    > > incompetenti
    > > paganti.
    > >
    > > > PS: l'articolo non è firmato
    > >
    > > E che cosa cambia?
    >
    > ero curioso, questi articoli sembrano un po'
    > stagionati

    La verita' non passa mai di moda.
  • Né l'uno né l'altro. Il buon vecchio LDAP con sftp è un ottimo standard. Non solo è più sicuro, ma se cambiano i sistemisti nel tempo i nuovi ci mettono poco a capire dove trovare le configurazioni per fare manutenzione.
    non+autenticato
  • - Scritto da: cvhxtr
    > Né l'uno né l'altro. Il buon vecchio LDAP con
    > sftp è un ottimo standard. Non solo è più sicuro,
    > ma se cambiano i sistemisti nel tempo i nuovi ci
    > mettono poco a capire dove trovare le
    > configurazioni per fare
    > manutenzione.

    Lascia perdere SFTP, non sarà mai un protocollo di massa, è un plugin di ssh e lo si usa solo per accedere e trasferire roba dai server.

    Diverso è il caso FTPS che potrebbe diventarlo ma si porta dietro i problemi di FTP ed è morto sul nascere.

    L'unico futuro è WEBDAV, ( anche se il client in linea di comando per Linux si chiama "cadaver" ).
    non+autenticato