MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come configurare SELinux per sistemi basati su MySQL (MySQL/MariaDB Replication + Galera)

Nell'era in cui stiamo vivendo, qualsiasi cosa con un ambiente meno sicuro è facilmente un bersaglio per un attacco e diventa una taglia per gli aggressori. Rispetto agli ultimi 20 anni, gli hacker al giorno d'oggi sono più avanzati non solo con le competenze ma anche con gli strumenti che utilizzano. Non sorprende il motivo per cui alcune aziende giganti vengono violate e i loro preziosi dati vengono divulgati.

Nel solo anno 2021, ci sono già più di 10 incidenti legati a violazioni dei dati. L'incidente più recente è stato segnalato da BOSE, un noto produttore di audio verificatosi a maggio. BOSE ha scoperto che gli aggressori hanno avuto accesso ad alcune delle informazioni personali dei suoi dipendenti attuali ed ex. Le informazioni personali esposte nell'attacco includono nomi, numeri di previdenza sociale, informazioni sul risarcimento e altre informazioni relative alle risorse umane.

Quale pensi sia lo scopo di questo tipo di attacco e cosa motiva l'hacker a farlo? Ovviamente è tutta una questione di soldi. Poiché anche i dati rubati vengono spesso venduti, attaccando le grandi aziende gli hacker possono guadagnare denaro. Non solo i dati importanti possono essere venduti ai concorrenti del business, ma gli hacker possono anche chiedere un enorme riscatto allo stesso tempo.

Quindi come potremmo mettere in relazione questo con i database? Poiché il database è una delle grandi risorse dell'azienda, si consiglia di prendersene cura con maggiore sicurezza in modo che i nostri dati preziosi siano protetti per la maggior parte del tempo. Nel mio ultimo post sul blog, abbiamo già esaminato alcune introduzioni su SELinux, come abilitarlo, che tipo di modalità ha SELinux e come configurarlo per MongoDB. Oggi daremo un'occhiata a come configurare SELinux per i sistemi basati su MySQL.

I 5 principali vantaggi di SELinux

Prima di andare oltre, forse alcuni di voi si stanno chiedendo se SELinux fornisce dei vantaggi positivi, dato che è un po' complicato abilitarlo. Ecco i 5 principali vantaggi di SELinux da non perdere e che dovresti considerare:

  • Garantire la riservatezza e l'integrità dei dati e allo stesso tempo proteggere i processi

  • La capacità di limitare servizi e demoni per essere più prevedibili

  • Ridurre il rischio di attacchi di escalation dei privilegi

  • La politica applicata a livello di sistema, non impostata a discrezione dell'utente e definita a livello amministrativo

  • Fornire un controllo degli accessi a grana fine

Prima di iniziare a configurare SELinux per le nostre istanze MySQL, perché non esaminare come abilitare SELinux con ClusterControl per tutte le implementazioni basate su MySQL. Anche se il passaggio è lo stesso per tutti i sistemi di gestione dei database, riteniamo che sia una buona idea includere alcuni screenshot come riferimento.

Passaggi per abilitare SELinux per la replica MySQL

In questa sezione, implementeremo MySQL Replication con ClusterControl 1.8.2. I passaggi sono gli stessi per MariaDB, Galera Cluster o MySQL:supponendo che tutti i nodi siano pronti e che SSH senza password sia configurato, iniziamo la distribuzione. Per abilitare SELinux per la nostra configurazione, dobbiamo deselezionare "Disable AppArmor/SELinux", il che significa che SELinux sarà impostato come "permissivo" per tutti i nodi.

Successivamente, sceglieremo Percona come fornitore (puoi anche scegliere MariaDB , anche Oracle o MySQL 8), quindi specificare la password "root". Puoi utilizzare una posizione predefinita o altre tue directory a seconda della tua configurazione.

Una volta aggiunti tutti gli host, possiamo avviare la distribuzione e lasciarla finire prima di poter iniziare con la configurazione di SELinux.

Passaggi per abilitare SELinux per la replica di MariaDB

In questa sezione, implementeremo MariaDB Replication con ClusterControl 1.8.2.

Sceglieremo MariaDB come fornitore e la versione 10.5, oltre a specificare il password di "radice". Puoi utilizzare una posizione predefinita o altre tue directory a seconda della tua configurazione.

Una volta aggiunti tutti gli host, possiamo avviare la distribuzione e lasciarla finire prima di poter procedere con la configurazione di SELinux.

Passaggi per abilitare SELinux per Galera Cluster

In questa sezione, implementeremo Galera Cluster con ClusterControl 1.8.2. Ancora una volta, deseleziona "Disable AppArmor/SELinux", il che significa che SELinux sarà impostato come "permissivo" per tutti i nodi:

Successivamente, sceglieremo Percona come fornitore e MySQL 8 oltre a specificare la password "root". È possibile utilizzare una posizione predefinita o le altre directory a seconda della configurazione. Una volta aggiunti tutti gli host, possiamo avviare la distribuzione e lasciarla terminare.


 

Come al solito, possiamo monitorare lo stato della distribuzione nella sezione "Attività" dell'interfaccia utente.

Come configurare SELinux per MySQL

Considerando che tutti i nostri cluster sono basati su MySQL, anche i passaggi per configurare SELinux sono gli stessi. Prima di iniziare con l'installazione e poiché si tratta di un ambiente di nuova configurazione, ti suggeriamo di disabilitare la modalità di ripristino automatico sia per il cluster che per il nodo come mostrato nella schermata seguente. In questo modo, potremmo evitare che il cluster venga eseguito in un failover durante il test o il riavvio del servizio:

Per prima cosa, vediamo qual è il contesto per "mysql". Vai avanti ed esegui il seguente comando per visualizzare il contesto:

$ ps -eZ | grep mysqld_t

E l'esempio dell'output è il seguente:

system_u:system_r:mysqld_t:s0       845 ?        00:00:01 mysqld

La definizione per l'output sopra è:

  • system_u - Utente

  • system_r - Ruolo

  • mysqld_t - Digita

  • s0 845 - Livello di sensibilità

Se controlli lo stato di SELinux, puoi vedere che lo stato è "permissivo" che non è ancora completamente abilitato. Dobbiamo cambiare la modalità in "enforcing" e per farlo dobbiamo modificare il file di configurazione di SELinux per renderlo permanente.

$ vi /etc/selinux/config
SELINUX=enforcing

Procedi con il riavvio del sistema dopo le modifiche. Poiché stiamo cambiando la modalità da "permissiva" a "imposizione", è necessario rietichettare nuovamente il file system. In genere, puoi scegliere se rietichettare l'intero file system o solo per un'applicazione. Il motivo per cui è necessaria la rietichettatura è dovuto al fatto che la modalità "imposizione" richiede l'etichetta o la funzione corretta per funzionare correttamente. In alcuni casi, tali etichette vengono modificate durante la modalità "permissiva" o "disabilitata".

Per questo esempio, rileveremo solo un'applicazione (MySQL) usando il seguente comando:

$ fixfiles -R mysqld restore

Per un sistema che è stato utilizzato per un po' di tempo, è una buona idea rietichettare l'intero file system. Il comando seguente eseguirà il lavoro senza riavviare e questo processo potrebbe richiedere del tempo a seconda del tuo sistema:

$ fixfiles -f -F relabel

Come molti altri database, anche MySQL richiede di leggere e scrivere molti file. Senza un contesto SELinux corretto per quei file, l'accesso sarà indiscutibilmente negato. Per configurare il criterio per SELinux, è richiesto "semanage". “semanage” consente inoltre qualsiasi configurazione senza la necessità di ricompilare le fonti delle policy. Per la maggior parte dei sistemi Linux, questo strumento è già installato per impostazione predefinita. Per quanto riguarda il nostro caso, è già installato con la seguente versione:

$ rpm -qa |grep semanage
python3-libsemanage-2.9-3.el8.x86_64
libsemanage-2.9-3.el8.x86_64

Per il sistema che non lo ha installato, il seguente comando ti aiuterà a installarlo:

$ yum install -y policycoreutils-python-utils

Ora, vediamo quali sono i contesti dei file MySQL:

$ semanage fcontext -l | grep -i mysql

Come puoi notare, ci sono un sacco di file che sono collegati a MySQL una volta eseguito il comando precedente. Se ricordi all'inizio, stiamo utilizzando una "Directory dati del server" predefinita. Se la tua installazione utilizza un percorso di directory di dati diverso, devi aggiornare il contesto per "mysql_db_t" che fa riferimento a /var/lib/mysql/

Il primo passo è cambiare il contesto di SELinux usando una di queste opzioni:

$ semanage fcontext -a -t mysqld_db_t /var/lib/yourcustomdirectory
$ semanage fcontext -a -e /var/lib/mysql /var/lib/yourcustomdirectory

After the step above, run the following command:

$ restorecon -Rv /var/lib/yourcustomdirectory

E infine, riavvia il servizio:

$ systemctl restart mysql

In alcune impostazioni, probabilmente è necessaria una posizione di registro diversa per qualsiasi scopo. Per questa situazione, anche "mysqld_log_t" deve essere aggiornato. "mysqld_log_t" è un contesto per la posizione predefinita /var/log/mysqld.log e i passaggi seguenti possono essere eseguiti per aggiornarlo:

$ semanage fcontext -a -t mysqld_log_t "/your/custom/error.log"
$ restorecon -Rv /path/to/my/custom/error.log
$ systemctl restart mysql

Ci sarà una situazione in cui la porta predefinita viene configurata utilizzando una porta diversa da 3306. Ad esempio, se stai usando la porta 3303 per MySQL, devi definire il contesto SELinux con il comando seguente :

$ semanage port -a -t mysqld_port_t -p tcp 3303

E per verificare che la porta sia stata aggiornata, puoi usare il seguente comando:

$ semanage port -l | grep mysqld

Utilizzo di audit2allow per generare criteri

Un altro modo per configurare la politica è usare “audit2allow” che è già stato incluso durante l'installazione di “semanage”. Ciò che fa questo strumento è estrarre gli eventi del registro da audit.log e utilizzare tali informazioni per creare una politica. A volte, MySQL potrebbe aver bisogno di una policy non standard, quindi questo è il modo migliore per ottenerlo.

Per prima cosa, impostiamo la modalità su permissiva per il dominio MySQL e verifichiamo le modifiche:

$ semanage permissive -a mysqld_t
$ semodule -l | grep permissive
permissive_mysqld_t
permissivedomains

Il passaggio successivo consiste nel generare la politica utilizzando il comando seguente:

$ grep mysqld /var/log/audit/audit.log | audit2allow -M {yourpolicyname}
$ grep mysqld /var/log/audit/audit.log | audit2allow -M mysql_new

Dovresti vedere l'output come il seguente (diverrà a seconda del nome della tua politica che hai impostato):

******************** IMPORTANTE ********************* **

Per rendere attivo questo pacchetto di politiche, eseguire:

semodule -i mysql_new.pp

Come affermato, dobbiamo eseguire “semodule -i mysql_new.pp” per attivare la policy. Vai avanti ed eseguilo:

$ semodule -i mysql_new.pp

Il passaggio finale consiste nel riportare il dominio MySQL in modalità "enforcing":

$ semanage permissive -d mysqld_t

libsemanage.semanage_direct_remove_key:rimozione dell'ultimo modulo permissive_mysqld_t (nessun altro modulo permisive_mysqld_t esiste con un'altra priorità).

Cosa dovresti fare se SELinux non funziona?

Molte volte, la configurazione di SELinux richiede così tanti test. Uno dei modi migliori per testare la configurazione è cambiare la modalità in "permissiva". Se vuoi impostarlo solo per il dominio MySQL, puoi semplicemente usare il seguente comando. Questa è una buona pratica per evitare di configurare l'intero sistema su “permissivo”:

$ semanage permissive -a mysqld_t

Una volta terminato tutto, puoi riportare la modalità su "enforcing":

$ semanage permissive -d mysqld_t

Oltre a ciò, /var/log/audit/audit.log fornisce tutti i log relativi a SELinux. Questo registro ti aiuterà molto a identificare la causa principale e il motivo. Tutto quello che devi fare è filtrare "negato" usando "grep".

$ more /var/log/audit/audit.log |grep "denied"

Ora abbiamo finito con la configurazione della politica SELinux per il sistema basato su MySQL. Una cosa degna di nota è che la stessa configurazione deve essere eseguita su tutti i nodi del tuo cluster, potresti dover ripetere la stessa procedura per loro.