PAPI - Configuración de un PoA
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.
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.
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.
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.
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
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>
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
<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>
<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>
Rodrigo Castro (RedIRIS) - Spain.
Diego R. Lopez (RedIRIS) - Spain.
Daniel García (RedIRIS) - Spain.