MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как да конфигурирате SELinux за системи, базирани на MySQL (MySQL/MariaDB репликация + Galera)

В ерата, в която живеем сега, всичко с по-малко сигурна среда е лесно мишена за атака и се превръща в награда за нападателите. В сравнение с последните 20 години, днес хакерите са по-напреднали не само с уменията, но и с инструментите, които използват. Не е изненадващо защо някои гигантски компании са хакнати и техните ценни данни изтичат.

Само през 2021 г. вече има повече от 10 инцидента, свързани с пробиви на данни. Последният инцидент беше съобщен от BOSE, известен производител на аудио, който се случи през май. BOSE откри, че част от личните данни на настоящите и бивши служители е била достъпна от нападателите. Личната информация, разкрита при атаката, включва имена, социалноосигурителни номера, информация за компенсациите и друга информация, свързана с човешките ресурси.

Каква според вас е целта на този вид атака и какво мотивира хакера да го направи? Очевидно всичко е свързано с парите. Тъй като откраднатите данни също често се продават, чрез атакуване на големи компании хакерите могат да печелят пари. Не само важните данни могат да бъдат продадени на конкурентите на бизнеса, но и хакерите могат да поискат огромен откуп в същото време.

И така, как бихме могли да свържем това с базите данни? Тъй като базата данни е един от големите активи на компанията, се препоръчва да се грижим за нея с повишена сигурност, така че нашите ценни данни да бъдат защитени през повечето време. В последната ми публикация в блога вече преминахме през малко въведение за SELinux, как да го активираме, какъв тип режим има SELinux и как да го конфигурираме за MongoDB. Днес ще разгледаме как да конфигурирате SELinux за MySQL базирани системи.

Топ 5 предимства на SELinux

Преди да продължите, може би някои от вас се чудят дали SELinux предоставя някакви положителни предимства, като се има предвид, че е малко трудно да го активирате. Ето първите 5 предимства на SELinux, които не искате да пропуснете и трябва да имате предвид:

  • Налагане на поверителността и целостта на данните, като същевременно защитава процеси

  • Възможността да се ограничават услугите и демони, за да бъдат по-предвидими

  • Намаляване на риска от атаки с ескалация на привилегии

  • Правилото се прилага в цялата система, не се задава по усмотрение на потребителя и се дефинира административно

  • Осигуряване на фин контрол на достъпа

Преди да започнем да конфигурираме SELinux за нашите MySQL екземпляри, защо да не преминем през това как да активираме SELinux с ClusterControl за всички базирани на MySQL внедрявания. Въпреки че стъпката е една и съща за всички системи за управление на бази данни, смятаме, че е добра идея да включите някои екранни снимки за ваша справка.

Стъпки за активиране на SELinux за MySQL репликация

В този раздел ще внедрим MySQL репликация с ClusterControl 1.8.2. Стъпките са едни и същи за MariaDB, Galera Cluster или MySQL:ако приемем, че всички възли са готови и SSH без парола е конфигуриран, нека започнем внедряването. За да активираме SELinux за нашата настройка, трябва да премахнем отметката от „Деактивиране на AppArmor/SELinux“, което означава, че SELinux ще бъде зададен като „разрешен“ за всички възли.

След това ще изберем Percona като доставчик (можете също да изберете MariaDB , Oracle или MySQL 8), след което посочете паролата „root“. Можете да използвате местоположение по подразбиране или други ваши директории в зависимост от вашата настройка.

След като всички хостове бъдат добавени, можем да започнем внедряването и да го оставим завършете, преди да можем да започнем с конфигурацията на SELinux.

Стъпки за активиране на SELinux за MariaDB репликация

В този раздел ще внедрим MariaDB репликация с ClusterControl 1.8.2.

Ще изберем MariaDB като доставчик и версия 10.5, както и ще посочим „root“ парола. Можете да използвате местоположение по подразбиране или други ваши директории в зависимост от вашата настройка.

След като всички хостове бъдат добавени, можем да започнем внедряването и да го оставим завършете, преди да можем да продължим с конфигурацията на SELinux.

Стъпки за активиране на SELinux за Galera Cluster

В този раздел ще внедрим Galera Cluster с ClusterControl 1.8.2. Още веднъж премахнете отметката от „Деактивиране на AppArmor/SELinux“, което означава, че SELinux ще бъде зададен като „разрешен“ за всички възли:

След това ще изберем Percona като доставчик и MySQL 8, както и посочете "root" парола. Можете да използвате местоположение по подразбиране или други ваши директории в зависимост от вашата настройка. След като всички хостове бъдат добавени, можем да започнем внедряването и да го оставим да завърши.


 

Както обикновено, можем да наблюдаваме състоянието на внедряването в секцията „Дейност“ на потребителския интерфейс.

Как да конфигурирам SELinux за MySQL

Като се има предвид, че всички наши клъстери са базирани на MySQL, стъпките за конфигуриране на SELinux също са едни и същи. Преди да започнем с настройката и тъй като това е среда за нова настройка, ви предлагаме да деактивирате режима за автоматично възстановяване както за клъстер, така и за възел, както е показано на екранната снимка по-долу. Правейки това, бихме могли да избегнем сблъсъка на клъстера в отказ, докато правим тестването или рестартираме услугата:

Първо, нека видим какъв е контекстът за „mysql“. Продължете и изпълнете следната команда, за да видите контекста:

$ ps -eZ | grep mysqld_t

И примерът за изхода е както следва:

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

Дефиницията за изхода по-горе е:

  • system_u - Потребител

  • system_r - Роля

  • mysqld_t - Тип

  • s0 845 – Ниво на чувствителност

Ако проверите състоянието на SELinux, можете да видите, че състоянието е „разрешено“, което все още не е напълно активирано. Трябва да променим режима на „принудителен“ и за да постигнем това, трябва да редактираме конфигурационния файл на SELinux, за да го направим постоянен.

$ vi /etc/selinux/config
SELINUX=enforcing

Продължете да рестартирате системата след промените. Тъй като сменяме режима от „разрешителен“ на „принудителен“, трябва да преназначим отново файловата система. Обикновено можете да изберете дали да премаркирате цялата файлова система или само за едно приложение. Причината, поради която се изисква повторно етикетиране, се дължи на факта, че режимът на „налагане“ се нуждае от правилния етикет или функция, за да работи правилно. В някои случаи тези етикети се променят по време на режим „разрешен“ или „деактивиран“.

За този пример ще премаркираме само едно приложение (MySQL), като използваме следната команда:

$ fixfiles -R mysqld restore

За система, която е била използвана от доста време, е добра идея да преименувате цялата файлова система. Следната команда ще свърши работата без рестартиране и този процес може да отнеме известно време в зависимост от вашата система:

$ fixfiles -f -F relabel

Както много други бази данни, MySQL също изисква да чете и записва много файлове. Без правилен контекст на SELinux за тези файлове, достъпът несъмнено ще бъде отказан. За да конфигурирате правилата за SELinux,  се изисква „semanage“. „semanage“ също позволява всякаква конфигурация без необходимост от прекомпилиране на източниците на политика. За повечето Linux системи този инструмент вече е инсталиран по подразбиране. Що се отнася до нашия случай, той вече е инсталиран със следната версия:

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

За системата, в която не е инсталирана, следната команда ще ви помогне да я инсталирате:

$ yum install -y policycoreutils-python-utils

Сега нека да видим какво представляват MySQL файловите контексти:

$ semanage fcontext -l | grep -i mysql

Както може да забележите, има куп файлове, които са свързани с MySQL, след като се изпълни горната команда. Ако си спомняте в началото, ние използваме „Директория с данни на сървъра“ по подразбиране. Ако вашата инсталация използва различно местоположение в директорията с данни, трябва да актуализирате контекста за „mysql_db_t“, който се отнася до /var/lib/mysql/

Първата стъпка е да промените контекста на SELinux, като използвате някоя от тези опции:

$ 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

И накрая, рестартирайте услугата:

$ systemctl restart mysql

При някои настройки вероятно е необходимо различно местоположение на журнала за всякакви цели. За тази ситуация „mysqld_log_t“ също трябва да бъде актуализиран. “mysqld_log_t” е контекст за местоположение по подразбиране /var/log/mysqld.log и стъпките по-долу могат да бъдат изпълнени, за да го актуализирате:

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

Ще има ситуация, когато портът по подразбиране е конфигуриран с помощта на различен порт, различен от 3306. Например, ако използвате порт 3303 за MySQL, трябва да дефинирате контекста на SELinux със следната команда :

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

И за да проверите дали портът е актуализиран, можете да използвате следната команда:

$ semanage port -l | grep mysqld

Използване на audit2allow за генериране на правила

Друг начин за конфигуриране на правилото е чрез използване на „audit2allow“, който вече е включен по време на инсталацията на „semanage“ току-що. Това, което прави този инструмент, е като изтегля събитията в журнала от audit.log и използва тази информация за създаване на политика. Понякога MySQL може да се нуждае от нестандартна политика, така че това е най-добрият начин да постигнете това.

Първо, нека зададем режима на разрешителен за MySQL домейна и да проверим промените:

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

Следващата стъпка е да генерирате политиката с помощта на командата по-долу:

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

Трябва да видите изхода като следния (ще се различава в зависимост от името на вашата политика, която сте задали):

******************** ВАЖНО ********************* **

За да направите този пакет с правила активен, изпълнете:

semodule -i mysql_new.pp

Както е посочено, трябва да изпълним „semodule -i mysql_new.pp“, за да активираме политиката. Продължете и го изпълнете:

$ semodule -i mysql_new.pp

Последната стъпка е да върнете MySQL домейна обратно в режим "принудителен":

$ semanage permissive -d mysqld_t

libsemanage.semanage_direct_remove_key:Премахване на последния permissive_mysqld_t модул (не съществува друг permissive_mysqld_t модул с друг приоритет).

Какво трябва да направите, ако SELinux не работи?

Много пъти конфигурацията на SELinux изисква толкова много тестове. Един от най-добрите начини за тестване на конфигурацията е като промените режима на „разрешителен“. Ако искате да го зададете само за MySQL домейна, можете просто да използвате следната команда. Това е добра практика, за да избегнете конфигурирането на цялата система на „разрешително“:

$ semanage permissive -a mysqld_t

След като всичко е направено, можете да промените режима обратно на „принудително“:

$ semanage permissive -d mysqld_t

В допълнение към това, /var/log/audit/audit.log предоставя всички регистрационни файлове, свързани със SELinux. Този дневник ще ви помогне много при идентифицирането на първопричината и причината. Всичко, което трябва да направите, е да филтрирате „отказано“ с помощта на „grep“.

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

Сега приключихме с конфигурирането на политиката на SELinux за базирана на MySQL система. Едно нещо, което си струва да се спомене е, че една и съща конфигурация трябва да се направи на всички възли на вашия клъстер, може да се наложи да повторите същия процес за тях.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете всички нечислови стойности в колона в MariaDB

  2. Как SOUNDS LIKE работи в MariaDB

  3. MariaDB SYSTEM_USER() Обяснено

  4. Как POW() работи в MariaDB

  5. 6 често срещани сценария за неуспехи за MySQL и MariaDB и как да ги поправите