Se o pacote setroubleshoot-server
tiver sido instalado (recomendado), o programa setroubleshootd
será invocado via dbus do daemon de auditoria auditd
(embora indiretamente) e receberá registros do SELinux AVC para processar:
Observequesetroubleshootd
nãoé,naverdade,um"daemon" (costumava ser), mas um programa de atividades ativas que era sai novamente se tudo estiver quieto .
setroubleshootd
registrará no syslog, e você verá informações de negação do AVC. Por padrão, isso terminará em /var/log/messages
, a menos que rsyslog
tenha sido configurado de forma diferente.
setroubleshootd
também notificará clientes dbus interessados em eventos SELinux como sealert
ou widgets GUI.
Use sealert
para examinar registros AVC. A página man diz: "As duas opções de linha de comando mais úteis são -l para" procurar "uma ID de alerta e -a para" analisar "um arquivo de log."
Olhando para /var/log/messages
, um deles verá coisas como:
setroubleshoot: SELinux is preventing mysqld from
name_connect access on the tcp_socket port 3307. For complete SELinux
messages run: sealert -l 90cd70e9-0bb2-4668-b165-d5be37e26b22
.. e linhas adicionais de informações muito legíveis que acabam sendo uma boa parte da saída de sealert -l 90cd70e9-0bb2-4668-b165-d5be37e26b22
.
Então, vamos executar sealert -l 90cd70e9-0bb2-4668-b165-d5be37e26b22
- isso nos dá bons conselhos (não que esse registro tenha sido obtido enquanto o SELinux estava ativado):
SELinux is preventing mysqld from name_connect access on the tcp_socket port 3307.
***** Plugin connect_ports (85.9 confidence) suggests *********************
If you want to allow mysqld to connect to network port 3307
Then you need to modify the port type.
Do
# semanage port -a -t PORT_TYPE -p tcp 3307
where PORT_TYPE is one of the following: dns_port_t, dnssec_port_t,
kerberos_port_t, mysqld_port_t, ocsp_port_t, tram_port_t.
***** Plugin catchall_boolean (7.33 confidence) suggests ******************
If you want to allow nis to enabled
Then you must tell SELinux about this by enabling the 'nis_enabled' boolean.
You can read 'None' man page for more details.
Do
setsebool -P nis_enabled 1
***** Plugin catchall_boolean (7.33 confidence) suggests ******************
If you want to allow mysql to connect any
Then you must tell SELinux about this by enabling the 'mysql_connect_any' boolean.
You can read 'None' man page for more details.
Do
setsebool -P mysql_connect_any 1
***** Plugin catchall (1.35 confidence) suggests **************************
If you believe that mysqld should be allowed name_connect access on the
port 3307 tcp_socket by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'mysqld' --raw | audit2allow -M my-mysqld
# semodule -i my-mysqld.pp
Additional Information:
Source Context system_u:system_r:mysqld_t:s0
Target Context system_u:object_r:unreserved_port_t:s0
Target Objects port 3307 [ tcp_socket ]
Source mysqld
Source Path mysqld
Port 3307
Host foobar.example.com
Source RPM Packages
Target RPM Packages
Policy RPM selinux-policy-3.13.1-166.el7_4.9.noarch
Selinux Enabled True
Policy Type targeted
Enforcing Mode Enforcing
Host Name foobar.example.com
Platform Linux foobar.example.com
3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7
19:03:37 UTC 2018 x86_64 x86_64
Alert Count 36
First Seen 2018-03-22 16:04:59 CET
Last Seen 2018-03-22 16:39:59 CET
Local ID 90cd70e9-0bb2-4668-b165-d5be37e26b22
Raw Audit Messages
type=AVC msg=audit(1521733199.870:201): avc: denied { name_connect }
for pid=1352 comm="mysqld" dest=3307
scontext=system_u:system_r:mysqld_t:s0
tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket
Hash: mysqld,mysqld_t,unreserved_port_t,tcp_socket,name_connect
Então, com 85.9 de confiança ("Eu vou ser baaack!")
"Se você quiser permitir que o mysqld se conecte à porta de rede 3307, então você precisa modificar o tipo de porta. Do semanage port -a -t PORT_TYPE -p tcp 3307
" onde PORT_TYPE é mysqld_port_t
!