Ricerca nel sito web

12 Best practice per la sicurezza MySQL/MariaDB per Linux


MySQL è il sistema di database open source più popolare al mondo e MariaDB (un fork di MySQL) è il sistema di database open source in più rapida crescita al mondo. Dopo aver installato il server MySQL, nella sua configurazione predefinita non è sicuro e proteggerlo è uno dei compiti essenziali nella gestione generale del database.

Leggi anche: Impara MySQL/MariaDB per principianti – Parte 1

Ciò contribuirà a rafforzare e potenziare la sicurezza complessiva dei server Linux, poiché gli aggressori scansionano sempre le vulnerabilità in qualsiasi parte di un sistema e in passato i database sono stati le principali aree di destinazione. Un esempio comune è la forzatura bruta della password di root per il database MySQL.

In questa guida spiegheremo le migliori pratiche di sicurezza utili per MySQL/MariaDB per Linux.

1. Installazione sicura di MySQL

Questo è il primo passaggio consigliato dopo l'installazione del server MySQL, verso la protezione del server database. Questo script facilita il miglioramento della sicurezza del tuo server MySQL chiedendoti di:

  • imposta una password per l'account root, se non l'hai impostata durante l'installazione.
  • disabilitare l'accesso dell'utente root remoto rimuovendo gli account root accessibili dall'esterno dell'host locale.
  • rimuovere gli account utente anonimi e testare il database a cui per impostazione predefinita possono accedere tutti gli utenti, anche gli utenti anonimi.
mysql_secure_installation

Dopo averlo eseguito, imposta la password di root e rispondi alla serie di domande inserendo [Sì/Y] e premi [Invio].

2. Associare il server database all'indirizzo di loopback

Questa configurazione limiterà l'accesso da macchine remote, dice al server MySQL di accettare solo connessioni dall'interno dell'host locale. Puoi impostarlo nel file di configurazione principale.

vi /etc/my.cnf	                   [RHEL/CentOS]	
vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Aggiungi la seguente riga sotto nella sezione [mysqld].

bind-address = 127.0.0.1

3. Disabilitare INFILE LOCALE in MySQL

Come parte del rafforzamento della sicurezza, è necessario disabilitare local_infile per impedire l'accesso al file system sottostante da MySQL utilizzando la seguente direttiva nella sezione [mysqld].

local-infile=0

4. Modifica la porta predefinita MYSQL

La variabile Port imposta il numero di porta MySQL che verrà utilizzato per l'ascolto su connessioni TCP/IP. Il numero di porta predefinito è 3306 ma puoi modificarlo nella sezione [mysqld] come mostrato.

Port=5000

5. Abilita la registrazione MySQL

I log sono uno dei modi migliori per capire cosa succede su un server, in caso di attacchi, puoi facilmente vedere qualsiasi attività correlata alle intrusioni dai file di log. Puoi abilitare la registrazione MySQL aggiungendo la seguente variabile nella sezione [mysqld].

log=/var/log/mysql.log

6. Imposta l'autorizzazione appropriata sui file MySQL

Assicurati di avere impostato le autorizzazioni appropriate per tutti i file del server mysql e le directory dei dati. Il file /etc/my.conf dovrebbe essere scrivibile solo su root. Ciò impedisce ad altri utenti di modificare le configurazioni del server database.

chmod 644 /etc/my.cnf

7. Elimina la cronologia della shell MySQL

Tutti i comandi eseguiti sulla shell MySQL vengono archiviati dal client mysql in un file di cronologia: ~/.mysql_history. Questo può essere pericoloso, perché per qualsiasi account utente che creerai, tutti i nomi utente e le password digitati sulla shell verranno registrati nel file della cronologia.

cat /dev/null > ~/.mysql_history

8. Non eseguire comandi MySQL dalla riga di comando

Come già sai, tutti i comandi digitati sul terminale vengono memorizzati in un file di cronologia, a seconda della shell che stai utilizzando (ad esempio ~/.bash_history per bash). Un utente malintenzionato che riesce ad accedere a questo file di cronologia può facilmente vedere tutte le password ivi registrate.

Si sconsiglia vivamente di digitare password sulla riga di comando, qualcosa del genere:

mysql -u root -ppassword_

Quando controlli l'ultima sezione del file della cronologia dei comandi, vedrai la password digitata sopra.

history 

Il modo appropriato per connettere MySQL è.

mysql -u root -p
Enter password:

9. Definire gli utenti del database specifici dell'applicazione

Per ogni applicazione in esecuzione sul server, concedere l'accesso solo a un utente responsabile del database per una determinata applicazione. Ad esempio, se disponi di un sito WordPress, crea un utente specifico per il database del sito WordPress come segue.

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

e ricorda di rimuovere sempre gli account utente che non gestiscono più alcun database dell'applicazione sul server.

10. Utilizzare plugin e librerie di sicurezza aggiuntivi

MySQL include una serie di plugin di sicurezza per: l'autenticazione dei tentativi da parte dei client di connettersi al server mysql, la convalida della password e la protezione dell'archiviazione di informazioni sensibili, tutti disponibili nella versione gratuita.

Puoi trovare di più qui: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Cambia regolarmente le password MySQL

Si tratta di un avviso comune sulla sicurezza di informazioni/applicazioni/sistemi. La frequenza con cui lo fai dipenderà interamente dalla tua politica di sicurezza interna. Tuttavia, può impedire ai “ficcanaso” che potrebbero aver monitorato la tua attività per un lungo periodo di tempo, di accedere al tuo server mysql.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Aggiorna regolarmente il pacchetto MySQL Server

Si consiglia vivamente di aggiornare regolarmente i pacchetti mysql/mariadb per tenere il passo con gli aggiornamenti di sicurezza e le correzioni di bug dal repository del fornitore. Normalmente i pacchetti nei repository predefiniti del sistema operativo sono obsoleti.

yum update
apt update

Dopo aver apportato eventuali modifiche al server mysql/mariadb, riavviare sempre il servizio.

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

Leggi anche: 15 suggerimenti utili per la regolazione e l'ottimizzazione delle prestazioni di MySQL/MariaDB

È tutto! Ci fa piacere sentire la tua opinione tramite il modulo di commento qui sotto. Condividi con noi eventuali suggerimenti sulla sicurezza MySQL/MariaDB mancanti nell'elenco sopra.