MySQL
MySQL è un sistema di gestione di database relazionali open source. Questa guida ti mostrerà come proteggere e controllare un server MySQL. Il nome è una combinazione di "My", il nome della figlia del co-fondatore Michael Widenius, e "SQL", l'abbreviazione di Structured Query Language.
Prima di iniziare
-
Assicurati di aver seguito le guide Introduzione e Protezione del server. Assicurati che il nome host di Linode sia impostato.
Controlla il nome host del tuo Linode. Il primo comando dovrebbe mostrare il tuo nome host breve e il secondo dovrebbe mostrare il tuo nome di dominio completo (FQDN).
hostname hostname -f
Nota Se hai un nome di dominio registrato per il tuo sito web, aggiungi il dominio al server Linode su cui prevedi di installare lo stack LAMP. Se non hai un nome di dominio registrato, sostituisci
example.com
con l'indirizzo IP del server Linode nelle seguenti istruzioni. -
Aggiorna il tuo sistema:
sudo yum update
Nota Questa guida è scritta per un utente non root. I comandi che richiedono privilegi elevati sono preceduti da
sudo
. Se non hai familiarità consudo
comando, puoi consultare la nostra guida Utenti e Gruppi. -
Per proteggere e controllare MySQL, è necessario disporre di un server Linux con
MySQL Server
servizi in esecuzione. Per informazioni sull'installazione di MySQL, vedere Installare MySQLNota Le istruzioni in questa guida sono basate su Ubuntu 18.04, sebbene tutti i passaggi siano indipendenti dalla distribuzione, ad eccezione dei nomi dei pacchetti e dei gestori dei pacchetti.
Utilizzo di Secure MySQL Installer
Il pacchetto mysql-server viene fornito preconfigurato con un'utilità chiamata mysql_secure_installation
che viene utilizzato per configurare un punto di partenza sicuro per il server MySQL, eliminando gli utenti anonimi e consentendo di specificare la politica di sicurezza della password desiderata.
mysql_secure_installation
è uno script di shell disponibile sui sistemi Unix e ti consente di proteggere l'installazione di MySQL consentendoti di:
- imposta una password per gli account root
- rimuove gli account root accessibili dall'esterno dell'host locale
- rimuovere gli account di utenti anonimi
- rimuovere il database di test, a cui per impostazione predefinita possono accedere gli utenti anonimi
Inizia il processo di sicurezza eseguendo questa utility subito dopo l'installazione di mysql-server.
-
Richiamare l'utilità eseguendo il comando seguente:
sudo mysql_secure_installation
-
Viene avviato il processo di installazione e l'utilità richiede di specificare se si desidera abilitare il plug-in di convalida della password utilizzato per testare le password e migliorare la sicurezza. Si consiglia di abilitare questa funzione.
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y
-
Dopo aver abilitato il plug-in password, specifica la tua politica di convalida della password in base al livello di forza delle password desiderate.
There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
-
Rimuovere gli utenti anonimi. Questa è un'importante opzione di sicurezza in quanto gli aggressori possono sfruttare gli utenti anonimi per ottenere l'accesso al server del database.
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
-
Disabilita l'accesso root in remoto, questa è una configurazione di sicurezza estremamente importante in quanto impedisce agli aggressori di autenticarsi in remoto sul server MySQL come root o di eseguire attacchi di forza bruta alle password. L'autenticazione remota può anche essere disabilitata completamente, daremo un'occhiata a come farlo nella prossima sezione.
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
-
Elimina il database di test creato durante il processo di installazione di mysql-server, questo database viene creato a scopo di test, come buona pratica si consiglia di eliminare questo database.
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
-
Ricarica le tabelle dei privilegi per assicurarti che tutte le modifiche siano applicate e siano attive.
Ora hai una base sicura con cui lavorare, nella prossima sezione, trova le istruzioni per cambiare la root predefinita nome utente e password.Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Modifica dell'utente "root"
Per impostazione predefinita, il server MySQL viene fornito predefinito con un superuser/admin
account che ha accesso a tutti i privilegi e le funzionalità dei database e degli utenti del database. Dato questo controllo e accesso senza precedenti, è importante bloccare e proteggere l'account di root poiché gli aggressori di solito prendono di mira l'account di root su un server MySQL perché ha il potenziale per fornire un accesso completo ai database e agli utenti del database.
Il primo passo per proteggere l'utente "root" è cambiare il nome utente da root
per qualcosa di più inflessibile, l'obiettivo è rendere il nome utente di root difficile da indovinare o utilizzare la forza bruta per gli aggressori. Dopodiché, si consiglia anche di cambiare la root
password dell'account regolarmente come buona pratica.
-
Accedi al server MySQL con il seguente comando:
sudo mysql -u root
-
Modifica il nome utente dell'account "root" eseguendo la seguente query:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Cambia la
root
password dell'account a qualcosa di forte e difficile da indovinare, si consiglia di utilizzare un generatore di password. Se hai abilitato il plug-in di verifica password durante il processo di installazione sicura, devi fornire una password che soddisfi i requisiti delle norme in termini di robustezza.ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
-
Ricarica la tabella dei privilegi per assicurarti che tutte le modifiche vengano salvate e attivate eseguendo il comando seguente:
flush privileges;
-
Per confermare se il
root
nome utente e password vengono modificati, eseguire la seguente query:use mysql; select user,host,authentication_string from mysql.user;
Questo mostra le tabelle utente memorizzate nel database mysql e dovrebbe riflettere le modifiche apportate.
+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| example_user | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
Creazione di un nuovo utente
Una buona pratica di sicurezza è il concetto di segregazione per compiti o ruolo. Ciò significa che per ogni database o applicazione che utilizza il database, creare un nuovo utente con autorizzazioni CRUD per quel particolare database. Ciò garantisce che in qualsiasi momento un solo utente abbia accesso a un database alla volta e gli utenti non possano accedere ad altri database.
-
Crea un
Test
database, eseguendo la seguente query all'interno di MYSQL:create database Test;
-
Crea l'utente responsabile della gestione di questo database di test:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Assegna le autorizzazioni CRUD appropriate all'utente per il
Test
banca dati:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
È importante notare che questi privilegi sono applicabili solo al
Test
database, se stai creando un utente per un'applicazione comephpMyAdmin
, devi fornire all'utenteroot
autorizzazioni. -
Se decidi di eliminare un determinato utente, esegui la seguente query:
drop user '<username>'@'localhost';
-
Ricarica la tabella dei privilegi per assicurarti che le modifiche apportate vengano applicate e attivate eseguendo la query seguente:
flush privileges;
Configurazione MySQL personalizzata
È ora possibile impostare una configurazione personalizzata sicura per MySQL che fornisce ulteriori opzioni di configurazione della sicurezza.
-
Il file di configurazione MySQL globale si trova in
/etc/mysql/my.cnf
, tutte le configurazioni globali personalizzate devono essere impostate nel file di configurazione. -
La configurazione personalizzata deve essere specificata per mysqld (daemon MySQL), le opzioni visualizzate nell'immagine sono configurazioni di sicurezza personalizzate.
-
Dopo aver aggiunto le configurazioni personalizzate, è necessario riavviare
mysql
servizio per garantire che tutte le modifiche vengano applicate.systemctl restart mysql
Verifica della sicurezza MySQL
Ora puoi controllare la sicurezza del server MySQL utilizzando uno strumento chiamato MySAT. MySAT esegue diversi test per analizzare le configurazioni del database e le politiche di sicurezza. MySAT aiuta a valutare e quindi ad aumentare la sicurezza del database MySQL. MySAT è un semplice script SQL, è facile da capire e di facile manutenzione. I risultati di MySAT vengono emessi in formato HTML.
-
Clona il repository MySAT Github, eseguendo il comando seguente:
git clone https://github.com/meob/MySAT.git
-
Dopo aver clonato la directory, accedi alla directory MySAT, dove
mysat.sql
si trova e viene utilizzato insieme al server MySQL per generare i risultati in unMySAT.htm
file. -
Controlla la sicurezza eseguendo il comando seguente:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
Come indicato, MySAT richiede l'accesso root a MySQL per eseguire i test richiesti, dopo aver eseguito il comando viene generato il file MySAT.htm, copiare il file MySAT.htm e il
mysat.css
file su un server Apache o NGINX, oppure scaricali localmente conscp
, in modo da poter analizzare i risultati dell'audit. -
I risultati sono formattati in un formato di facile lettura e comprensione, in cui le configurazioni vengono verificate e i risultati sono codificati a colori in base alla loro configurazione corrente e al modo in cui influisce sulla sicurezza del server mysql. Ad esempio, un controllo di configurazione non riuscito è codificato a colori in arancione e un controllo superato è codificato a colori in verde.
-
Il rapporto di controllo rivela quali configurazioni devono essere modificate o modificate e ti presenta un quadro di primo livello della sicurezza generale del server MySQL.