PI Guide/ Server FTP a prova d'intruso

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
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!

Link copiato negli appunti

Ti potrebbe interessare

Pubblicato il
28 set 2016
Link copiato negli appunti