Tente isto:
setsebool -P nagios_run_sudo 1
No host com NRPE. Esta opção está desabilitada por padrão na política do SELinux.
Eu tenho algumas máquinas virtuais na mesma LAN monitorada por Icinga2 via NRPE.
[Máquina A]
CentOS 6
Icinga2.
[Máquina B]
CentOS 6
MariaDB v10.1.12 executando corretamente
Configurações do datadir e socket em my.cnf:
datadir=/database/mariadb
socket=/database/mariadb/mysql.sock
Existe também o seguinte link simbólico:
/var/lib/mysql -> /database/mariadb
O proprietário: grupo de todos os acima é mysql: mysql.
SELinux ativado
/ usr / lib64 / nagios / plugins / check_mysql v2.0.3
com o seguinte contexto de segurança:
-rwxr-xr-x. root root system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib64/nagios/plugins/check_mysql
command[check_mysql]=/usr/lib64/nagios/plugins/check_mysql -H localhost -u xxx -p xxx -P 3306
Agora o problema:
Icinga (da máquina A) relata:
"Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)"
Se eu manualmente executar a seguinte linha na máquina B:
sudo -u nrpe /usr/lib64/nagios/plugins/check_mysql -H localhost -u xxx -p xxx -P 3306
O resultado é ok (código de saída 0):
Uptime: 2085 Threads: 1 Questions: 68204 Slow queries: 0 Opens: 37 Flush...
Somente quando desativo o SELinux na máquina B ( echo 0 > /selinux/enforce
), a Icinga é capaz de se conectar ao mysql e mostrar o status OK.
Mas eu não quero desativar o SELinux. Eu tento encontrar as configurações adequadas para ter o SELinux ativado e o Icinga se conectando corretamente ao mysql.
[editar]
Toda vez que o Icinga verifica o mysql na máquina B, vejo as duas novas linhas seguintes no audit.log na máquina B:
type=AVC msg=audit(1460038526.265:69): avc: denied { read } for pid=4858 comm="check_mysql" name="mysql" dev=dm-0 ino=130900 scontext=system_u:system_r:nagios_services_plugin_t:s0 tcontext=unconfined_u:object_r:var_lib_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1460038526.265:69): arch=c000003e syscall=42 success=no exit=-13 a0=3 a1=7fffe4d270f0 a2=6e a3=7fffe4d263e0 items=0 ppid=4857 pid=4858 auid=4294967295 uid=497 gid=498 euid=497 suid=497 fsuid=497 egid=498 sgid=498 fsgid=498 tty=(none) ses=4294967295 comm="check_mysql" exe="/usr/lib64/nagios/plugins/check_mysql" subj=system_u:system_r:nagios_services_plugin_t:s0 key=(null)
Tente isto:
setsebool -P nagios_run_sudo 1
No host com NRPE. Esta opção está desabilitada por padrão na política do SELinux.
Eu consegui resolvê-lo finalmente. Eu compartilho a solução abaixo, pois pode ser útil para os outros também.
Eu criei um arquivo de trabalho chamado audit.log contendo apenas as linhas abaixo:
type=AVC msg=audit(1460038526.265:69): avc: denied { read } for pid=4858 comm="check_mysql" name="mysql" dev=dm-0 ino=130900 scontext=system_u:system_r:nagios_services_plugin_t:s0 tcontext=unconfined_u:object_r:var_lib_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1460038526.265:69): arch=c000003e syscall=42 success=no exit=-13 a0=3 a1=7fffe4d270f0 a2=6e a3=7fffe4d263e0 items=0 ppid=4857 pid=4858 auid=4294967295 uid=497 gid=498 euid=497 suid=497 fsuid=497 egid=498 sgid=498 fsgid=498 tty=(none) ses=4294967295 comm="check_mysql" exe="/usr/lib64/nagios/plugins/check_mysql" subj=system_u:system_r:nagios_services_plugin_t:s0 key=(null)
eu corri:
sealert -a audit.log > sealert.log
O resultado sealert.log continha a explicação do problema:
SELinux is preventing /usr/lib64/nagios/plugins/check_mysql from read access on the lnk_file mysql.
e também sugestões para corrigi-lo. Como sugerido lá, eu corri o seguinte:
grep check_mysql audit.log | audit2allow -M mypol
Isso gerou dois arquivos: mypol.pp e mypol.te
Por fim, executei o seguinte, que resolveu completamente o problema:
semodule -i mypol.pp
Seu problema é que o soquete geralmente reside dentro de /var/lib/mysql
com os arquivos de dados.
Como você está usando um diretório de banco de dados diferente, o SELinux está bloqueando a solicitação, independentemente do symlink.
Você pode tentar acessar o MySQL através da conexão TCP (use 127.0.0.1
e não localhost
)
Mas isso ainda pode causar problemas com o SELinux com o próprio daemon do MySQL.