Instalar servidor HTTP Apache en fedora

El Proyecto servidor HTTP Apache es un esfuerzo por desarrollar y mantener un servidor HTTP de código abierto para sistemas operativos modernos, incluyendo UNIX y Windows NT. El objetivo de este proyecto es el de ofrecer un servidor seguro, eficiente y extendible que ofrezca servicios HTTP sincronizados con los stándares HTTP actuales”. [5]
En Fedora, el paquete httpd ofrece el Servidor HTTp Apache. Ejecute rpm -q httpd para saber si httpd ya se encuentra instalado. Si no lo está, y desea utilizarlo, ejecute como usuario root el siguiente comando para instalarlo:
yum install httpd

 El servidor HTTP Apache y SELinux

Cuando SELinux se encuentra habilitado, el servidor HTTP Apache (httpd) se ejecuta de manera confinada por defecto. Los procesos confinados son ejecutados en sus propios dominios, y estos son diferentes de otros procesos confinados. Si un proceso confinado se ve comprometido por un atacante, de acuerdo al tipo de política configurada en SELinux, el acceso del atacante al resto de los recursos es limitado, y por ende, el daño será menor. El ejemplo que ofrecemos a continuación muestra los procesos httpd ejecutándose en su propio dominio. El ejemplo presupone que el paquete httpd se encuentra instalado:
  1. Ejecute el comando getenforce para confirmar que SELinux esté ejecutándose en modo obligatorio:
    $ getenforce
    Enforcing
    
    El comando getenforce devuelve el resultado Enforcing cuando SELinux se esté ejecutando en modo obligatorio.
  2. Ejecute el comando service httpd start como usuario root para iniciar httpd:
    # service httpd start
    Starting httpd:                                            [  OK  ]
    
  3. Ejecute el comando ps -eZ | grep httpd para observar los procesos httpd:
    $ ps -eZ | grep httpd
    unconfined_u:system_r:httpd_t:s0 2850 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2852 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2853 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2854 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2855 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2856 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2857 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2858 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 2859 ? 00:00:00 httpd
    El contexto SELinux asociado con los procesos httpd es unconfined_u:system_r:httpd_t:s0. La segunda última parte del contexto, httpd_t, es el tipo. Un tipo define un dominio para los procesos, y un tipo para los archivos. En este caso, los procesos httpd están siendo ejecutados en el dominio httpd_t:
La política de SELinux define cómo los procesos ejecutados en dominios confinados (como lo es httpd_t), interactúan con archivos, otros procesos, y con el sistema en general. Los archivos deben estar etiquetados correctamente para permitir el acceso de httpd a ellos. Por ejemplo, httpd, puede leer archivos etiquetados con el tipo httpd_sys_content_t, pero no puede escribir en ellos, ni aún cuando lo permitan los permisos Linux. Los booleanos deben definirse con valor “on” para permitir determinados comportamientos: ciertos scripts que permiten el acceso a la red, habilitando a httpd para que pueda acceder a sistemas de archivos NFS y CIF5; o que a httpd se le permita ejecutar scripts CGI (Common Gateway Interface).
Cuando /etc/httpd/conf/httpd.conf se encuentre configurado de modo tal que httpd escuche sobre puerto diferente a los puertos TCP predeterminados (80, 443, 488, 8008, 8009, o 8443), debe utilizarse el comando semanage port para agregar el nuevo número de puerto a la configuración de políticas de SELinux. El ejemplo que ofrecemos a continuación demuestra como configurar httpd para que escuchar sobre un puerto que no se encuentre definido en las políticas de SELinux para httpd, y cuya consecuencia es que httpd no pueda iniciarse. Además, nuestro ejemplo muestra como configurar luego el sistema SElinux para permitir que httpd escuche exitosamente un puerto no estándar que no se encuentre todavía definido en la política. Estos ejemplos presuponen que el paquete httpd se encuentra instalado. Ejecute cada comando como usuario root:
  1. Ejecute el comando service httpd status para confirmar que httpd no esté ejecutándose:
    # service httpd status
    httpd is stopped
    
    Si la salida es diferente, ejecute el comando service httpd stop para detener el proceso:
    # service httpd stop
    Stopping httpd:                                            [  OK  ]
    
  2. Ejecute el comando semanage port -l | grep -w http_port_t para conocer los puertos que SELinux le permite escuchar a httpd:
    # semanage port -l | grep -w http_port_t
    http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443
    
  3. Edite el archivo /etc/httpd/conf/httpd.conf como usuario root. Configure la opción Listen de modo que liste los puertos que no están configurados en el archivo de configuración de políticas SELinux para httpd. En nuestro ejemplo, httpd se encuentra configurado para escuchar el puerto 12345:
    # Change this to Listen on specific IP addresses as shown below to 
    # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
    #
    #Listen 12.34.56.78:80
    Listen 127.0.0.1:12345
    
  4. Ejecute el comando service httpd start para iniciar httpd:
    # service httpd start
    Starting httpd: (13)Permission denied: make_sock: could not bind to address 127.0.0.1:12345
    no listening sockets available, shutting down
    Unable to open logs					   [FAILED]
    
    Una negación de SELinux similar a la siguiente se encuentra registrada en el archivo /var/log/messages:
    setroubleshoot: SELinux is preventing the httpd (httpd_t) from binding to port 12345. For complete SELinux messages. run sealert -l f18bca99-db64-4c16-9719-1db89f0d8c77
    
  5. PAra que SELinux permita a httpd escuchar en el puerto 12345, tal como en nuestro ejemplo, el necesario ejecutar el siguiente comando:
    # semanage port -a -t http_port_t -p tcp 12345
    
  6. Ejecute nuevamente el comando service httpd start para iniciar httpd, y hacer que escuche sobre el nuevo puerto:
    # service httpd start
    Starting httpd:						   [  OK  ]
    
  7. Ahora que SELinux ha sido configurado para permitir que httpd escuche en un puerto no estándar (TCP 12345 en nuestro ejemplo), httpd se inicia exitosamente en dicho puerto.
  8. Para verificar que httpd esté escuchando y comunicándose con el puerto TCP 12345, inicie una conexión telnet en el puerto específico y envié un comando HTTP GET de la siguiente manera:
    # telnet localhost 12345
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    GET / HTTP/1.0
    
    HTTP/1.1 200 OK
    Date: Tue, 31 Mar 2009 13:12:10 GMT
    Server: Apache/2.2.11 (Fedora)
    Accept-Ranges: bytes
    Content-Length: 3918
    Content-Type: text/html; charset=UTF-8
    [...continues...]
    
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s