Mysql
 sql >> Database >  >> RDS >> Mysql

Protezione del server MySQL

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

  1. 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.
  2. 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à con sudo comando, puoi consultare la nostra guida Utenti e Gruppi.
  3. 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 MySQL

    Nota 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.

  1. Richiamare l'utilità eseguendo il comando seguente:

     sudo mysql_secure_installation
    
  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. Ricarica le tabelle dei privilegi per assicurarti che tutte le modifiche siano applicate e siano attive.

    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!
    Ora hai una base sicura con cui lavorare, nella prossima sezione, trova le istruzioni per cambiare la root predefinita nome utente e password.

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.

  1. Accedi al server MySQL con il seguente comando:

     sudo mysql -u root
    
  2. Modifica il nome utente dell'account "root" eseguendo la seguente query:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. 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>';
    
  4. Ricarica la tabella dei privilegi per assicurarti che tutte le modifiche vengano salvate e attivate eseguendo il comando seguente:

     flush privileges;
    
  5. 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.

  1. Crea un Test database, eseguendo la seguente query all'interno di MYSQL:

     create database Test;
    
  2. Crea l'utente responsabile della gestione di questo database di test:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Assegna le autorizzazioni CRUD appropriate all'utente per il Test banca dati:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. È importante notare che questi privilegi sono applicabili solo al Test database, se stai creando un utente per un'applicazione come phpMyAdmin , devi fornire all'utente root autorizzazioni.

  5. Se decidi di eliminare un determinato utente, esegui la seguente query:

     drop user '<username>'@'localhost';
    
  6. 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.

  1. 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.

  2. La configurazione personalizzata deve essere specificata per mysqld (daemon MySQL), le opzioni visualizzate nell'immagine sono configurazioni di sicurezza personalizzate.

  3. 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.

  1. Clona il repository MySAT Github, eseguendo il comando seguente:

     git clone https://github.com/meob/MySAT.git
    
  2. 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 un MySAT.htm file.

  3. Controlla la sicurezza eseguendo il comando seguente:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. 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 con scp , in modo da poter analizzare i risultati dell'audit.

  5. 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.

  6. 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.