Como permito conexões MySQL através do SELinux?

21

Gostaria de, pela primeira vez, deixar o SELinux em execução em um servidor pelo suposto aumento da segurança.
Normalmente desabilito o SELinux para que tudo funcione.
Como eu digo ao SELinux para permitir conexões MySQL?
O máximo que encontrei na documentação é esta linha do mysql.com:

Se você estiver executando no Linux e o Linux com segurança aprimorada (SELinux) estiver ativado, verifique se desativou a proteção do SELinux para o processo mysqld.

uau ... isso é realmente útil.

xivix
fonte
1
Forneça todas as informações a seguir para que possamos ter uma chance de ajudá-lo. 1. Linux Distro and Version, 2. Versão do MySQL e fonte de instalação, 3. Entradas de log AVC de uma conexão negada, 4. Logs relevantes do MySQL, se houver 5. A saída de getsebool -a | grep mysql6. Etapas exatas que você
executou

Respostas:

40

Para verificar o SELinux

sestatus

Para ver quais sinalizadores são definidos nos processos httpd

getsebool -a | grep httpd

Para permitir que o Apache se conecte ao banco de dados remoto através do SELinux

setsebool httpd_can_network_connect_db 1

A opção -P torna a alteração permanente. Sem essa opção, o booleano seria redefinido para 0 na reinicialização.

setsebool -P httpd_can_network_connect_db 1
Punjab
fonte
3
parece ser necessário ao conectar via loopback 127.0.0.1 também?
Devin Ceartas
@ Kevin, definitivamente.
e18r
2
Se você deseja permitir que os usuários se conectem ao servidor mysql local, também deve ativar o booleano selinuxuser_mysql_connect_enabled.
Anton Makovetsky
setsebool -P httpd_can_network_connect 1também pode ser necessário. Isso foi sugerido nos meus logs executando ausearch -m avc -ts today | audit2whycomo sugerido em um comentário do vnix27.
site
2

Voce encontrou um erro? Que sabor do linux você está usando? O contexto de segurança é um bom lugar para começar se você estiver recebendo um erro. ls -Z dará contexto ... Mas sua pergunta é muito vaga.


fonte
Estou me conectando a partir de uma caixa do Windows. Não há erro ... a conexão foi recusada e a página expirou. Sei que se desligar o selinux, tudo ficará bem.
Como a conexão é recebida de uma caixa do Windows, ls -Z só me fornece informações sobre os arquivos em qualquer diretório em que eu esteja na caixa do Linux.
Na minha pergunta acima, citei uma referência mysql ... que dizia desativar a proteção do selinux para o processo mysqld ... mas não diz como fazer isso :( Nem consigo descobrir como.
Alguma coisa nos logs da caixa linux? selinux pode parar httpd de fazer uma conexão de soquete ...
Nada nas mensagens ou nos logs seguros ... existe um registro específico que você tinha em mente?
1

Aparentemente, configurar o selinux não é trivial. Você pode querer começar aqui .

setenforce 0

coloca o selinux no modo permissivo, onde permite tudo, menos registra o que está permitindo. Uma reinicialização ou

setenforce 1

volta a bloquear o que a política não permite.

Confira estes documentos de política do selinux para mySQL no Fedora .

Paulo
fonte
1

O ausearchcomando pode ajudar a encontrar o log de erros.

vnix27
fonte
1
ausearch -m avc -ts hoje | audit2why, comando pode sugerir solução
vnix27
1

você também pode criar uma política local:

"Você pode gerar um módulo de política local para permitir esse acesso. Permita esse acesso por enquanto executando:"

grep httpd /var/log/audit/audit.log | audit2allow -M mypol

semodule -i mypol.pp

ou ativar globalmente para a sessão real:

setsebool httpd_can_network_connect_db 1

ou permanente:

setsebool -P httpd_can_network_connect_db 1
Raffaello
fonte