Introducci贸n
Al momento de estar configurando un servidor Linux y puesto que mi background es 100% de FreeBSD, me encontr茅 con una situaci贸n muy curiosa, el phpMyAdmin no pod铆a establecer conexiones con una base de datos RDS y no consegu铆a encontrar la raz贸n del problema.
Revis茅 logs de servidor web, base de datos, php, entre muchos otros, y no localizaba el error hasta que revis茅 el archivo "audit.log", donde me di cuenta de que SELinux era el problema ya que no permit铆a realizar conexiones hac铆a servidores externos desde el proceso del servidor web, y por lo mismo, el phpMyAdmin no se pod铆a conectar al servidor RDS.
A continuaci贸n se puede ver el mensaje de error que encontr茅 en archivo audit.log:
type=AVC msg=audit(1390241359.277:642): avc: denied { name_connect } for pid=13074 comm="httpd" dest=3306 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:mysqld_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1390241359.277:642): arch=c000003e syscall=42 success=no exit=-13 a0=b a1=7fff035692f0 a2=10 a3=b items=0 ppid=13068 pid=13074 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=87 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
Soluci贸n
Hay dos formas para permitir las conexiones externas desde el proceso de servidor web, la primera de ellas consiste en cambiar a modo permissive SELinux, esta soluci贸n aunque no es la recomendada, es la mas simple y nos evitar谩 futuros problemas con otros servicios. Esto lo hacemos ejecutando el siguiente comando:
# setenforce permissive
Y para hacer persistente el cambio se tiene que modificar la siguiente linea en el archivo /etc/sysconfig/selinux:
SELINUX=permissive
La segunda forma y de hecho, la recomendada, es cambiando la variable "httpd_can_network_connect_db" a "true", esto se logra de la siguiente forma:
# setsebool httpd_can_network_connect_db on
Podemos ver el estatus de SELinux utilizando el comando "sestatus" tal y como se muestra a continuaci贸n:
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted