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
- Mettere temporaneamente mysqld in modalità permissiva
- Creazione e caricamento della politica SELinux del server
- Impostazione dei contesti di file
- Impostazione del contesto del file per la directory Dati
- Impostazione del contesto del file per i file di log
- Impostazione del contesto del file per i file Option
- permette l’Accesso al Tmpfs Contesto di File
- Risoluzione dei problemi di SELinux
- Errori di autorizzazione del file system
- SELinux e MariaDB Su una porta diversa
- Generazione di criteri SELinux con audit2allow
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 ls
con le opzioni --context
o --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 fcontext
erestorecon
. 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 fcontext
erestorecon
. 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 fcontext
erestorecon
. 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
- Tirare
mysqld_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/).