Eu encontrei este guia passo a passo trabalhando para mim.
Você deve instalar:
yum install policycoreutils-python
Guia:
Veja o contexto do SELinux da localização padrão do banco de dados para o mysql:
~]# ls -lZ /var/lib/mysql
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
Isso mostra mysqld_db_t
, que é o elemento de contexto padrão para o local dos arquivos do banco de dados. Esse contexto terá que ser aplicado manualmente ao novo local do banco de dados que será usado neste exemplo para que ele funcione corretamente.
Pare o daemon do mysqld:
~]# systemctl stop mariadb.service
Crie um novo diretório para o novo local do (s) banco (s) de dados. Neste exemplo, / mysql / é usado:
~]# mkdir -p /mysql
Copie os arquivos do banco de dados do local antigo para o novo local:
~]# cp -R /var/lib/mysql/* /mysql/
Altere a propriedade deste local para permitir o acesso pelo usuário e grupo do mysql. Isso define as permissões tradicionais do Unix que o SELinux ainda observará:
~]# chown -R mysql:mysql /mysql
Execute o seguinte comando para ver o contexto inicial do novo diretório:
~]# ls -lZ /mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql
O contexto usr_t deste diretório recém-criado não é atualmente adequado para o SELinux como um local para arquivos de banco de dados do MariaDB. Depois que o contexto for alterado, o MariaDB poderá funcionar adequadamente nesta área.
Abra o arquivo de configuração principal do MariaDB /etc/my.cnf
com um editor de texto e modifique a opção datadir
para que ele se refira ao novo local. Neste exemplo, o valor que deve ser inserido é /mysql
:
[mysqld]
datadir=/mysql
Salve este arquivo e saia.
Iniciar mysqld
. O serviço deve falhar ao iniciar e uma mensagem de negação será registrada no arquivo /var/log/messages
:
~]# systemctl start mariadb.service
Job for mariadb.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
No entanto, se o daemon de auditoria estiver em execução e com ele o setroubleshoot
service, a negação será registrada no arquivo /var/log/audit/audit.log
:
SELinux is preventing '/usr/libexec/mysqld' "write" access on /mysql. For complete SELinux messages. run 'sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71'
O motivo dessa negação é que mysql não está rotulado corretamente para os arquivos de dados do MariaDB. O SELinux está impedindo o MariaDB de ter acesso ao conteúdo rotulado como usr_t
. Execute os seguintes passos para resolver este problema:
Execute o seguinte comando para adicionar um mapeamento de contexto para mysql . Observe que o semanageutility
não está instalado por padrão. Se estiver faltando no seu sistema, instale o pacote policycoreutils-python
.
~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
Esse mapeamento é gravado no arquivo /etc/selinux/targeted/contexts/files/file_contexts.local
:
~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local
/mysql(/.*)? system_u:object_r:mysqld_db_t:s0
Agora, use o utilitário restorecon
para aplicar esse mapeamento de contexto ao sistema em execução:
~]# restorecon -R -v /mysql
Agora que o local mysql foi rotulado com o contexto correto para o MariaDB, o mysqld é iniciado:
~]# systemctl start mariadb.service
Confirme se o contexto foi alterado para mysql :
~]$ ls -lZ /mysql
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
A localização foi alterada e rotulada e mysqld
foi iniciado com sucesso. Neste ponto, todos os serviços em execução devem ser testados para confirmar a operação normal.