Nota: los comandos detallados en esta guía, salvo aclaración en contrario, se asumen ejecutados con la identidad de root.
Primer intento!
Si modificamos el archivo de configuración httpd.conf para que el servicio httpd "escuche" en el puerto 81 es posible que obtengamos el siguiente error:
# service httpd start Starting httpd: [Mon Aug 26 13:41:44 2013] [warn] module dav_svn_module is already loaded, skipping (13)Permission denied: make_sock: could not bind to address [::]:81 (13)Permission denied: make_sock: could not bind to address 0.0.0.0:81 no listening sockets available, shutting down Unable to open logs [FAILED]
Esto se debe a que la configuración de SELinux no permite la utilización de este puerto por parte del servicio httpd. A continuación se describen los pasos que se deben seguir para configurar el servicio de apache (httpd) en un puerto diferente al 80 cuando está activado SELinux.
Pasos iniciales
Verificar estado de SELinux
Para comprobar nuestra hipótesis, ejecutar el comando sestatus y verificar que SELinux se encuentra habilitado:
# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 21 Policy from config file: targeted
Verificar que el servicio httpd esté bajo
Antes de realizar cambios en las configuraciones conviene asegurarse que el servidor Apache está bajo:
# service httpd status httpd is stopped
Configurar SELinux
Obtener configuración de los puertos donde puede escuchar httpd
Ejecutando el comando semanage port -l se listan todos los puertos habilitados.
Nota: para httpd solo nos interesa conocer los puertos definidos para http_port_t.
# semanage port -l | grep http http_cache_port_t tcp 3128, 8080, 8118, 11211, 10001-10010 http_cache_port_t udp 3130, 11211 http_port_t tcp 80, 443, 488, 8008, 8009, 8443 pegasus_http_port_t tcp 5988 pegasus_https_port_t tcp 5989
Nota: El puerto 81 no está incluido y por ello el servidor falla al iniciar.
Agregar el puerto 81 a la lista de puertos habilitados para httpd
Necesitaremos del comando semanage port -a para habilitar un puerto, el siguiente comando permite habilitar un puerto para http_port_t:
# semanage port -a -t http_port_t -p tcp 81
Si ejecutamos nuevamente el comando semanage port -l deberíamos ver el puerto agregado a http_port_t.
# semanage port -l | grep http http_cache_port_t tcp 3128, 8080, 8118, 11211, 10001-10010 http_cache_port_t udp 3130, 11211 http_port_t tcp 81, 80, 443, 488, 8008, 8009, 8443 pegasus_http_port_t tcp 5988 pegasus_https_port_t tcp 5989
Iniciar el servicio httpd
Luego de realizar los cambios en las configuraciones se deberá reiniciar el servidor Apache.
# service httpd start
SSL
El procedimiento anterior se deberá repetir si se pretende acceder al servidor a través de HTTPS (SSL) utilizando un puerto no definido en http_port_t.
Referencias
- Fedora SELinux Project Pages (http://fedoraproject.org/wiki/SELinux)