Security-Enhanced Linux con MariaDB

Security-Enhanced Linux (SELinux) è un modulo del kernel Linux che fornisce un framework per la configurazione del sistema di controllo di accesso obbligatorio (MAC) per molte risorse del sistema. È abilitato di default su alcune distribuzioni Linux, tra cui RHEL, CentOS, Fedora e altre distribuzioni Linux simili. SELinux impedisce ai programmi di accedere a file, directory o porte a meno che non sia configurato per accedere a tali risorse.

Verifica se SELinux è abilitato

Per verificare se SELinux è abilitato, eseguire il comandogetenforce. Ad esempio:

getenforce

Mettere temporaneamente mysqld in modalità permissiva

Quando si risolvono i problemi che si pensa SELinux potrebbe causare, può aiutare a mettere temporaneamente mysqld_t in modalità permissiva. Questo può essere fatto eseguendo il comandosemanage. Biru:

sudo semanage permissive -a mysqld_t

Se questo ha risolto il problema, significa che l’attuale politica di SELinux è il colpevole. È necessario regolare la politica SELinux o le etichette per MariaDB.

Creazione e caricamento della politica SELinux del server

Il Server MariaDB viene fornito con una politica SELinux che non è compilata o caricata per impostazione predefinita. Su molti sistemi, il criterio è installato su /usr/share/mysql/policy/selinux/mariadb-server.fc. Per costruirlo e caricarlo, esegui quanto segue:

Impostazione dei contesti di file

SELinux utilizza i contesti di file come un modo per determinare chi dovrebbe essere in grado di accedere a quel file.

I contesti di file sono gestiti con i comandisemanage fcontext erestorecon.

Su molti sistemi, l’utilità semanage viene installata dal pacchetto policycoreutils-python e l’utilità restorecon viene installata dal pacchetto policycoreutils. È possibile installarli con il seguente comando:

sudo yum install policycoreutils policycoreutils-python

Il contesto corrente di un file o di una directory può essere controllato eseguendo lscon le opzioni --contexto --scontext.

Impostazione del contesto del file per la directory Dati

Se si utilizza una directory personalizzata perdatadir, potrebbe essere necessario impostare il contesto del file per quella directory. Il contesto del file SELinux per i file di dati MariaDB èmysqld_db_t. È possibile determinare se questo contesto di file è presente nel sistema e a quali file o directory è associato eseguendo il seguente comando:

sudo semanage fcontext --list | grep mysqld_db_t

Se si desidera impostare il contesto del file per la directory personalizzata per ildatadir, è possibile eseguire i comandisemanage fcontexterestorecon. Ad esempio:

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

Se si desidera controllare il contesto del file corrente, è possibile farlo eseguendo ls con le opzioni --context o --scontext. Biru:

ls --directory --scontext /mariadb/data

Impostazione del contesto del file per i file di log

Se si utilizza una directory personalizzata per i file di log, potrebbe essere necessario impostare il contesto del file per quella directory. Il contesto del file SELinux per i file di registro MariaDB è mysqld_log_t. È possibile determinare se questo contesto di file è presente nel sistema e a quali file o directory è associato eseguendo il seguente comando:

sudo semanage fcontext --list | grep mysqld_log_t

Se si desidera impostare il contesto del file per la directory personalizzata per i file di log, è possibile eseguire i comandisemanage fcontexterestorecon. Ad esempio:

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

Se si desidera controllare il contesto del file corrente, è possibile farlo eseguendo ls con le opzioni --context o --scontext. Biru:

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

Impostazione del contesto del file per i file Option

Se si utilizza una directory personalizzata per i file option, potrebbe essere necessario impostare il contesto del file per quella directory. Il contesto del file SELinux per i file di opzione MariaDB è mysqld_etc_t. È possibile determinare se questo contesto di file è presente nel sistema e a quali file o directory è associato eseguendo il seguente comando:

sudo semanage fcontext --list | grep mysqld_etc_t

Se si desidera impostare il contesto del file per la directory personalizzata per i file di opzione, è possibile eseguire i comandisemanage fcontexterestorecon. Ad esempio:

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

Se si desidera controllare il contesto del file corrente, è possibile farlo eseguendo ls con le opzioni --context o --scontext. Biru:

ls --directory --scontext /etc/mariadb

permette l’Accesso al Tmpfs Contesto di File

Se si voleva montare il tmpdir in un tmpfs file di sistema o voluto utilizzare un tmpfs file system /run/shm quindi potrebbe essere necessario per consentire mysqld_t per avere accesso a un paio di tmpfs file relativi contesti. Ad esempio:

Risoluzione dei problemi di SELinux

Potrebbe essere necessario risolvere i problemi relativi a SELinux in casi, ad esempio:

  • MariaDB utilizza una porta non predefinita.
  • MariaDB sta leggendo o scrivendo su alcuni file (datadir, file di log, file di opzioni, ecc.) situato in percorsi non predefiniti.
  • MariaDB utilizza un plugin che richiede l’accesso alle risorse che le installazioni predefinite non utilizzano.

Errori di autorizzazione del file system

Se le autorizzazioni del file system per alcune directory MariaDB sembrano buone, ma il registro degli errori MariaDB presenta ancora errori simili ai seguenti:

Quindi controllare SELinux /var/log/audit/audit.log per le voci di registro simili ai seguenti:

Se vedi voci simili a questa, molto probabilmente devi regolare i contesti dei file per alcuni file o directory. Vedere Impostazione dei contesti dei file per ulteriori informazioni su come farlo.

SELinux e MariaDB Su una porta diversa

Le porte TCP e UDP sono abilitate anche per il permesso di associare. Se si utilizza una porta diversa, o alcune porte Galera, configurare SELinux per essere in grado di utilizzare quelle porte:

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

Generazione di criteri SELinux con audit2allow

In alcuni casi, un sistema MariaDB potrebbe aver bisogno di criteri non standard. È possibile creare queste politiche dal registro di controllo SELinux utilizzando l’utilitàaudit2allow. Saranno necessarie anche le utilitysemanage esemodule.

Su molti sistemi, le utilità audit2allow e semanage vengono installate dal pacchetto policycoreutils-python e l’utilità semodule viene installata dal pacchetto policycoreutils pacchetto. Puoi installarli con il seguente comando:

sudo yum install policycoreutils policycoreutils-python

Il seguente processo può essere utilizzato per generare una politica dal registro di controllo:

  • Rimuovere dontaudits dalla politica:
sudo semodule -DB
  • Temporaneamente messo mysqld_t in modalità permissiva. Ad esempio:
sudo semanage permissive -a mysqld_t
  • Avvia MariaDB.
  • Fai qualsiasi cosa causasse errori SELinux.
  • Utilizzare il registro di controllo generato per creare una politica:
sudo grep mysqld /var/log/audit/audit.log | audit2allow -M mariadb_localsudo semodule -i mariadb_local.pp
  • Tiraremysqld_t fuori dalla modalità permissiva. Biru:
sudo semanage permissive -d mysqld_t
  • Ripristina dontaudits per la politica:
sudo setmodule -B

La stessa procedura può essere utilizzata se MariaDB si avvia ma SELinux impedisce il corretto funzionamento. Ad esempio, SELinux potrebbe impedire al plugin PAM di autenticare gli utenti. La soluzione è la stessa: abilita il controllo, passa a permissivo, fai, qualunque cosa SELinux non ti abbia permesso, crea una politica dal registro di controllo.

Quando scopri le autorizzazioni SELinux necessarie, segnala le autorizzazioni necessarie al tracciamento dei bug del tuo sistema operativo in modo che tutti gli utenti possano beneficiare del tuo lavoro (ad esempio Red Hat Bugzillahttps://bugzilla.redhat.com/).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.