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

Sådan konfigureres SELinux til MySQL-baserede systemer (MySQL/MariaDB Replication + Galera)

I den æra, vi lever i nu, er alt med et mindre sikkert miljø let et mål for et angreb og bliver en dusør for angriberne. Sammenlignet med de seneste 20 år er hackere i dag mere avancerede, ikke kun med de færdigheder, men også med de værktøjer, de bruger. Det er ingen overraskelse, hvorfor nogle gigantiske virksomheder bliver hacket, og deres værdifulde data er lækket.

Alene i år 2021 er der allerede mere end 10 hændelser relateret til databrud. Den seneste hændelse blev rapporteret af BOSE, en velkendt lydproducent, der fandt sted i maj. BOSE opdagede, at nogle af dets nuværende og tidligere ansattes personlige oplysninger blev tilgået af angriberne. De personlige oplysninger, der blev afsløret i angrebet, omfatter navne, CPR-numre, kompensationsoplysninger og andre HR-relaterede oplysninger.

Hvad tror du er formålet med denne form for angreb, og hvad motiverer hackeren til at gøre det? Det handler åbenbart om pengene. Da stjålne data også ofte sælges, kan hackere tjene penge ved at angribe store virksomheder. Ikke kun de vigtige data kan sælges til virksomhedens konkurrenter, men hackerne kan også bede om en kæmpe løsesum på samme tid.

Så hvordan kunne vi relatere dette til databaser? Da databasen er et af de store aktiver for virksomheden, anbefales det at tage vare på den med øget sikkerhed, så vores værdifulde data er beskyttet det meste af tiden. I mit sidste blogindlæg gennemgik vi allerede en introduktion om SELinux, hvordan man aktiverer det, hvilken type mode SELinux har, og hvordan man konfigurerer det til MongoDB. I dag vil vi tage et kig på, hvordan man konfigurerer SELinux til MySQL-baserede systemer.

Top 5 fordele ved SELinux

Før du går videre, spekulerer nogle af jer måske på, om SELinux giver nogle positive fordele, da det er lidt besværligt at aktivere det. Her er de 5 bedste SELinux-fordele, som du ikke vil gå glip af og bør overveje:

  • Håndhævelse af datafortrolighed og integritet og samtidig beskyttelse af processer

  • Evnen til at begrænse tjenester og dæmoner til at være mere forudsigelige

  • Reduktion af risikoen for privilegie-eskaleringsangreb

  • Politikken håndhæves i hele systemet, ikke fastsat efter brugerens skøn og administrativt defineret

  • Tilbyder en finmasket adgangskontrol

Inden vi begynder at konfigurere SELinux til vores MySQL-forekomster, hvorfor så ikke gå igennem, hvordan man aktiverer SELinux med ClusterControl for alle MySQL-baserede implementeringer. Selvom trinnet er det samme for alle databasestyringssystemer, synes vi, det er en god idé at inkludere nogle skærmbilleder til din reference.

Trin til at aktivere SELinux til MySQL-replikering

I dette afsnit skal vi implementere MySQL-replikering med ClusterControl 1.8.2. Trinnene er de samme for MariaDB, Galera Cluster eller MySQL:forudsat at alle noder er klar og adgangskodefri SSH er konfigureret, lad os starte implementeringen. For at aktivere SELinux for vores opsætning skal vi fjerne fluebenet "Disable AppArmor/SELinux", hvilket betyder, at SELinux vil blive indstillet som "tilladende" for alle noder.

Derefter vælger vi Percona som leverandør (du kan også vælge MariaDB , Oracle eller MySQL 8), og angiv derefter "root"-adgangskoden. Du kan bruge en standardplacering eller dine andre mapper afhængigt af din opsætning.

Når alle værter er blevet tilføjet, kan vi starte implementeringen og lade den færdig før vi kan begynde med SELinux-konfigurationen.

Trin til at aktivere SELinux til MariaDB-replikering

I dette afsnit skal vi implementere MariaDB-replikering med ClusterControl 1.8.2.

Vi vil vælge MariaDB som leverandør og version 10.5 samt specificere "root" adgangskode. Du kan bruge en standardplacering eller dine andre mapper afhængigt af din opsætning.

Når alle værter er blevet tilføjet, kan vi starte implementeringen og lade den færdig før vi kan fortsætte med SELinux-konfigurationen.

Trin til at aktivere SELinux for Galera Cluster

I dette afsnit skal vi implementere Galera Cluster med ClusterControl 1.8.2. Endnu en gang skal du fjerne fluebenet "Deaktiver AppArmor/SELinux", hvilket betyder, at SELinux vil blive indstillet som "tilladende" for alle noder:

Dernæst vælger vi Percona som leverandør og MySQL 8 samt angiv "root"-adgangskoden. Du kan bruge en standardplacering eller dine andre mapper afhængigt af din opsætning. Når alle værter er blevet tilføjet, kan vi starte implementeringen og lade den afslutte.


 

Som sædvanligt kan vi overvåge status for implementeringen i sektionen "Aktivitet" i brugergrænsefladen.

Sådan konfigureres SELinux til MySQL

I betragtning af at alle vores klynger er MySQL-baserede, er trinene til at konfigurere SELinux også de samme. Før vi starter med opsætningen, og da dette er et nyopsætningsmiljø, foreslår vi, at du deaktiverer automatisk gendannelsestilstand for både klynge og node som på skærmbilledet nedenfor. Ved at gøre dette kan vi undgå, at klyngen løber ind i en failover, mens vi udfører testen eller genstarter tjenesten:

Lad os først se, hvad der er konteksten for "mysql". Gå videre og kør følgende kommando for at se konteksten:

$ ps -eZ | grep mysqld_t

Og eksemplet på output er som nedenfor:

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

Definitionen for outputtet ovenfor er:

  • system_u - Bruger

  • system_r - Rolle

  • mysqld_t - Type

  • s0 845 - Følsomhedsniveau

Hvis du tjekker SELinux-statussen, kan du se statussen er "tilladende", som ikke er fuldt aktiveret endnu. Vi er nødt til at ændre tilstanden til "håndhæver", og for at opnå det er vi nødt til at redigere SELinux-konfigurationsfilen for at gøre den permanent.

$ vi /etc/selinux/config
SELINUX=enforcing

Fortsæt med at genstarte systemet efter ændringerne. Da vi ændrer tilstanden fra "tilladende" til "håndhæver", er vi nødt til at ommærke filsystemet igen. Typisk kan du vælge, om du vil ommærke hele filsystemet eller kun for én applikation. Grunden til, at ommærkning er påkrævet, skyldes, at "håndhævelse"-tilstand kræver den korrekte etiket eller funktion for at køre korrekt. I nogle tilfælde ændres disse etiketter i tilstanden "tilladende" eller "deaktiveret".

I dette eksempel vil vi kun ommærke én applikation (MySQL) ved hjælp af følgende kommando:

$ fixfiles -R mysqld restore

For et system, der har været brugt i et stykke tid, er det en god idé at ommærke hele filsystemet. Følgende kommando vil udføre jobbet uden at genstarte, og denne proces kan tage et stykke tid afhængigt af dit system:

$ fixfiles -f -F relabel

Som mange andre databaser kræver MySQL også at læse og skrive en masse filer. Uden en korrekt SELinux-kontekst for disse filer, vil adgangen uden tvivl blive nægtet. For at konfigurere politikken for SELinux  kræves "semanage". "semanage" tillader også enhver konfiguration uden behov for genkompilering af politikkilderne. For de fleste Linux-systemer er dette værktøj allerede installeret som standard. Hvad angår vores tilfælde, er den allerede installeret med følgende version:

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

For det system, der ikke har det installeret, vil følgende kommando hjælpe dig med at installere det:

$ yum install -y policycoreutils-python-utils

Lad os nu se, hvad MySQL-filkonteksterne er:

$ semanage fcontext -l | grep -i mysql

Som du måske bemærker, er der en masse filer, der er forbundet til MySQL, når ovenstående kommando er udført. Hvis du husker det i begyndelsen, bruger vi en standard "Server Data Directory". Hvis din installation bruger en anden datamappeplacering, skal du opdatere konteksten for "mysql_db_t", som henviser til /var/lib/mysql/

Det første trin er at ændre SELinux-konteksten ved at bruge en af ​​disse muligheder:

$ 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

Og til sidst, genstart tjenesten:

$ systemctl restart mysql

I nogle opsætninger kræves der sandsynligvis en anden logplacering til ethvert formål. Til denne situation skal "mysqld_log_t" også opdateres. "mysqld_log_t" er en kontekst for standardplaceringen /var/log/mysqld.log, og nedenstående trin kan udføres for at opdatere den:

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

Der vil være en situation, hvor standardporten er konfigureret ved hjælp af en anden port end 3306. For eksempel, hvis du bruger port 3303 til MySQL, skal du definere SELinux-konteksten med følgende kommando :

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

Og for at bekræfte, at porten er blevet opdateret, kan du bruge følgende kommando:

$ semanage port -l | grep mysqld

Brug af audit2allow til at generere politik

En anden måde at konfigurere politikken på er ved at bruge "audit2allow", som allerede er inkluderet under "semanage"-installationen lige nu. Hvad dette værktøj gør, er ved at trække loghændelser fra audit.log og bruge disse oplysninger til at oprette en politik. Nogle gange kan MySQL have brug for en ikke-standardpolitik, så dette er den bedste måde at opnå det på.

Lad os først indstille tilstanden til tilladelig for MySQL-domænet og bekræfte ændringerne:

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

Det næste trin er at generere politikken ved hjælp af kommandoen nedenfor:

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

Du bør se output som følgende (vil variere afhængigt af dit politiknavn, du har angivet):

******************** VIGTIGT ******************** **

For at gøre denne politikpakke aktiv skal du udføre:

semodule -i mysql_new.pp

Som nævnt skal vi udføre "semodule -i mysql_new.pp" for at aktivere politikken. Gå videre og udfør det:

$ semodule -i mysql_new.pp

Det sidste trin er at sætte MySQL-domænet tilbage til "håndhævende" tilstand:

$ semanage permissive -d mysqld_t

libsemanage.semanage_direct_remove_key:Fjerner sidste permissive_mysqld_t-modul (der findes intet andet permissive_mysqld_t-modul med en anden prioritet).

Hvad skal du gøre, hvis SELinux ikke virker?

Mange gange kræver SELinux-konfigurationen så meget afprøvning. En af de bedste måder at teste konfigurationen på er ved at ændre tilstanden til "tilladende". Hvis du kun vil indstille det til MySQL-domænet, kan du blot bruge følgende kommando. Dette er god praksis for at undgå at konfigurere hele systemet til "permissive":

$ semanage permissive -a mysqld_t

Når alt er gjort, kan du ændre tilstanden tilbage til "håndhævende":

$ semanage permissive -d mysqld_t

Udover det giver /var/log/audit/audit.log alle logfiler relateret til SELinux. Denne log vil hjælpe dig meget med at identificere hovedårsagen og årsagen. Alt du skal gøre er at filtrere "denied" ved hjælp af "grep".

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

Vi er nu færdige med at konfigurere SELinux-politik for MySQL-baseret system. En ting, der er værd at nævne, er, at den samme konfiguration skal udføres på alle noder i din klynge, du skal muligvis gentage den samme proces for dem.


  1. Indsætte nye kolonner i midten af ​​en tabel?

  2. Hvordan tester man, om en streng er JSON eller ej?

  3. Sådan bruges LIKE i SQL

  4. Hvordan virker GROUP BY?