NOMBRE

Top

PAPI - Configuración de un PoA

CAMBIOS DESDE PAPI 1.4

Top

La configuración de un PAPI PoA ha cambiado desde la versión 1.4. En dicha versión, las directivas de configuración del PoA se definen en el fichero de configuración de Apache como si fuesen directivas de configuración del propio servidor web. Para que esto fuera posible, se hacia uso del módulo PAPI::Conf el cual debía ser cargado desde el fichero de configuración de Apache mediante la directiva PerlModule.

En la versión 1.5 de PAPI, las directivas de configuración se definen fuera del fichero de configuración de Apache, y por tanto fuera del ámbito de dicho servidor web. Para ello se le ha proporcionado a PAPI un fichero con sintaxis XML, donde se definen las directivas de configuración de los PoAs PAPI.

PROCESO DE CONFIGURACIÓN

Top

El proceso de configuración consta de dos partes bien diferenciadas. La primera es la configuración del servidor web Apache, donde se debe indicar que lanze el proceso de configuración de PAPI-1.5; así como definir los recursos que se desea papizar (proteger con PAPI-1.5.) La segunda parte es la configuración propia de los PAPI PoAs correspondietes a los recursos definidos en Apache, que consiste en indicar las directivas de configuración deseadas para cada PoA.

Configuración del servidor Web Apache

PAPI 1.5 se distribuye con un fichero de configuración para Apache, que contiene las directivas necesarias para PAPI, y que puede ser referenciado desde el fichero httpd.conf de configuración de Apache, o se puede, simplemente, copiar las directivas al fichero httpd.conf. Este fichero es doc/Apache_PoA-1.5.conf; y para referenciarlo desde Apache, se hace uso de la directiva Include, como se muestra a continuación

  #
  ## Fichero de configuración para papi.
  #
  Include /usr/local/apache/conf/PAPIConf/PoA/Apache_PoA-1.5.conf

De donde se deduce que el fichero se ha copiado al directorio /usr/local/apache/conf/PAPIConf/PoA/.

En el fichero Apache_PoA-1.5.conf se declaran tres variables de entorno Perl, que definen el comportamiento del proceso de inicialización y configuración de PAPI.

* PoA_CONFIG_FILE

Esta variable define la localización del fichero XML de configuración de PAPI. Recibe una cadena que representa la ruta donde está ubicado el fichero anteriormente citado. Dicha variable se define como se muestra a continuación

	PerlSetEnv PoA_CONFIG_FILE /usr/local/apache/conf/PAPIConf/PoA/papi_conf.xml

Se recomienda proporcionar el path absoluto para el fichero XML de configuración.

* CONFIG_VERBOSE

Esta variable determina si el proceso de configuración se realiza en modo verboso o no, de forma que si el valor de la variable es true, la configuración de PAPI 1.5 será volcada a la salida estándar, y en el caso de que su valor sea false, no se volcará nada por la salida estándar. El propósito de esta variable es ayudar a la depuración de la configuracion de PAPI 1.5, por lo que es opcional. En el siguiente ejemplo, la variable está comentada, por lo que la configuración no será volcada por la salida estándar

	#PerlSetEnv CONFIG_VERBOSE true

* XML_CHECKER_ACTIVE

Esta variable indica a PAPI que cheque la sintaxis del ficchero XML contra su DTD correspondiente. El comportamiento por defecto es realizar el chequeo, ya esté definida o no la variable. El chequeo se realiza al iniciar Apache, si se encuentra algún fallo el servidor Apache no se iniciará. En el siguiente ejemplo se está desactivando el chequeo de sintaxis del XML

	PerlSetEnv XML_CHECKER_ACTIVE false

Es importante, que junto al fichero papi_conf.xml se encuentre el fichero DTD que contiene la declaración de tipo para dicho fichero XML. Ya que este último espera encontrar su correspondiente DTD en el directorio en el que se encuentre. Aunque esto puede modificarse en la declaración del DTD interna del fichero XML. Como se muestra a continuación

	<!DOCTYPE PAPI_Configuration SYSTEM "file://new/path/for/DTD/papi_conf.dtd">		

Nota: se ha detectado que en Solaris puede producirse errores al realizar el chequeo, por lo que se recomienda desactivarlo, si se observan dichos errores.

El fichero apache_PoA-1.5.conf además de la variables descritas anteriormente, tiene dos secciones PerlSection. En la primera de ellas se define una variable y se requiere el script que dispara la configuración del PAPI PoA, tal como se muestra a continuación:

    <Perl>
        $Apache2::PerlSections::Save = 1;
        require "PAPI/PAPI_Apache2_conf.pl";
    </Perl>

La variable $Apache2::PerlSections::Save se usa para salvar toda la configuración de Apache que se realiza dentro de una PerlSection, con el fin de mostrala posteriormente por pantalla, o guardarla en un fichero. Esto es útil para depurar el proceso dinámico de configuración de Apache. El fichero PAPI/PAPI_Apache2_conf.pl es el script que dispara la configuración de PAPI, y que se instala junto con los módulos de Perl.

La segunda PerlSection tiene la finalidad de imprimir por salida estándar la configuración generada o modificada de apache durante el proceso de configuración de PAPI; siempre y cuando la variable $Apache2::PerlSections::Save se haya establecido a 1.

    <Perl>
        print Apache2::PerlSections->dump;
    </Perl>

Configuración del PAPI PoA

Como ya se ha comentado anteriormente, PAPI 1.5 se configura mediante un fichero XML. Se ha intentado mantener los nombres de las directivas de PAPI 1.4 para los tags del fichero XML, de forma que para aquellos que ya hayan trabajado con PAPI, no les resultará muy costoso adaptarse a nuevo método de configuración.

El fichero XML mantiene el mismo criterio de configuración que la versión 1.4 de PAPI, donde se usaba en el fichero httpd.conf de Apache. Es decir, sigue existiendo una sección donde se definen los valores por defecto y/o comunes para PAPI. Siendo todas las directivas (definidas en esta sección) heredadas por las secciones más especificas.

    <Global>
      <Accept_File>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/blueball.gif</Accept_File>
      <Reject_File>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/redball.gif</Reject_File>
      <Debug>0</Debug>
      <HKey>YWNhOWZkNzE4MDRhFDRKJKJffg54DfkxNzgwMzNmOTU=</HKey>
      <LKey>ZjYwNTk2DFrdfTYHNjhkMmZlZjM0NDMwMDlhNWYyMWU=</LKey>
      <Pubkeys_Path>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA</Pubkeys_Path>
      <Hcook_DB>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/hcookdb</Hcook_DB>
      <Lcook_Timeout>18000</Lcook_Timeout> <CRC_Timeout>1800</CRC_Timeout>
      <URL_Timeout>1800</URL_Timeout>
      <Req_DB>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/req_db.mldbm</Req_DB>
      <PAPI_AS id="PAPI-1.33" url="http://squirtle.rediris.es/cgi-bin/AuthServer">PAPIusando Apache-1.5</PAPI_AS>
    </Global>

Esta sección Global se corresponde con la sección PAPI_Main de PAPI-1.4.

Se define un nuevo tipo de sección Server, la cual no tiene correspondencia directa con ninguna sección de PAPI-1.4, pero que se corredpondería con PAPI_Local. La sección Server se ha de corresponder siempre a un VirtualHost de Apache, de forma que todas las directivas PAPI contenidas en una sección Server se aplicarán a todos los recursos papizados del VirtualHost al que se corresponde.

    <Server name="name.rediris.es" port="8888" independent="0">
      <PAPI_AS id="PAPI-1.56" url="http://squirtle.rediris.es/AS">PAPI AS Squirtle</PAPI_AS>
      ...
    </Server>

La sección Server arriba mostrada se correspondería con un VirtualHost de Apache como se muestra acontinuación

    <VirtualHost _defaultIP_:8888>
      ServerName	 name.rediris.es
      ServerAlias	 www.name.rediris.es
      DocumentRoot /usr/local/htdocs
      ServerAdmin adminis.trador@rediris.es
      ...
    </VritualHost>

Dentro de la sección Server se definen las secciones de tipo Location, Directory, File, que se corresponden con las secciones PAPI_Local de PAPI-1.4 que se ubicaban dentro de recursos <Location>, <Directory>, <File> de Apache respectivamente.

    <Server name="name.rediris.es" port="8888" independent="0">
      <Location path="/" id="proxy" filtered="true" independent="false">
        <GPoA_URL>wayf:built-in</GPoA_URL>
        ...
      </Location>
      <Directory path="/tets" id="test0" filtered="true" independent="false">
        <PAPI_AS id="PAPI-1.94" url="http://tesa.rediris.es/AS">PAPI Test AS</PAPI_AS>
        <GPoA_URL>wayf:built-in</GPoA_URL>
        ...
      </Directory>
    </Server>

La sección Server arriba mostrada se correspondería con un VirtualHost de Apache como se muestra acontinuación

    <VirtualHost _defaultIP_:8888>
      ServerName	 name.rediris.es
      ServerAlias	 www.name.rediris.es
      DocumentRoot /usr/local/htdocs
      ServerAdmin adminis.trador@rediris.es

      <Location />
        Options Indexes
        AllowOverride None
        Order allow,deny
        Allow from all			

        PerlSetVar          Service_ID proxy
        PerlOptions         +ParseHeaders
        SetHandler          perl-script
        PerlAccessHandler   PAPI::Main
      </Location>

      <Directory /test>
        Options Indexes
        AllowOverride None
        Order allow,deny
        Allow from all			

        PerlSetVar          Service_ID test0
        PerlOptions         +ParseHeaders
        SetHandler          perl-script
        PerlAccessHandler   PAPI::Main      
      </Directory>
    </VritualHost>

Existe otra diferencia con respecto a la forma de definir los recursos que se desean proteger con PAPI-1.5, y es que en el fichero XML no se admiten secciones Location, Directory ni Files fuera de una sección Global o de una sección Server.

Si queremos papizar una sección que no se encentra declarada en ningún VirtualHost, deberemos declararla dentro de la sección Global del fichero XML de configuración de PAPI, tal y como se muestra a continuación

* Configuración en Apache httpd.conf:
  <Location /remote>
    Options Indexes
    AllowOverride None
    Order allow,deny
    Allow from all			

    PerlSetVar          Service_ID remote
    PerlOptions         +ParseHeaders
    SetHandler          perl-script
    PerlAccessHandler   PAPI::Main
  </Location>

* Configuración en PAPI papi_conf.xml
  <Global>
    <Accept_File>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/blueball.gif</Accept_File>
    <Reject_File>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/redball.gif</Reject_File>
    <Debug>0</Debug>
    ...
    <PAPI_AS id="PAPI-1.33" url="http://squirtle.rediris.es/cgi-bin/AuthServer">PAPI usando Apache-1.5</PAPI_AS>
    <Location path="/remote" id="remote" filtered="true" independent="false">
      <GPoA_URL>wayf:built-in</GPoA_URL>
      <Remote_URL>http://www.rediris.es</Remote_URL>
      <!-- This directive makes all links to remote2.dom.ain in pages
           served by the PoA to be redirected through the PoA as well
      -->
      <PAPI_Redirect src_regex="http://*.rediris.es" dst="http://squirtle.rediris.es:8888"/>
      <PAPI_AS id="PAPI_AS" url="http://squirtle.rediris.es/cgi-bin/AuthServer">AS auxiliar</PAPI_AS>          
    </Location>
  </Global>

Como se puede comprobar en el ejemplo anterior, en la configuración de Apache se ha de añadir las directivas:

    PerlSetVar          Service_ID remote
    PerlOptions         +ParseHeaders
    SetHandler          perl-script
    PerlAccessHandler   PAPI::Main

Donde la primera define una variable de entorno Perl

    PerlSetVar Service_ID remote

que se corresponde con el identificdor asignado al recurso en la declaración de éste en el fichero XML de PAPI

    <Location path="/remote" id="remote"... >
      ...
    </Location>

AUTOR

Top

Rodrigo Castro (RedIRIS) - Spain.

Diego R. Lopez (RedIRIS) - Spain.

Daniel García (RedIRIS) - Spain.