sql >> Databáze >  >> RDS >> MariaDB

Jak nakonfigurovat SELinux pro systémy založené na MySQL (MySQL/MariaDB Replication + Galera)

V době, ve které nyní žijeme, se cokoli s méně bezpečným prostředím snadno stane cílem útoku a stane se odměnou pro útočníky. Ve srovnání s minulými 20 lety jsou hackeři dnes pokročilejší nejen v dovednostech, ale také v nástrojích, které používají. Není žádným překvapením, proč jsou některé obří společnosti napadeny hackery a unikají jejich cenná data.

Jen v roce 2021 již došlo k více než 10 incidentům souvisejícím s úniky dat. Nejnovější incident byl ohlášen společností BOSE, známým výrobcem zvuku, ke kterému došlo v květnu. Společnost BOSE zjistila, že útočníci získali přístup k některým osobním údajům jejích současných a bývalých zaměstnanců. Osobní údaje odhalené při útoku zahrnují jména, čísla sociálního zabezpečení, informace o odškodnění a další informace související s HR.

Jaký je podle vás účel tohoto druhu útoku a co k tomu hackera motivuje? Vše je zjevně o penězích. Vzhledem k tomu, že odcizená data jsou také často prodávána, mohou hackeři vydělávat peníze útokem na velké společnosti. Nejen, že důležitá data mohou být prodána konkurentům podniku, ale hackeři mohou zároveň požádat o obrovské výkupné.

Jak bychom to tedy mohli spojit s databázemi? Vzhledem k tomu, že databáze je pro společnost jedním z velkých aktiv, doporučujeme starat se o ni se zvýšeným zabezpečením, aby byla naše cenná data po většinu času chráněna. V mém posledním příspěvku na blogu jsme již prošli úvodem o SELinuxu, jak jej povolit, jaký typ režimu SELinux má a jak jej nakonfigurovat pro MongoDB. Dnes se podíváme na to, jak nakonfigurovat SELinux pro systémy založené na MySQL.

5 hlavních výhod SELinuxu

Než půjdeme dále, možná si někteří z vás kladou otázku, zda SELinux poskytuje nějaké pozitivní výhody, protože jeho aktivace je trochu problém. Zde je 5 hlavních výhod SELinuxu, které si nechcete nechat ujít a měli byste je zvážit:

  • Prosazování důvěrnosti a integrity dat při současné ochraně procesů

  • Schopnost omezit služby a démony, aby byly předvídatelnější

  • Snížení rizika útoků souvisejících s eskalací oprávnění

  • Zásady vynucované v celém systému, nejsou nastaveny podle uvážení uživatele a jsou definovány administrativně

  • Poskytování jemného řízení přístupu

Než začneme konfigurovat SELinux pro naše instance MySQL, proč si neprojdeme, jak povolit SELinux pomocí ClusterControl pro všechna nasazení založená na MySQL. I když je tento krok stejný pro všechny systémy pro správu databází, myslíme si, že je dobré zahrnout několik snímků obrazovky pro vaši referenci.

Kroky pro povolení SELinux pro replikaci MySQL

V této části se chystáme nasadit replikaci MySQL s ClusterControl 1.8.2. Kroky jsou stejné pro MariaDB, Galera Cluster nebo MySQL:za předpokladu, že všechny uzly jsou připraveny a je nakonfigurováno SSH bez hesla, začněme s nasazením. Abychom povolili SELinux pro naše nastavení, musíme zrušit zaškrtnutí „Disable AppArmor/SELinux“, což znamená, že SELinux bude nastaven jako „permisivní“ pro všechny uzly.

Dále vybereme jako dodavatele Percona (můžete si také vybrat MariaDB , Oracle nebo MySQL 8 také), poté zadejte heslo „root“. V závislosti na vašem nastavení můžete použít výchozí umístění nebo jiné adresáře.

Jakmile budou přidáni všichni hostitelé, můžeme zahájit nasazení a nechat jej dokončete, než budeme moci začít s konfigurací SELinux.

Kroky pro povolení SELinux pro replikaci MariaDB

V této části nasadíme replikaci MariaDB s ClusterControl 1.8.2.

Vybereme MariaDB jako dodavatele a verzi 10.5 a určíme „root“ heslo. V závislosti na vašem nastavení můžete použít výchozí umístění nebo jiné adresáře.

Jakmile budou přidáni všichni hostitelé, můžeme zahájit nasazení a nechat jej dokončete, než budeme moci pokračovat v konfiguraci SELinux.

Kroky pro povolení SELinux pro Galera Cluster

V této části nasadíme Galera Cluster s ClusterControl 1.8.2. Ještě jednou zrušte zaškrtnutí políčka „Disable AppArmor/SELinux“, což znamená, že SELinux bude nastaven jako „permisivní“ pro všechny uzly:

Dále vybereme Perconu jako dodavatele a MySQL 8 také zadejte heslo „root“. V závislosti na nastavení můžete použít výchozí umístění nebo jiné adresáře. Jakmile budou přidáni všichni hostitelé, můžeme zahájit nasazení a nechat jej dokončit.


Jako obvykle můžeme sledovat stav nasazení v části „Aktivita“ uživatelského rozhraní.

Jak nakonfigurovat SELinux pro MySQL

Vzhledem k tomu, že všechny naše clustery jsou založeny na MySQL, jsou kroky pro konfiguraci SELinuxu také stejné. Než začneme s nastavením, a protože se jedná o nově nastavené prostředí, doporučujeme vám zakázat režim automatického obnovení pro cluster i uzel podle níže uvedeného snímku obrazovky. Tímto způsobem bychom se mohli vyhnout tomu, že cluster přejde do selhání během testování nebo restartovat službu:

Nejprve se podívejme, jaký je kontext pro „mysql“. Pokračujte a spusťte následující příkaz pro zobrazení kontextu:

$ ps -eZ | grep mysqld_t

A příklad výstupu je následující:

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

Definice pro výstup výše je:

  • system_u – uživatel

  • system_r – Role

  • mysqld_t – Typ

  • s0 845 – Úroveň citlivosti

Pokud zkontrolujete stav SELinuxu, uvidíte, že stav je „permisivní“, který ještě není plně povolen. Musíme změnit režim na „vynucování“ a abychom toho dosáhli, musíme upravit konfigurační soubor SELinux, aby byl trvalý.

$ vi /etc/selinux/config
SELINUX=enforcing

Po provedených změnách pokračujte v restartování systému. Když měníme režim z „povoleného“ na „vynucovací“, musíme znovu označit systém souborů. Obvykle si můžete vybrat, zda chcete přejmenovat celý souborový systém nebo pouze jednu aplikaci. Důvodem, proč je nutné přejmenování, je skutečnost, že režim „vynucování“ potřebuje správný štítek nebo funkci, aby správně fungoval. V některých případech se tyto štítky změní během režimu „povolení“ nebo „vypnuto“.

V tomto příkladu přeoznačíme pouze jednu aplikaci (MySQL) pomocí následujícího příkazu:

$ fixfiles -R mysqld restore

U systému, který se používá již nějakou dobu, je dobré celý souborový systém přeoznačit. Následující příkaz provede úlohu bez restartu a tento proces může chvíli trvat v závislosti na vašem systému:

$ fixfiles -f -F relabel

Jako mnoho jiných databází, i MySQL vyžaduje čtení a zápis velkého množství souborů. Bez správného kontextu SELinux pro tyto soubory bude přístup nepochybně odepřen. Ke konfiguraci zásad pro SELinux je vyžadováno „semanage“. „semanage“ také umožňuje libovolnou konfiguraci bez nutnosti rekompilace zdrojů politik. U většiny systémů Linux je tento nástroj již nainstalován ve výchozím nastavení. V našem případě je již nainstalován s následující verzí:

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

Pro systém, který jej nemá nainstalovaný, vám s jeho instalací pomůže následující příkaz:

$ yum install -y policycoreutils-python-utils

Nyní se podívejme, jaké jsou kontexty souborů MySQL:

$ semanage fcontext -l | grep -i mysql

Jak si můžete všimnout, existuje spousta souborů, které jsou připojeny k MySQL po provedení výše uvedeného příkazu. Pokud si vzpomenete na začátku, používáme výchozí „Server Data Directory“. Pokud vaše instalace používá jiné umístění datového adresáře, musíte aktualizovat kontext pro „mysql_db_t“, který odkazuje na /var/lib/mysql/

Prvním krokem je změnit kontext SELinux pomocí kterékoli z těchto možností:

$ 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

A nakonec restartujte službu:

$ systemctl restart mysql

V některých nastaveních je pravděpodobně pro jakýkoli účel vyžadováno jiné umístění protokolu. V této situaci je třeba aktualizovat také „mysqld_log_t“. „mysqld_log_t“ je kontext pro výchozí umístění /var/log/mysqld.log a k jeho aktualizaci lze provést následující kroky:

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

Nastane situace, kdy je výchozí port nakonfigurován pomocí jiného portu než 3306. Pokud například používáte port 3303 pro MySQL, musíte definovat kontext SELinux pomocí následujícího příkazu :

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

A k ověření, že byl port aktualizován, můžete použít následující příkaz:

$ semanage port -l | grep mysqld

Použití audit2allow ke generování zásad

Dalším způsobem konfigurace zásady je použití „audit2allow“, které již bylo zahrnuto během instalace „semanage“ právě teď. Tento nástroj dělá to, že stahuje události protokolu z audit.log a používá tyto informace k vytvoření zásady. Někdy může MySQL potřebovat nestandardní politiku, takže toto je nejlepší způsob, jak toho dosáhnout.

Nejprve nastavíme režim na povolený pro doménu MySQL a ověříme změny:

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

Dalším krokem je vygenerování zásady pomocí příkazu níže:

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

Měli byste vidět výstup jako následující (bude se lišit v závislosti na názvu vaší zásady, který nastavíte):

******************** DŮLEŽITÉ ********************* **

Chcete-li tento balíček zásad aktivovat, spusťte:

semodule -i mysql_new.pp

Jak bylo uvedeno, k aktivaci zásady musíme provést „semodule -i mysql_new.pp“. Pokračujte a proveďte to:

$ semodule -i mysql_new.pp

Posledním krokem je vrátit doménu MySQL zpět do režimu „vynucování“:

$ semanage permissive -d mysqld_t

libsemanage.semanage_direct_remove_key:Odebírání posledního modulu permissive_mysqld_t (žádný jiný modul permissive_mysqld_t s jinou prioritou neexistuje).

Co byste měli dělat, když SELinux nefunguje?

Mnohokrát vyžaduje konfigurace SELinux tolik testování. Jedním z nejlepších způsobů, jak otestovat konfiguraci, je změnit režim na „povolující“. Pokud jej chcete nastavit pouze pro doménu MySQL, stačí použít následující příkaz. Toto je dobrá praxe, abyste se vyhnuli konfiguraci celého systému na „povolující“:

$ semanage permissive -a mysqld_t

Jakmile je vše hotovo, můžete změnit režim zpět na „vynucování“:

$ semanage permissive -d mysqld_t

Kromě toho /var/log/audit/audit.log poskytuje všechny protokoly související se SELinuxem. Tento protokol vám hodně pomůže při identifikaci hlavní příčiny a důvodu. Jediné, co musíte udělat, je filtrovat „odmítnuto“ pomocí „grep“.

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

Nyní jsme dokončili konfiguraci zásad SELinux pro systém založený na MySQL. Jedna věc, která stojí za zmínku, je, že stejnou konfiguraci je třeba provést na všech uzlech vašeho clusteru, možná pro ně budete muset zopakovat stejný proces.


  1. Výukový program připojení SQL

  2. 5 typů oprav databáze

  3. Použití aliasu sloupce v klauzuli WHERE dotazu MySQL způsobí chybu

  4. Resetování ukazatele pole ve výsledcích PDO