26.5. Puesta en funcionamiento de guiones CGI

La interfaz de gateway común (CGI) de Apache permite crear contenido dinámico con programas o guiones que normalmente se conocen como guiones CGI. En teoría, se pueden escribir guiones CGI en cualquier lenguaje de programación. Por lo general se emplean lenguajes de guiones como Perl o PHP.

Para hacer que Apache proporcione contenido creado mediante guiones CGI, se debe activar mod_cgi. También es necesario mod_alias. Ambos módulos están habilitados por defecto. Consulte la Sección 26.4.2, “Activación y desactivación” para obtener información detallada acerca de la activación de módulos.

[Warning]Seguridad de CGI

Cuando se permite que el servidor ejecute guiones CGI se genera una brecha potencial en la seguridad. Consulte la Sección 26.7, “Cómo evitar problemas de seguridad” para obtener más información.

26.5.1. Configuración de Apache

En SUSE Linux, la ejecución de guiones CGI sólo está permitida en el directorio /srv/www/cgi-bin/. Esta ubicación está configurada de antemano para ejecutar guiones CGI. Si ha creado una configuración de host virtual (consulte Sección 26.2.1.2, “Configuración de hosts virtuales”) y quiere colocar los guiones en un directorio específico de hosts, debe desbloquear y configurar ese directorio.

Ejemplo 26.5. Configuración de CGI para VirtualHost

ScriptAlias /cgi-bin/ "/srv/www/example.com_cgi-bin/"1

<Directory "/srv/www/example.com_cgi-bin/">
 Options +ExecCGI2
 AddHandler cgi-script .cgi .pl3
 Order allow,deny4
 Allow from all
</Directory>
    
1

Indica a Apache que debe tratar todos los archivos de este directorio como guiones CGI.

2

Habilita la ejecución de guiones CGI.

3

Indica al servidor que debe tratar los archivos con las extensiones .pl y .cgi como guiones CGI. Se puede ajustar según las distintas necesidades.

4

Las directivas Order (Orden) y Allow (Permitir) controlan el estado de acceso por defecto y el orden en el que se evalúan las directivas Allow (Permitir) y Deny (Denegar). En este caso, las sentencias “deny” (denegar) se evalúan antes que las sentencias “allow” (permitir) y se habilita el acceso desde cualquier parte.

26.5.2. Ejecución de un guión de ejemplo

La programación de CGI se diferencia de la programación "normal" en que los programas y guiones CGI deben ir precedidos de un encabezado de tipo MIME, como Content-type: text/html. Este encabezado se envía al cliente para que entienda el tipo de contenido que recibe. En segundo lugar, la salida de los guiones debe ser algo que el cliente, normalmente un navegador Web, entienda: como HTML en la mayoría de los casos, texto sin formato o imágenes, por ejemplo.

El paquete de Apache incluye un guión simple de prueba en /usr/share/doc/packages/apache2/test-cgi. Con él se genera el contenido de algunas variables de entorno como texto sin formato. Copie este guión en /srv/www/cgi-bin/ o en el directorio de guiones de su host virtual (/srv/www/example.com_cgi-bin/) y asígnele el nombre test.cgi.

Los archivos a los que pueda acceder el servidor Web deben ser propiedad del usuario Root (consulte la Sección 26.7, “Cómo evitar problemas de seguridad” para obtener más información). Dado que el servidor Web se ejecuta con un usuario distinto, los guiones CGI deben poder ejecutarse y leerse globalmente. Acceda al directorio de CGI y utilice el comando chmod 755 test.cgi para aplicar los permisos adecuados.

A continuación, llame a http://localhost/cgi-bin/test.cgi o http://example.com/cgi-bin/test.cgi. Debería aparece el informe de prueba de guión “CGI/1.0 test script report”.

26.5.3. Solución de problemas

Si no se muestra el resultado del programa de prueba, sino un mensaje de error, compruebe lo siguiente:

Solución de problemas de CGI

  • ¿Ha vuelto a cargar el servidor después de cambiar la configuración? Compruébelo con rcapache2 probe.

  • Si ha configurado un directorio de CGI personalizado, ¿está configurado correctamente? Si no está seguro, pruebe el guión dentro del directorio CGI por defecto, /srv/www/cgi-bin/, y actívelo con http://localhost/cgi-bin/test.cgi.

  • ¿Son correctos los permisos de archivo? Acceda al directorio de CGI y ejecute el comando ls -l test.cgi. El resultado debe comenzar con

    -rwxr-xr-x  1 root root
         
  • Asegúrese de que el guión no incluya errores de programación. No debería ocurrir si no ha cambiado el archivo test.cgi; pero, si utiliza programas propios, asegúrese siempre de que no contengan errores de programación.