Mettere in sicurezza MySQL

Mi è capitato più volte di intervenire su server dove durante l’installazione di MySQL si erano dimenticati di metterlo in sicurezza o meglio non ne conoscevano per niente le procedure.

Premetto che la messa in sicurezza di un DataBase MySQL non è necessaria, ma a mio avviso andrebbe sempre fatta soprattutto se ci troviamo su un server aziendale dove i dati costituiscono il patrimonio aziendale.

La messa in sicurezza del nostro server MySQL è abbastanza semplice, ecco i passi dopo averlo installato da riga di comando di un finestra di terminale:

sudo apt install mysql-server

dopo l’instellazione sempre da terminale lancia:

sudo mysql_secure_installation

Verrà chiesto di inserire una password per l’utente root, si utilizzerà per accedere al server MySQL.

Inserire “y” per “si” oppure qualsiasi altra lettera per “no”.

Viene richiesto se si vuole testare la sicurezza della password.

Successivamente è consigliato premere “y” quindi “si”.

  • Rimuovere gli utenti anonimi
  • Disabilitare il login root da remoto
  • Rimuovere il database test
  • Aggiornare le nuove regole

A partire dalla versione 5.7 di MySQL, l’utente root di MySQL è impostato per l’autenticazione tramite il plug-in auth_socket per impostazione di default anziché con una password.

Per utilizzare una password per connettersi a MySQL come utente root è necessario modificare il metodo di autenticazione, da auth_socket a mysql_native_password.

Poiché non è stata impostata ancora nessuna password, è possibile connettersi al server MySQL utilizzando semplicemente, assecondo se si è o no loggati come root, il comando:  

mysql

oppure 

sudo mysql

se si è loggati come utente normale. Successivamente sarà necessario utilizzare il comando 

mysql u root -p 

da utente root, altrimenti 

sudo mysql -u root -p 

da utente normale.

Per verificare il metodo di autenticazione associato agli account di mysql al prompt di MySQL:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Riceverete una messaggio simile al seguente:

Come si vede, l’utente root è impostato di default su auth_socket. Per utilizzare l’autenticazione con password per l’account root effettuare le seguenti modifiche:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'QUI_LA_PASSWORD_CHE_SCEGLIERAI';

Aggiorniamo le tabella con:

FLUSH PRIVILEGES;

e verifichiamo il nuovo metodo di autenticazione associato all’utente root:

SELECT user,authentication_string,plugin,host FROM mysql.user;

e dovremmo ottenere una risposta simile:

Usciamo dal prompt di MySQL:

exit

Da questo momento per effettuare il login al server MySQL sarà necessario inserire una password, quindi da terminale, assecondo se site logati o no come utente root aggiungendo sudo:

mysql -u root -p

e su richiesta inserire la password scelta.

Se necessario una volta che vi si presenta il promt del server MySQL si può scegliere di creare un nuovo utente inviando e assegnandogni i privilegi:

CREATE USER 'nuovo_utente'@'localhost' IDENTIFIED BY 'nuova_password';
GRANT ALL PRIVILEGES ON *.* TO 'nuovo_utente'@'localhost' WITH GRANT OPTION;

e poi il solito

exit

per uscire dal promit di MySQL. Non è necessario ma se volete potete riavviare il server MySQL inviando il comando:

sudo systemctl restart mysql