Linux îmbunătățit de securitate cu MariaDB

Linux îmbunătățit de securitate (SELinux) este un modul kernel Linux care oferă un cadru pentru configurarea sistemului de control al accesului obligatoriu (MAC) pentru multe resurse din sistem. Este activat în mod implicit pe unele distribuții Linux, inclusiv RHEL, CentOS, Fedora și alte distribuții Linux similare. SELinux împiedică programele să acceseze fișiere, directoare sau porturi, cu excepția cazului în care este configurat să acceseze aceste resurse.

verificarea dacă SELinux este activat

pentru a verifica dacă SELinux este activat, executați comandagetenforce. De exemplu:

getenforce

punerea temporară a mysqld în modul permisiv

când depanați problemele pe care credeți că SELinux le-ar putea provoca, vă poate ajuta să puneți temporarmysqld_t în modul permisiv. Acest lucru se poate face executând comanda semanage. De exemplu:

sudo semanage permissive -a mysqld_t

dacă asta a rezolvat problema, înseamnă că Politica SELinux actuală este vinovatul. Trebuie să ajustați Politica SELinux sau etichetele pentru MariaDB.

construirea și încărcarea Politicii SELinux a serverului

serverul MariaDB vine cu o politică SELinux care nu este construită sau încărcată în mod implicit. Pe multe sisteme, politica este instalată la /usr/share/mysql/policy/selinux/mariadb-server.fc. Pentru a-l construi și încărca, executați următoarele:

setarea contextelor de fișiere

SELinux folosește contextele de fișiere ca o modalitate de a determina cine ar trebui să poată accesa acel fișier.contextele fișierelor

sunt gestionate cu comenzilesemanage fcontext șirestorecon.

pe multe sisteme, utilitarulsemanage este instalat de pachetulpolicycoreutils-python, iar utilitarulrestorecon este instalat de pachetulpolicycoreutils. Le puteți instala cu următoarea comandă:

sudo yum install policycoreutils policycoreutils-python

contextul actual al unui fișier sau director poate fi verificat executândls cu--context sau--scontext opțiuni.

setarea contextului fișierului pentru directorul de date

Dacă utilizați un director personalizat pentrudatadir, atunci poate fi necesar să setați contextul fișierului pentru acel director. Contextul fișierului SELinux pentru fișierele de date MariaDB este mysqld_db_t. Puteți determina dacă acest context de fișier este prezent în sistemul dvs. și cu ce fișiere sau directoare este asociat executând următoarea comandă:

sudo semanage fcontext --list | grep mysqld_db_t

Dacă doriți să setați contextul fișierului pentru directorul personalizat pentru datadir, atunci acest lucru se poate face executând comenzile semanage fcontext și restorecon. De exemplu:

sudo semanage fcontext -a -t mysqld_db_t "/mariadb/data(/.*)?"sudo restorecon -Rv /mariadb/data

Dacă doriți să verificați contextul fișierului curent, puteți face acest lucru executândls cu opțiunile--context sau--scontext. De exemplu:

ls --directory --scontext /mariadb/data

setarea contextului fișierului pentru fișierele jurnal

Dacă utilizați un director personalizat pentru fișierele jurnal, poate fi necesar să setați contextul fișierului pentru acel director. Contextul fișierului SELinux pentru fișierele jurnal MariaDB este mysqld_log_t. Puteți determina dacă acest context de fișier este prezent în sistemul dvs. și cu ce fișiere sau directoare este asociat executând următoarea comandă:

sudo semanage fcontext --list | grep mysqld_log_t

Dacă doriți să setați contextul fișierului pentru directorul personalizat pentru fișierele jurnal, atunci acest lucru se poate face executând comenzile semanage fcontext și restorecon. De exemplu:

sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"sudo restorecon -Rv /var/log/mysql

Dacă doriți să verificați contextul fișierului curent, puteți face acest lucru executândls cu opțiunile--context sau--scontext. De exemplu:

ls --directory --scontext /var/log/mysql

setarea contextului fișierului pentru fișierele de opțiuni

Dacă utilizați un director personalizat pentru fișierele de opțiuni, poate fi necesar să setați contextul fișierului pentru acel director. Contextul fișierului SELinux pentru fișierele de opțiuni MariaDB este mysqld_etc_t. Puteți determina dacă acest context de fișier este prezent în sistemul dvs. și cu ce fișiere sau directoare este asociat executând următoarea comandă:

sudo semanage fcontext --list | grep mysqld_etc_t

Dacă doriți să setați contextul fișierului pentru directorul personalizat pentru fișierele de opțiuni, atunci acest lucru se poate face executând comenzile semanage fcontext și restorecon. De exemplu:

sudo semanage fcontext -a -t mysqld_etc_t "/etc/mariadb(/.*)?"sudo restorecon -Rv /etc/mariadb

Dacă doriți să verificați contextul fișierului curent, puteți face acest lucru executândls cu opțiunile--context sau--scontext. De exemplu:

ls --directory --scontext /etc/mariadb

permiterea accesului la contextul fișierului Tmpfs

Dacă doriți să montați tmpdir pe un sistem de fișiere tmpfs sau doriți să utilizați un tmpfs sistem de fișiere pe /run/shm, atunci poate fi necesar să permiteți mysqld_t să aveți acces la câteva contexte de fișiere legate de tmpfs. De exemplu:

Depanarea problemelor SELinux

s-ar putea să fie nevoie să depanați problemele legate de SELinux în cazuri, cum ar fi:

  • MariaDB utilizează un port non-implicit.
  • MariaDB citește sau scrie în unele fișiere (datadir, fișiere jurnal, fișiere de opțiuni etc.) situat la căi non-implicite.
  • MariaDB utilizează un plugin care necesită acces la resurse pe care instalările implicite nu le utilizează.

File system Permission Errors

dacă permisiunile sistemului de fișiere pentru un director MariaDB arată bine, dar Jurnalul de erori MariaDB are încă erori care arată similar cu următoarele:

apoi verificați SELinux ‘ s /var/log/audit/audit.log pentru intrările din jurnal care arată similar cu următoarele:

Dacă vedeți intrări care arată similar cu aceasta, atunci cel mai probabil trebuie să ajustați contextele de fișiere pentru unele fișiere sau directoare. Consultați Setarea contextelor de fișiere pentru mai multe informații despre cum să faceți acest lucru.

SELinux și MariaDB pe un Port diferit

porturile TCP și UDP sunt activate pentru permisiunea de a lega prea. Dacă utilizați un port diferit sau unele porturi Galera, configurați SELinux pentru a putea utiliza acele porturi:

sudo semanage port -a -t mysqld_port_t -p tcp 3307 

generând politici SELinux cu audit2allow

În unele cazuri, un sistem MariaDB ar putea avea nevoie de politici non-standard. Este posibil să creați aceste politici din Jurnalul de audit SELinux utilizând utilitarul audit2allow. De asemenea, vor fi necesare utilitățilesemanage șisemodule.

pe mai multe sisteme,audit2allow șisemanage utilitățile sunt instalate depolicycoreutils-python pachet, șisemodule utilitate este instalat depolicycoreutils pachet. Le puteți instala cu următoarea comandă:

sudo yum install policycoreutils policycoreutils-python

următorul proces poate fi utilizat pentru a genera o politică din jurnalul de audit:

  • eliminați dontauditele din politică:
sudo semodule -DB
  • puneți temporar mysqld_t în modul permisiv. De exemplu:
sudo semanage permissive -a mysqld_t
  • începe MariaDB.
  • face orice a fost cauza erori SELinux.
  • utilizați jurnalul de audit generat pentru a crea o politică:
sudo grep mysqld /var/log/audit/audit.log | audit2allow -M mariadb_localsudo semodule -i mariadb_local.pp
  • trageți mysqld_t din modul permisiv. De exemplu:
sudo semanage permissive -d mysqld_t
  • Restore dontaudits pentru politica:
sudo setmodule -B

aceeași procedură poate fi utilizată dacă MariaDB pornește, dar SELinux împiedică funcționarea corectă. De exemplu, SELinux poate împiedica pluginul PAM să autentifice utilizatorii. Soluția este aceeași — activați auditul, treceți la permisiv, faceți orice SELinux nu v-a permis, creați o politică din jurnalul de audit.

când descoperiți permisiunile SELinux necesare, vă rugăm să raportați permisiunile necesare pentru urmărirea erorilor sistemului de operare, astfel încât toți utilizatorii să poată beneficia de munca dvs. (de exemplu, Red Hat Bugzillahttps://bugzilla.redhat.com/).

Lasă un răspuns

Adresa ta de email nu va fi publicată.