Cos'è il contesto SELinux
Quando SELinux viene applicato nel sistema, controlla le regole su quale processo può accedere a quali file, directory e porte. Ogni file, processo, directory e porta ha un'etichetta di sicurezza speciale nota come contesto SELinux, che è un nome utilizzato per determinare se un processo può accedere a un file, una directory o una porta. Per impostazione predefinita, la norma non consente alcuna interazione a meno che una regola esplicita non conceda l'accesso.
Le etichette di SELinux hanno contesti diversi:utente, ruolo, tipo e sensibilità. La maggior parte dei comandi Linux ha l'opzione -Z per visualizzare i contesti SELinux. Ad esempio, ps, ls, cp e mkdir utilizzano tutti l'opzione -Z per visualizzare o impostare i contesti SELinux di un file, directory, processo o porta.
Il server MySQL legge e scrive su vari file se il contesto SELinux non è impostato correttamente su questi file, il processo mysqld potrebbe essere bloccato dall'accesso ai file. In alcuni casi, questo potrebbe impedire a mysqld di registrare errori.
Come elencare gli attuali contesti MySQL
Puoi elencare i contesti attuali usando:
# semanage fcontext -l | grep -i mysql
Come impostare il contesto della directory dei dati
Il percorso predefinito per la directory dei dati è /var/lib/mysql/ , il contesto SELinux utilizzato è mysqld_db_t . Se modifichi il file di configurazione per utilizzare una posizione diversa per la directory dei dati, o uno qualsiasi dei file normalmente nella directory dei dati (ad es. i log binari), potrebbe essere necessario impostare il contesto per la nuova posizione utilizzando
# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/datadir(/.*)?" # restorecon -Rv /path/to/my/custom/datadir
# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/logdir(/.*)?" # restorecon -Rv /path/to/my/custom/logdir
Come impostare il contesto del file di registro degli errori
La posizione predefinita per gli RPM RedHat è /var/log/mysqld.log , il contesto SELinux utilizzato è mysqld_log_t . Se modifichi il file di configurazione per utilizzare una posizione diversa, potrebbe essere necessario impostare il contesto per la nuova posizione utilizzando:
# semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log" # restorecon -Rv /path/to/my/custom/error.log
Come impostare il contesto del file PID
Il percorso predefinito per il file PID è /var/run/mysqld/mysqld.pid , il contesto SELinux utilizzato è mysqld_var_run_t . Se modifichi il file di configurazione per utilizzare una posizione diversa, potrebbe essere necessario impostare il contesto per la nuova posizione utilizzando:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?" # restorecon -Rv /path/to/my/custom/pidfile/directory
Come impostare il contesto del socket del dominio unix
La posizione predefinita per il socket del dominio unix è /var/lib/mysql/mysql.sock , il contesto SELinux utilizzato è mysqld_var_run_t . Se modifichi il file di configurazione per utilizzare una posizione diversa, potrebbe essere necessario impostare il contesto per la nuova posizione utilizzando:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql.sock" # restorecon -Rv /path/to/my/custom/mysql.sock
Come impostare il contesto della porta TCP
La porta TCP predefinita è 3306 , il contesto SELinux utilizzato è mysqld_port_t . Se modifichi il file di configurazione per utilizzare una porta TCP diversa o abiliti la replica di gruppo che utilizza una porta aggiuntiva (in genere la porta 13306), potrebbe essere necessario impostare il contesto per la nuova porta utilizzando:
# semanage port -a -t mysqld_port_t -p tcp 13306 # restorecon
Come impostare il contesto della directory secure_file_priv
Per le versioni di MySQL dalla 5.5.53, 5.6.34 e 5.7.16. L'installazione dell'RPM del server crea una directory /var/lib/mysql-files/, ma non imposta il contesto SELinux su questa directory. Questa directory è pensata per essere utilizzata per operazioni come "SELECT... INTO OUTFILE '. Se abiliti l'utilizzo di questa directory impostando secure_file_priv, potrebbe essere necessario impostare il contesto utilizzando:
# semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?" # restorecon -Rv /var/lib/mysql-files
Se lo imposti su una nuova posizione, dovrai modificare il percorso. Per ulteriori informazioni su questa variabile, vedere https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv. Per sicurezza, questa directory non dovrebbe mai trovarsi all'interno della directory dei dati.
Strumenti richiesti
Il binario semanage fa parte del pacchetto policycoreutils-python:
# yum install policycoreutils-python
Per utilizzare semanage con le prime versioni di RHEL 6 con python 2.6, potrebbe essere necessario installare un backport del modulo di raccolta Python OrderedDict utilizzando python-pip dal repository EPEL.
Installa il repository EPEL:
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/$(uname -m)/epel-release-6-8.noarch.rpm
Installa python-pip:
# yum install python-pip
Se l'installazione di python-pip restituisce questo errore:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
potrebbe essere necessario aggiornare i certificati CA SSL utilizzando:
# yum --disablerepo=epel -y update ca-certificates