Asegurar la plataforma

Prontus ha sido estructurado para ofrecer máxima seguridad y confiabilidad ante ataques o uso mal intencionado, de hecho, se puede llegar al extremo de publicar sólo páginas estáticas, sin permitir la ejecución de ningún aplicativo en el servidor.   Sin embargo, para lograr un buen nivel de seguridad deben tomarse algunas medidas en el servidor web.

Publicado: Martes 25 de septiembre de 2018 por David García
Última modificación: Miércoles 8 de abril de 2020
Uso de suExec

El uso de suExec provee a los usuarios  la posibilidad de correr programas con interfaz común de acceso, CGI (Common Gateway Interface) y directivas interpretadas por el servidor, SSI (Server Side Includes) bajo ID's de usuario diferentes del ID de usuario del servidor Web. Normalmente, cuando ejecutas un programa CGI o SSI, éste corre con el mismo ID de usuario con que el Servidor Web está corriendo.

Usada apropiadamente, esta característica puede reducir considerablemente los riesgos de seguridad que significa permitir a los usuarios desarrollar y ejecutar programas CGI o SSI privados.

El usuario a nombre del cual se ejecutarán las CGIs de Prontus debiera tener la menor cantidad de privilegios
posible. Por ejemplo, no deberías tener una shell válida si esto no es estrictamente necesario.

Aislamiento del ambiente de Administración

El ambiente de administración está conformado por directorios que contienen CGIs, páginas web de administración y datos sensibles.

Este ambiente puede aislarse de tres maneras posibles:

  1. Separa físicamente los servidores destinados a la administración y a la exposición de los contenidos en Internet. Realiza una copia o sincronización de archivos desde el servidor de administración hacia el o los servidores de producción expuestos a los usuarios en forma periódica o cada vez que un operador altera algo con herramientas tales como rsync.
  2. Monta dos servidores web en paralelo en la misma máquina, sobre el mismo espacio en disco, y controlar el acceso hacia el servidor que sirve para administrar los contenidos, calificando IPs de origen y usuarios.
  3. Protege los directorios sensibles calificando IPs de origen y usuarios.

Además de lo anterior, se recomienda que el servidor de administración sea seguro (https).

Proteger directorio de Publicación

Es altamente recomendable que protejas el directorio donde residen las CGIs de Prontus que publican los
contenidos. Este directorio suele denominarse cgi-cpn y sólo contiene CGIs usadas por los operadores del sitio
web. Ningún visitante necesita tener acceso a ellas.

La protección se implementa a nivel de servidor web y puede consistir en:

Autenticación básica (basic authentication)

Por ejemplo (servidor Apache):

# Solo permite acceso al usuario admin
<Directory /sites/sitio.com/web/cgi-cpn>
Authname "Area Protegida"
AuthGroupFile /dev/null
Authtype Basic
AuthUserFile /sites/sitio.com/conf/.htpasswd
order allow,deny
allow from all
require user admin
</Directory>


Validación de la red o host desde donde se puede acceder a estas aplicaciones

Por ejemplo (servidor Apache):

# Solo permite acceso desde el host 200.27.244.32
<Directory /sites/sitio.com/web/cgi-cpn>
Order allow,deny
allow from 200.27.244.32
</Directory>

Forzar el uso de un servidor seguro

Por ejemplo (servidor Apache):

# Redirecciona request a servidor seguro.
Redirect /cgi-cpn https://www.sitio.com/cgi-cpn
# Prohibe el acceso a este directorio.
<Directory /sites/sitio.com/web/cgi-cpn>
deny from all
</Directory>
Proteger directorios de Administración

Llamamos "directorios de administración" a los siguientes:

  • /cgi-cpn (ejecutables del panel de administración)
  • /prontus/cpan (plantillas y archivos de las vistas del panel de administración)
  • /prontus/data (datos necesarios para el uso del panel de administración)
  • /[identificador de prontus]/cpan (archivos de configuración de la instancia Prontus)

Sin embargo, parte de los contenidos ubicados dentro del directorio /[identificador de Prontus]/cpan son accedidos por el operador
(administrador, editor o redactor), por lo tanto la protección debe ser selectiva.

Para proteger estos contenidos, se debe:

Prohibir el acceso a todo usuario o red no calificado.

Por ejemplo (servidor Apache):

<Directory /sites/sitio.com/web/prontus_noticias/cpan>
Authname "Area Protegida"
AuthGroupFile /dev/null
Authtype Basic
AuthUserFile /sites/sitio.com/conf/.htpasswd
order allow,deny
allow from all
require user admin
</Directory>

y/o

Order allow,deny
allow from 200.27.244.32

Para prohibir todo acceso al material sensible dentro de los directorios /prontus/cpan y /prontus/data puedes usar por ejemplo instrucciones como estas (servidor Apache):

Order allow,deny
Deny from all
Prohibir el acceso a los archivos XML dentro del subdirectorio site

Prontus guarda la información completa de cada artículo en archivos xml que comparten la estructura de
directorios con las páginas (html, php, asp o jsp) generadas.

Si el sitio web contiene información confidencial, un visitante mal intencionado podría deducir el path hacia estos
archivos y de esta manera obtener acceso a esta información.

El path a los archivos xml tiene la forma:

[nombre del sitio]/site/artic/aaaammdd/xml/

Para prohibir el acceso a estos archivos se puede insertar, por ejemplo, la siguiente configuración (servidor Apache): 

<DirectoryMatch "/site/artic/[0-9]{8}/xml">
Order Deny,Allow
Deny from All
</DirectoryMatch>

Para ayudar a la protección de estos datos, Prontus genera archivos .htaccess en cada directorio xml, conteniendo lo siguiente:

Order Allow,Deny
Deny from All